diff --git a/.github/workflows/bundle-validate.yml b/.github/workflows/bundle-validate.yml index cbc14c8..2cc910f 100644 --- a/.github/workflows/bundle-validate.yml +++ b/.github/workflows/bundle-validate.yml @@ -26,9 +26,13 @@ jobs: npm i -g mint curl -fsSL https://go.speakeasy.com/cli-install.sh | sh - - name: Bundle OpenAPI spec + - name: Bundle OpenAPI spec (full, for Speakeasy) run: | - npx @redocly/cli bundle specs/spec.yml -o openapi.yml + npx @redocly/cli bundle full -o openapi.yml + + - name: Bundle OpenAPI spec (public, for Mintlify) + run: | + npx @redocly/cli bundle public -o openapi-docs.yml - name: Run Redocly linter run: | @@ -36,17 +40,19 @@ jobs: - name: Run Mintlify linter run: | - npx mint openapi-check openapi.yml + npx mint openapi-check openapi-docs.yml - name: Run Speakeasy linter run: | speakeasy lint openapi -s openapi.yml - - name: Upload bundled spec + - name: Upload bundled specs uses: actions/upload-artifact@v4 with: name: openapi-spec - path: openapi.yml + path: | + openapi.yml + openapi-docs.yml if-no-files-found: error continue-on-error: false @@ -68,10 +74,10 @@ jobs: name: openapi-spec path: . - - name: Commit Bundled API Spec + - name: Commit Bundled API Specs run: | git config --global user.name 'GitHub Action' git config --global user.email 'action@github.com' - git add openapi.yml - git diff --quiet && git diff --staged --quiet || (git commit -m "chore: update bundled openapi.yml" && git push) + git add openapi.yml openapi-docs.yml + git diff --quiet && git diff --staged --quiet || (git commit -m "chore: update bundled openapi specs" && git push) continue-on-error: false diff --git a/openapi-docs.yml b/openapi-docs.yml new file mode 100644 index 0000000..60f5f7b --- /dev/null +++ b/openapi-docs.yml @@ -0,0 +1,16644 @@ +openapi: 3.1.0 +info: + title: Dwolla API + description: Dwolla API Documentation + contact: + name: Dwolla Developer Relations Team + url: https://developers.dwolla.com + email: api@dwolla.com + version: '2.0' + termsOfService: https://www.dwolla.com/legal/tos/ + license: + name: MIT + url: https://github.com/Dwolla/dwolla-openapi/blob/master/LICENSE +jsonSchemaDialect: https://spec.openapis.org/oas/3.1/dialect/base +servers: + - url: https://api.dwolla.com + description: Production server + - url: https://api-sandbox.dwolla.com + description: Sandbox server +security: + - clientCredentials: [] +tags: + - name: tokens + description: Operations related to Application Access Tokens + - name: root + description: Root API operations + - name: accounts + description: Operations related to Accounts + - name: customers + description: Operations related to Customers + - name: kba + description: Operations related to Knowledge-Based Authentication + - name: beneficial owners + description: Operations related to Beneficial Owners + - name: documents + description: Operations related to Documents + - name: exchanges + description: Operations related to Exchanges + - name: exchange sessions + description: Operations related to Exchange Sessions + - name: funding sources + description: Operations related to Funding Sources + - name: transfers + description: Operations related to Transfers + - name: labels + description: Operations related to Labels + - name: mass payments + description: Operations related to Mass Payments + - name: events + description: Operations related to Events + - name: webhook subscriptions + description: Operations related to Webhook Subscriptions + - name: webhooks + description: Operations related to Webhooks + - name: client tokens + description: Operations related to Client Tokens + - name: sandbox simulations + description: Sandbox-only operations for simulating processing of bank transfers +paths: + /token: + post: + tags: + - tokens + summary: Create an application access token + description: Generate an application access token using OAuth 2.0 client credentials flow for server-to-server authentication. Requires client ID and secret sent via Basic authentication header with grant_type=client_credentials in the request body. Returns a bearer access token with expiration time for authenticating API requests scoped to your application. Essential for secure API access. + operationId: createApplicationAccessToken + x-speakeasy-group: tokens + x-speakeasy-name-override: create + security: + - basicAuth: [] + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/token + Authorization: Basic YkVEMGJMaEFhb0pDamplbmFPVjNwMDZSeE9Eb2pyOUNFUzN1dldXcXUyeE9RYk9GeUE6WEZ0bmJIbXR3dXEwNVI1Yk91WmVOWHlqcW9RelNSc21zUU5qelFOZUFZUlRIbmhHRGw= + Content-Type: application/x-www-form-urlencoded + + grant_type=client_credentials + - lang: javascript + source: | + // Using DwollaV2 - https://github.com/Dwolla/dwolla-v2-node + // This example assumes you've already initialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools + client.auth + .client() + .then(function (appToken) { + return appToken.get("/"); + }) + .then(function (res) { + console.log(JSON.stringify(res.body)); + }); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + // This example assumes you've already initialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools + app_token = client.Auth.client() + - lang: php + source: | + token(); + + DwollaSwagger\Configuration::$access_token = $appToken->access_token; + ?> + - lang: ruby + source: | + # Using DwollaV2 - https://github.com/Dwolla/dwolla-v2-ruby + // This example assumes you've already initialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools + app_token = $dwolla.auths.client + # => # access_token="..." expires_in=3600 scope="..."> + requestBody: + required: true + description: OAuth get token request. Client credentials are sent in the Authorization header using Basic authentication. + content: + application/x-www-form-urlencoded: + schema: + type: object + required: + - grant_type + properties: + grant_type: + type: string + enum: + - client_credentials + description: Must be set to "client_credentials" + example: client_credentials + responses: + '200': + description: successful operation + headers: {} + content: + application/json: + schema: + type: object + required: + - access_token + - token_type + - expires_in + properties: + access_token: + type: string + description: A new access token that is used to authenticate against resources that belong to the app itself. + example: gTm0p62yYXFiB1rOdhV0TsNOinC2V2P1CMaAtojkO9JEGbv3i5 + token_type: + type: string + description: The type of token, always "Bearer" + example: Bearer + expires_in: + type: integer + description: The lifetime of the access token, in seconds. Default is 3600. + example: 3599 + '401': + description: Unauthorized + headers: {} + content: + application/json: + schema: + type: object + properties: + error: + type: string + example: invalid_client + /: + get: + tags: + - root + summary: root + description: Retrieve the API root entry point to discover available resources and endpoints based on your OAuth access token permissions. Returns HAL+JSON with navigation links to accessible resources including accounts, customers, events, and webhook subscriptions depending on token scope. Essential for API exploration, dynamic resource discovery, and building adaptive client applications that respond to available permissions. + operationId: getRoot + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/ + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla.get("/").then((res) => res.body._links.account.href); // => 'https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + root = app_token.get('/') + root.body['_links']['account']['href'] # => 'https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254' + - lang: php + source: | + root(); + $accountUrl = $root->_links["account"]->href; # => "https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + root = app_token.get "/" + root._links.account.href # => "https://api-sandbox.dwolla.com/accounts/ad5f2162-404a-4c4c-994e-6ab6c3a13254" + parameters: + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Root' + '401': + description: unauthorized + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidAccessToken + message: + type: string + example: Invalid access token. + deprecated: false + /accounts/{id}: + get: + tags: + - accounts + summary: Retrieve account details + description: Returns basic account information for your authorized Main Dwolla Account, including account ID, name, and links to related resources such as funding sources, transfers, and customers. + operationId: getAccount + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var accountUrl = "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b"; + + dwolla.get(accountUrl).then((res) => res.body.name); // => 'Jane Doe' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + account_url = 'https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b' + + account = app_token.get(account_url) + account.body['name'] + - lang: php + source: | + id($accountUrl); + print($account->name); # => "Jane Doe" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + account_url = 'https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b' + + account = app_token.get account_url + account.name # => "Jane Doe" + parameters: + - name: id + in: path + description: Account's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Account' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to retrieve an Account by id. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /funding-sources: + post: + tags: + - accounts + summary: Create a funding source for an account + description: | + Create a funding source by adding a bank account to a Main Dwolla Account. This endpoint allows you to connect a checking or savings account using either manual bank account details or an exchange resource. + + For more information about funding sources, see the [Funding Sources API Reference](https://developers.dwolla.com/docs/api-reference/funding-sources). + operationId: createFundingSource + x-speakeasy-group: accounts.fundingSources + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/funding-sources + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + { + "routingNumber": "222222226", + "accountNumber": "123456789", + "bankAccountType": "checking", + "name": "My Bank" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var requestBody = { + routingNumber: "222222226", + accountNumber: "123456789", + bankAccountType: "checking", + name: "My Bank", + }; + + dwolla + .post("funding-sources", requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + request_body = { + 'routingNumber': '222222226', + 'accountNumber': '123456789', + 'bankAccountType': 'checking', + 'name': 'My Bank' + } + + funding_source = app_token.post('funding-sources', request_body) + funding_source.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3' + - lang: php + source: | + createFundingSource([ + "routingNumber" => "222222226", + "accountNumber" => "123456789", + "bankAccountType" => "checking", + "name" => "My Bank" + ]); + $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + request_body = { + routingNumber: '222222226', + accountNumber: '123456789', + bankAccountType: 'checking', + name: 'My Bank' + } + + funding_source = app_token.post "funding-sources", request_body + funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/04173e17-6398-4d36-a167-9d98c4b1f1c3" + parameters: + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for the funding source to be created + content: + application/json: + schema: + $ref: '#/components/schemas/CreateAccountFundingSource' + responses: + '201': + description: successful operation + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad request or duplicate resource + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/BadRequestSchema' + - $ref: '#/components/schemas/DuplicateResourceSchema' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to create funding source. + /accounts/{id}/funding-sources: + get: + tags: + - accounts + summary: List funding sources for an account + description: | + Get a list of all funding sources associated with a specific Main Dwolla Account. This endpoint returns both bank accounts and balance funding sources, with detailed information about each funding source's status, type, and available processing channels. + operationId: listFundingSources + x-speakeasy-group: accounts.fundingSources + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .get("accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources") + .then((res) => res.body.total); // => 1 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_sources = app_token.get('accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources') + funding_sources.body['total'] # => 1 + - lang: php + source: | + getAccountFundingSources("CA366CA3-6D30-44D6-B0F3-8D86C64462A1"); + $fundingSources->total; # => 1 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_sources = app_token.get "accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/funding-sources" + funding_sources.total # => 1 + parameters: + - name: id + in: path + description: Account's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + - name: removed + in: query + description: Filter removed funding sources. Boolean value. Defaults to `true` + required: false + schema: + type: string + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/FundingSources' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to list funding sources. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Account not found. + /accounts/{id}/transfers: + get: + tags: + - accounts + summary: List and search account transfers + description: Returns a paginated, searchable list of transfers associated with the specified Main Dwolla account. Supports advanced filtering by amount range, date range, transfer status, and correlation ID. Results are limited to 10,000 transfers per query; use date range filters for historical data beyond this limit. + operationId: listAndSearchTransfers + x-speakeasy-group: accounts.transfers + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .get("accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers") + .then((res) => res.body.total); // => 1 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + transfers = app_token.get('accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers') + transfers.body['total'] # => 1 + - lang: php + source: | + getAccountTransfers("CA366CA3-6D30-44D6-B0F3-8D86C64462A1"); + $transfers->total; # => 1 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + transfers = app_token.get "accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/transfers" + transfers.total # => 1 + parameters: + - name: id + in: path + description: Account's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + - name: search + in: query + description: A string to search on fields `firstName`, `lastName`, `email`, `businessName`, Customer ID, and Account ID + required: false + schema: + type: string + - name: startAmount + in: query + description: Only include transactions with an amount equal to or greater than `startAmount` + required: false + schema: + type: string + - name: endAmount + in: query + description: Only include transactions with an amount equal to or less than `endAmount` + required: false + schema: + type: string + - name: startDate + in: query + description: Only include transactions created after this date. ISO-8601 format `YYYY-MM-DD` + required: false + schema: + type: string + - name: endDate + in: query + description: Only include transactions created before this date. ISO-8601 format `YYYY-MM-DD` + required: false + schema: + type: string + - name: status + in: query + description: Filter on transaction status. Possible values are `pending`, `processed`, `failed`, or `cancelled` + required: false + schema: + type: string + - name: correlationId + in: query + description: A string value to search on if `correlationId` was specified for a transaction + required: false + schema: + type: string + - name: limit + in: query + description: Number of search results to return. Defaults to 25 + required: false + schema: + type: string + - name: offset + in: query + description: Number of search results to skip. Use for pagination + required: false + schema: + type: string + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Transfers' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Account not found. + /accounts/{id}/mass-payments: + get: + tags: + - accounts + summary: List account mass payments + description: Returns a paginated list of mass payments created by your Main Dwolla account. Results are sorted by creation date in descending order (newest first) and can be filtered by correlation ID. + operationId: listMassPayments + x-speakeasy-group: accounts.massPayments + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .get("accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments") + .then((res) => res.body.total); // => 1 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + mass_payments = app_token.get('accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments') + mass_payments.body['total'] # => 1 + - lang: php + source: | + getAccountMassPayments("CA366CA3-6D30-44D6-B0F3-8D86C64462A1"); + $massPayments->total; # => 1 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + mass_payments = app_token.get "accounts/CA366CA3-6D30-44D6-B0F3-8D86C64462A1/mass-payments" + mass_payments.total # => 1 + parameters: + - name: id + in: path + description: Account's unique identifier + required: true + style: simple + explode: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + - name: limit + in: query + description: Maximum number of results to return + required: false + schema: + type: integer + format: int32 + minimum: 1 + maximum: 200 + default: 25 + example: 25 + - name: offset + in: query + description: How many results to skip. + style: form + explode: true + schema: + type: integer + format: int32 + default: 0 + example: 0 + - name: correlationId + in: query + description: Correlation ID to search by. + style: form + explode: true + schema: + type: string + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/MassPayments' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to list mass payments. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Account not found. + /customers: + get: + tags: + - customers + summary: List and search customers + description: Returns a paginated list of customers sorted by creation date. Supports fuzzy search across customer names, business names, and email addresses, plus exact filtering by email and verification status. Default limit is 25 customers per page, maximum 200. + operationId: listAndSearchCustomers + x-speakeasy-name-override: list + parameters: + - name: limit + in: query + description: How many results to return + required: false + schema: + type: integer + - name: offset + in: query + description: How many results to skip + required: false + schema: + type: integer + - name: search + in: query + description: Searches on certain fields + required: false + schema: + type: string + - name: status + in: query + description: Filter by customer status + required: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Customers' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + post: + tags: + - customers + summary: Create a customer + description: Creates a new customer with different verification levels and capabilities. Supports personal verified customers (individuals), business verified customers (businesses), unverified customers, and receive-only users. Customer type determines transaction limits, verification requirements, and available features. + operationId: createCustomer + x-speakeasy-name-override: create + parameters: + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for customer to be created + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateReceiveOnlyUser' + - $ref: '#/components/schemas/CreateUnverifiedCustomer' + - $ref: '#/components/schemas/CreateVerifiedPersonalCustomer' + - $ref: '#/components/schemas/CreateVerifiedSolePropCustomer' + - $ref: '#/components/schemas/CreateVerifiedBusinessCustomerWithController' + - $ref: '#/components/schemas/CreateVerifiedBusinessCustomerWithInternationalController' + responses: + '201': + description: successful operation + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to create customers. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: not found. + /customers/{id}: + get: + tags: + - customers + summary: Retrieve a customer + description: Retrieve identifying information for a specific customer. The returned data varies by customer type - verified customers include contact details, address information, and verification status, while unverified customers and receive-only users contain basic contact information only. + operationId: getCustomer + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/FC451A7A-AE30-4404-AB95-E3553FCD733F + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .get("customers/FC451A7A-AE30-4404-AB95-E3553FCD733F") + .then((res) => res.body); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer = app_token.get('customers/FC451A7A-AE30-4404-AB95-E3553FCD733F') + customer.body + - lang: php + source: | + getCustomer("FC451A7A-AE30-4404-AB95-E3553FCD733F"); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer = app_token.get "customers/FC451A7A-AE30-4404-AB95-E3553FCD733F" + parameters: + - name: id + in: path + description: Customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - $ref: '#/components/schemas/ReceiveOnlyCustomer' + - $ref: '#/components/schemas/VerifiedPersonalCustomer' + - $ref: '#/components/schemas/VerifiedSolePropCustomer' + - $ref: '#/components/schemas/VerifiedBusinessCustomer' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to get a customer by id. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Customer not found. + post: + tags: + - customers + summary: Update a customer + description: Update Customer information, upgrade an unverified Customer to a verified Customer, suspend a Customer, deactivate a Customer, reactivate a Customer, and update a verified Customer's information to retry verification. + operationId: update + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/customers/FC451A7A-AE30-4404-AB95-E3553FCD733F + Content-Type: application/json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "firstName": "John", + "lastName": "Doe", + "email": "johndoe@example.com" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .post("customers/FC451A7A-AE30-4404-AB95-E3553FCD733F", { + firstName: "John", + lastName: "Doe", + email: "johndoe@example.com" + }) + .then((res) => res.body); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer = app_token.post('customers/FC451A7A-AE30-4404-AB95-E3553FCD733F', { + 'firstName': 'John', + 'lastName': 'Doe', + 'email': 'johndoe@example.com' + }) + customer.body + - lang: php + source: | + updateCustomer("FC451A7A-AE30-4404-AB95-E3553FCD733F", [ + 'firstName' => 'John', + 'lastName' => 'Doe', + 'email' => 'johndoe@example.com' + ]); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer = app_token.post "customers/FC451A7A-AE30-4404-AB95-E3553FCD733F", { + firstName: "John", + lastName: "Doe", + email: "johndoe@example.com" + } + parameters: + - name: id + in: path + description: Customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for updating a Customer + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/DeactivateCustomer' + - $ref: '#/components/schemas/ReactivateCustomer' + - $ref: '#/components/schemas/SuspendCustomer' + - $ref: '#/components/schemas/UpdateUnverifiedAndReceiveOnly' + - $ref: '#/components/schemas/UpdateVerifiedPersonal' + - $ref: '#/components/schemas/UpdateVerifiedBusiness' + - $ref: '#/components/schemas/UpgradeToUnverified' + - $ref: '#/components/schemas/UpgradeToVerifiedPersonal' + - $ref: '#/components/schemas/UpgradeToVerifiedBusiness' + - $ref: '#/components/schemas/UpgradeToVerifiedSoleProp' + - $ref: '#/components/schemas/RetryVerifiedPersonal' + - $ref: '#/components/schemas/RetryVerifiedBusinessNoController' + - $ref: '#/components/schemas/RetryVerifiedBusinessWithController' + - $ref: '#/components/schemas/RetryVerifiedBusinessWithInternationalController' + - $ref: '#/components/schemas/RetryVerifiedSoleProp' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - $ref: '#/components/schemas/ReceiveOnlyCustomer' + - $ref: '#/components/schemas/VerifiedPersonalCustomer' + - $ref: '#/components/schemas/VerifiedSolePropCustomer' + - $ref: '#/components/schemas/VerifiedBusinessCustomer' + '400': + description: bad request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: badRequest + message: + type: string + example: Duplicate customer or validation error. + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to update a customer. + /business-classifications: + get: + tags: + - customers + summary: List business classifications + description: Returns a directory of business and industry classifications required for creating business verified customers. Each business classification contains multiple industry classifications. The industry classification ID must be provided in the businessClassification parameter during business customer creation for verification. + operationId: listBusinessClassifications + x-speakeasy-group: businessClassifications + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/business-classifications + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .get("business-classifications") + .then((res) => res.body._embedded["business-classifications"][0].name); // => 'Accommodation and Food Services' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + classifications = app_token.get('business-classifications') + classifications.body['_embedded']['business-classifications'][0]['name'] # => 'Accommodation and Food Services' + - lang: php + source: | + _list(); + $classifications->_embedded->{'business-classifications'}[0]->name; # => "Accommodation and Food Services" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + classifications = app_token.get "business-classifications" + classifications._embedded.['business-classifications'][0].name # => "Accommodation and Food Services" + parameters: + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BusinessClassifications' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /business-classifications/{id}: + get: + tags: + - customers + summary: Retrieve a business classification + description: Returns a specific business classification with its embedded industry classifications. Use this endpoint to browse available industry options within a business category and obtain the industry classification ID required for the businessClassification parameter when creating business verified customers. + operationId: retrieveBusinessClassification + x-speakeasy-group: businessClassifications + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla + .get("business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203") + .then((res) => res.body.name); // => 'Accommodation and Food Services' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + classification = app_token.get('business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203') + classification.body['name'] # => 'Accommodation and Food Services' + - lang: php + source: | + getBusinessClassification("9ed3f670-7d6f-11e3-b1ce-5404a6144203"); + $classification->name; # => "Accommodation and Food Services" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + classification = app_token.get "business-classifications/9ed3f670-7d6f-11e3-b1ce-5404a6144203" + classification.name # => "Accommodation and Food Services" + parameters: + - name: id + in: path + description: business classification unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BusinessClassification' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: not_found + message: + type: string + example: not found. + /customers/{id}/beneficial-owners: + get: + tags: + - beneficial owners + summary: List customer beneficial owners + description: Returns all beneficial owners associated with a business verified customer. Beneficial owners are individuals who directly or indirectly own 25% or more of the company's equity. Includes personal information, verification status, and address details for each owner. + operationId: listBeneficialOwnersForCustomer + x-speakeasy-group: customers.beneficialOwners + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/81696e5d-a593-45a6-8863-3c20ad634de5/beneficial-owners + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2"; + + token + .get(`${customerUrl}/beneficial-owners`) + .then((res) => res.body._embedded["beneficial-owners"][0].id); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + beneficial_owners = app_token.get('%s/beneficial-owners' % customer_url) + beneficial_owners.body['id'] + - lang: php + source: | + getBeneficialOwners($customerUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + beneficial_owners = app_token.get "#{customer_url}/beneficial-owners" + beneficial_owners._embedded['beneficial-owners'][0].id + parameters: + - name: id + in: path + description: Customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BeneficialOwners' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: not_found + message: + type: string + example: not found. + post: + tags: + - beneficial owners + summary: Create customer beneficial owner + description: Creates a new beneficial owner for a business verified customer. Beneficial owners are individuals who own 25% or more of the company's equity. Requires personal information, address, and SSN or passport for identity verification. + operationId: createBeneficialOwnerForCustomer + x-speakeasy-group: customers.beneficialOwners + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/customers/81696e5d-a593-45a6-8863-3c20ad634de5/beneficial-owners + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "firstName": "document", + "lastName": "owner", + "ssn": "123-46-7890", + "dateOfBirth": "1960-11-30", + "address": { + "address1": "123 Main St.", + "city": "New York", + "stateProvinceRegion": "NY", + "country": "US", + "postalCode": "10005" + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = 'https://api-sandbox.dwolla.com/customers/07d59716-ef22-4fe6-98e8-f3190233dfb8'; + var requestBody = { + firstName: 'John', + lastName: 'Doe', + dateOfBirth: '1970-01-01', + ssn: '123-56-7890', + address: { + address1: '99-99 33rd St', + city: 'Some City', + stateProvinceRegion: 'NY', + country: 'US', + postalCode: '11101' + } + }; + + dwolla + .post(`${customerUrl}/beneficial-owners`, requestBody) + .then(res => res.headers.get('location')); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + 'firstName': 'John', + 'lastName': 'Doe', + 'dateOfBirth': '1970-01-01', + 'ssn': '123-46-7890', + 'address': { + 'address1': '99-99 33rd St', + 'city': 'Some City', + 'stateProvinceRegion': 'NY', + 'country': 'US', + 'postalCode': '11101' + } + } + + beneficial_owner = app_token.post('%s/beneficial-owners' % customer_url, request_body) + beneficial_owner.headers['location'] + - lang: php + source: | + addBeneficialOwner([ + 'firstName' => 'document', + 'lastName'=> 'owner', + 'dateOfBirth' => '1990-11-11', + 'ssn' => '123-34-9876', + 'address' => + [ + 'address1' => '18749 18th st', + 'address2' => 'apt 12', + 'address3' => '', + 'city' => 'Des Moines', + 'stateProvinceRegion' => 'IA', + 'postalCode' => '50265', + 'country' => 'US' + ], + ], $verified_customer); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/81696e5d-a593-45a6-8863-3c20ad634de5' + request_body = { + :firstName => 'John', + :lastName => 'Doe', + :ssn => '123-46-7890', + :dateOfBirth => '1970-01-01', + :address => { + :address1 => '99-99 33rd St', + :city => 'Some City', + :stateProvinceRegion => 'NY', + :country => 'US', + :postalCode => '11101' + } + } + + beneficial_owner = app_token.post "#{customer_url}/beneficial-owners", request_body + beneficial_owner.response_headers[:location] + parameters: + - name: id + in: path + description: Customer ID for which to create a Beneficial Owner + required: true + style: simple + explode: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for creating a beneficial owner + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateUSBeneficialOwner' + - $ref: '#/components/schemas/CreateInternationalBeneficialOwner' + responses: + '201': + description: successful operation + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /beneficial-owners/{id}: + get: + tags: + - beneficial owners + summary: Retrieve beneficial owner + description: Returns detailed information for a specific beneficial owner, including personal information, address, and verification status. The verification status indicates the owner's identity verification progress and affects the business customer's transaction capabilities. + operationId: retrieveBeneficialOwner + x-speakeasy-group: beneficialOwners + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/beneficial-owners/976a4c14-b183-40e9-b2df-ddbb3e794d3f + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8"; + + dwolla.get(beneficialOwnerUrl).then((res) => res.body.firstName); // => 'Jane' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfB8' + + beneficial_owner = app_token.get(beneficial_owner_url) + beneficial_owner.body['firstName'] + - lang: php + source: | + getById($beneficialOwnerUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfB8' + + beneficial_owner = app_token.get beneficial_owner_url + beneficial_owner.firstName # => "Jane" + parameters: + - name: id + in: path + description: Beneficial owner unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BeneficialOwner' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: not_found + message: + type: string + example: not found. + post: + tags: + - beneficial owners + summary: Update beneficial owner + description: Updates a beneficial owner's information to retry verification when their status is "incomplete". Only beneficial owners with incomplete verification status can be updated. Used to correct information that caused initial verification to fail. + operationId: updateBeneficialOwner + x-speakeasy-group: beneficialOwners + x-speakeasy-name-override: update + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8 + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "firstName": "beneficial", + "lastName": "owner", + "ssn": "123-54-6789", + "dateOfBirth": "1963-11-11", + "address": { + "address1": "123 Main St.", + "address2": "Apt 123", + "city": "Des Moines", + "stateProvinceRegion": "IA", + "country": "US", + "postalCode": "50309" + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var beneficialOwnerUrl = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8'; + var requestBody = { + firstName: 'beneficial', + lastName: 'owner', + dateOfBirth: '1963-11-11', + ssn: '123-54-6789', + address: { + address1: '123 Main St', + city: 'Des Moines', + stateProvinceRegion: 'IA', + country: 'US', + postalCode: '50309' + } + }; + + dwolla + .post(beneficialOwnerUrl, requestBody) + .then(res => res.body.id); // => '00cb67f2-768c-4ee3-ac81-73bc4faf9c2b' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8' + request_body = { + 'firstName': 'beneficial', + 'lastName': 'owner', + 'dateOfBirth': '1963-11-11', + 'ssn': '123-54-6789', + 'address': { + 'address1': '123 Main St', + 'city': 'Des Moines', + 'stateProvinceRegion': 'IA', + 'country': 'US', + 'postalCode': '50309' + } + } + + update_beneficial_owner = app_token.post(beneficial_owner_url, request_body) + update_beneficial_owner.body['id'] # => '00cb67f2-768c-4ee3-ac81-73bc4faf9c2b' + - lang: php + source: | + update([ + 'firstName' => 'beneficial', + 'lastName'=> 'owner', + 'dateOfBirth' => '1963-11-11', + 'ssn' => '123-54-6789', + 'address' => + [ + 'address1' => '123 Main St.', + 'address2' => 'Apt 123', + 'city' => 'Des Moines', + 'stateProvinceRegion' => 'IA', + 'postalCode' => '50309', + 'country' => 'US' + ], + ], $beneficialOwnerUrl); + + $updateBeneficialOwner->id; # => "00cb67f2-768c-4ee3-ac81-73bc4faf9c2b" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/07d59716-ef22-4fe6-98e8-f3190233dfb8' + request_body = { + :firstName => 'beneficial', + :lastName => 'owner', + :ssn => '123-54-6789', + :dateOfBirth => '1963-11-11', + :address => { + :address1 => '123 Main St', + :city => 'Des Moines', + :stateProvinceRegion => 'IA', + :country => 'US', + :postalCode => '50309' + } + } + + update_beneficial_owner = app_token.post beneficial_owner_url, request_body + update_beneficial_owner.id # => "00cb67f2-768c-4ee3-ac81-73bc4faf9c2b" + parameters: + - name: id + in: path + description: Beneficial owner unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for updating a beneficial owner + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateUSBeneficialOwner' + - $ref: '#/components/schemas/CreateInternationalBeneficialOwner' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BeneficialOwner' + '400': + description: ValidationError + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ValidationErrorSchema' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to update beneficial owner. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: owner not found. + delete: + tags: + - beneficial owners + summary: Remove beneficial owner + description: Permanently removes a beneficial owner from a business customer. This action is irreversible and the beneficial owner cannot be retrieved after removal. Removing a beneficial owner will change the customer's certification status to "recertify". + operationId: deleteBeneficialOwner + x-speakeasy-group: beneficialOwners + x-speakeasy-name-override: delete + x-codeSamples: + - lang: bash + source: | + DELETE https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c"; + + dwolla.delete(beneficialOwnerUrl); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c' + + app_token.delete(beneficial_owner_url) + - lang: php + source: | + deleteById($beneficialOwner); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/692486f8-29f6-4516-a6a5-c69fd2ce854c' + + app_token.delete beneficial_owner_url + parameters: + - name: id + in: path + description: Beneficial owner unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: not_found + message: + type: string + example: Beneficial owner not found. + /customers/{id}/beneficial-ownership: + get: + tags: + - beneficial owners + summary: Retrieve beneficial ownership status + description: Returns the certification status of beneficial ownership for a business verified customer. Status indicates whether beneficial owner information has been certified and affects the customer's ability to send funds. Possible values include uncertified, certified, and recertify. + operationId: getBeneficialOwnershipStatusForCustomer + x-speakeasy-group: customers.beneficialOwnership + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc/beneficial-ownership + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = "https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc"; + + dwolla + .get(`${customerUrl}/beneficial-ownership`) + .then((res) => res.body.status); // => "uncertified" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + + beneficial_ownership = app_token.get('%s/beneficial-ownership' % customer_url) + beneficial_ownership.body['status'] # => 'uncertified' + - lang: php + source: | + getOwnershipStatus($newCustomer); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + + beneficial_ownership = app_token.get "#{customer_url}/beneficial-ownership" + beneficial_ownership.status # => "uncertified" + parameters: + - name: id + in: path + description: Customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BeneficialOwnership' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to get certification status. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: not_found + message: + type: string + example: Ownership certification status not found. + post: + tags: + - beneficial owners + summary: Certify beneficial ownership + description: Updates the beneficial ownership certification status to "certified", confirming that all beneficial owner information is accurate and complete. This action enables the business customer to send funds and is required to complete the verification process. + operationId: certifyBeneficialOwnershipForCustomer + x-speakeasy-group: customers.beneficialOwnership + x-speakeasy-name-override: certify + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/customers/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc/beneficial-ownership + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "status": "certified" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = "https://api-sandbox.dwolla.com/customers/e52006c3-7560-4ff1-99d5-b0f3a6f4f909"; + var requestBody = { + status: "certified", + }; + + dwolla.post(`${customerUrl}/beneficial-ownership`, requestBody); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' + request_body = { + "status": "certified" + } + + app_token.post('%s/beneficial-ownership' % customer_url, request_body) + - lang: php + source: | + changeOwnershipStatus(['status' => 'certified' ], $customerId); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' + request_body = { + :status => "certified" + } + + app_token.post "#{customer_url}/beneficial-ownership", request_body + parameters: + - name: id + in: path + description: Customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for certifying beneficial ownership for a Customer + content: + application/json: + schema: + required: + - status + type: object + properties: + status: + type: string + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BeneficialOwnership' + '400': + description: ValidationError + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ValidationErrorSchema' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Forbidden from updating beneficial ownership status for this customer. + /customers/{id}/documents: + get: + tags: + - documents + summary: List documents for customer + description: Returns all identity verification documents submitted for a customer. Includes document status, verification results, document type (passport, driver's license, etc.), and failure reasons if verification was rejected. Used to track document submission and verification progress during the business verification process. + operationId: listCustomerDocuments + x-speakeasy-group: customers.documents + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLfwKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents" + } + }, + "_embedded": { + "documents": [ + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + } + }, + "id": "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc", + "status": "pending", + "type": "passport", + "created": "2015-09-29T21:42:16.000Z", + "documentVerificationStatus": "pending" + }, + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/documents/20988444-c7e1-40cf-ab1a-a20da878e568", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "document" + } + }, + "id": "20988444-c7e1-40cf-ab1a-a20da878e568", + "status": "reviewed", + "type": "license", + "created": "2019-05-30T22:01:40.000Z", + "documentVerificationStatus": "rejected", + "failureReason": "ScanDobMismatch", + "allFailureReasons": [ + { + "reason": "ScanDobMismatch", + "description": "Scan DOB does not match DOB on account" + }, + { + "reason": "ScanIdExpired", + "description": "ID is expired or missing expiration date" + } + ] + } + ] + }, + "total": 2 + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2"; + + dwolla + .get(`${customerUrl}/documents`) + .then((res) => res.body._embedded["documents"][0].id); // => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + documents = app_token.get('%s/documents' % customer_url) + documents.body['total'] # => 2 + - lang: php + source: | + getCustomerDocuments($customerUrl); + $customer->total; # => 2 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + documents = app_token.get "#{customer_url}/documents" + documents._embedded['documents'][0].id # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + parameters: + - name: id + in: path + description: customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Documents' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - documents + summary: Create a document for customer + description: Uploads an identity verification document for a customer using multipart form-data. Required when a customer has "document" status during the verification process. + operationId: createCustomerDocument + x-speakeasy-group: customers.documents + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + curl -X POST + \ -H "Authorization: Bearer tJlyMNW6e3QVbzHjeJ9JvAPsRglFjwnba4NdfCzsYJm7XbckcR" + \ -H "Accept: application/vnd.dwolla.v1.hal+json" + \ -H "Cache-Control: no-cache" + \ -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" + \ -F "documentType=passport" + \ -F "file=@foo.png" + \ 'https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce/documents' + + ... + + HTTP/1.1 201 Created + Location: https://api-sandbox.dwolla.com/documents/11fe0bab-39bd-42ee-bb39-275afcc050d0 + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + // Using form-data - https://github.com/form-data/form-data (Not Maintained By Dwolla) + var customerUrl = "https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce"; + + var requestBody = new FormData(); + requestBody.append("file", fs.createReadStream("mclovin.jpg"), { + filename: "mclovin.jpg", + contentType: "image/jpeg", + knownLength: fs.statSync("mclovin.jpg").size, + }); + requestBody.append("documentType", "license"); + + dwolla + .post(`${customerUrl}/documents`, requestBody) + .then((res) => res.headers.get("location")); // => "https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce' + + document = app_token.post('%s/documents' % customer_url, file = open('mclovin.jpg', 'rb'), documentType = 'license') + document.headers['location'] # => 'https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16' + - lang: php + source: | + /** + * No example for this language yet. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/1de32eC7-ff0b-4c0c-9f09-19629e6788ce' + + file = Faraday::UploadIO.new('mclovin.jpg', 'image/jpeg') + document = app_token.post "#{customer_url}/documents", file: file, documentType: 'license' + document.response_headers[:location] # => "https://api.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" + parameters: + - name: id + in: path + description: customer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + description: Upload a document for a customer. + required: true + content: + multipart/form-data: + schema: + type: object + required: + - documentType + - file + properties: + documentType: + type: string + enum: + - passport + - license + - idCard + - other + example: license + file: + type: string + format: binary + responses: + '201': + description: successful operation + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/MaximumNumberOfResourcesSchema' + - $ref: '#/components/schemas/InvalidFileTypeSchema' + - $ref: '#/components/schemas/DuplicateResourceSchema' + '403': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InvalidResourceStateSchema' + - $ref: '#/components/schemas/NotAuthorizedSchema' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Customer not found. Check CustomerId. + '413': + description: request entity too large + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: fileTooLarge + message: + type: string + example: Document requests are limited to 10 MiB. + /beneficial-owners/{id}/documents: + get: + tags: + - documents + summary: List documents for beneficial owner + description: Returns all identity verification documents submitted for a beneficial owner. Includes document status, verification results, document type (passport, driver's license, etc.), and failure reasons if verification was rejected. Used to track document submission and verification progress during the business verification process. + operationId: listBeneficialOwnerDocuments + x-speakeasy-group: beneficialOwners.documents + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLfwKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2/documents" + } + }, + "_embedded": { + "documents": [ + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + } + }, + "id": "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc", + "status": "pending", + "type": "passport", + "created": "2015-09-29T21:42:16.000Z", + "documentVerificationStatus": "pending" + }, + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/documents/20988444-c7e1-40cf-ab1a-a20da878e568", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "document" + } + }, + "id": "20988444-c7e1-40cf-ab1a-a20da878e568", + "status": "reviewed", + "type": "license", + "created": "2019-05-30T22:01:40.000Z", + "documentVerificationStatus": "rejected", + "failureReason": "ScanDobMismatch", + "allFailureReasons": [ + { + "reason": "ScanDobMismatch", + "description": "Scan DOB does not match DOB on account" + }, + { + "reason": "ScanIdExpired", + "description": "ID is expired or missing expiration date" + } + ] + } + ] + }, + "total": 2 + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var beneficialOwnerUrl = + "https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2"; + + dwolla + .get(`${beneficialOwnerUrl}/documents`) + .then((res) => res.body._embedded["documents"][0].id); // => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + documents = app_token.get('%s/documents' % beneficial_owner_url) + documents.body['total'] # => 2 + - lang: php + source: | + getBeneficialOwnerDocuments($beneficialOwnerUrl); + $listDocsBeneficialOwner->total; # => 2 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + documents = app_token.get "#{beneficial_owner_url}/documents" + documents._embedded['documents'][0].id # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + parameters: + - name: id + in: path + description: beneficial owner unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Documents' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - documents + summary: Create a document for beneficial owner + description: Uploads an identity verification document for a beneficial owner using multipart form-data. Required when a beneficial owner has "document" status during the business verification process. + operationId: createBeneficialOwnerDocument + x-speakeasy-group: beneficialOwners.documents + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + curl -X POST + \ -H "Authorization: Bearer tJlyMNW6e3QVbzHjeJ9JvAPsRglFjwnba4NdfCzsYJm7XbckcR" + \ -H "Accept: application/vnd.dwolla.v1.hal+json" + \ -H "Cache-Control: no-cache" + \ -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" + \ -F "documentType=passport" + \ -F "file=@foo.png" + \ 'https://api-sandbox.dwolla.com/beneficial-owners/1de32ec7-ff0b-4c0c-9f09-19629e6788ce/documents' + + ... + + HTTP/1.1 201 Created + Location: https://api-sandbox.dwolla.com/documents/11fe0bab-39bd-42ee-bb39-275afcc050d0 + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + // Using form-data - https://github.com/form-data/form-data (Not Maintained By Dwolla) + var beneficialOwnerUrl = "https://api-sandbox.dwolla.com/beneficial-owners/1DE32EC7-FF0B-4C0C-9F09-19629E6788CE"; + + var requestBody = new FormData(); + body.append("file", fs.createReadStream("mclovin.jpg"), { + filename: "mclovin.jpg", + contentType: "image/jpeg", + knownLength: fs.statSync("mclovin.jpg").size, + }); + body.append("documentType", "license"); + + dwolla + .post(`${beneficialOwnerUrl}/documents`, requestBody) + .then((res) => res.headers.get("location")); // => "https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/1DE32EC7-FF0B-4C0C-9F09-19629E6788CE' + + document = app_token.post('%s/documents' % customer_url, file = open('mclovin.jpg', 'rb'), documentType = 'license') + document.headers['location'] # => 'https://api-sandbox.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16' + - lang: php + source: | + /** + * No example for this language yet. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + beneficial_owner_url = 'https://api-sandbox.dwolla.com/beneficial-owners/1DE32EC7-FF0B-4C0C-9F09-19629E6788CE' + + file = Faraday::UploadIO.new('mclovin.jpg', 'image/jpeg') + document = app_token.post "#{beneficial_owner_url}/documents", file: file, documentType: 'license' + document.response_headers[:location] # => "https://api.dwolla.com/documents/fb919e0b-ffbe-4268-b1e2-947b44328a16" + parameters: + - name: id + in: path + description: beneficial owner unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + description: Upload a document for a beneficial owner. + required: true + content: + multipart/form-data: + schema: + type: object + required: + - documentType + - file + properties: + documentType: + type: string + enum: + - passport + - license + - idCard + - other + example: license + file: + type: string + format: binary + responses: + '201': + description: document created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/MaximumNumberOfResourcesSchema' + - $ref: '#/components/schemas/InvalidFileTypeSchema' + - $ref: '#/components/schemas/DuplicateResourceSchema' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + '413': + description: request entity too large + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: fileTooLarge + message: + type: string + example: Document requests are limited to 10 MiB. + /documents/{id}: + get: + tags: + - documents + summary: Retrieve a document + description: Returns detailed information about a specific identity verification document, including its status, type, and verification results. Used to track document submission and verification progress during the business verification process. + operationId: retrieveDocument + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLfwKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + } + }, + "id": "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc", + "status": "pending", + "type": "passport", + "created": "2015-09-29T21:42:16.000Z", + "documentVerificationStatus": "pending" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var documentUrl = + "https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc"; + + dwolla.get(documentUrl).then((res) => res.body.type); // => "passport" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + document_url = 'https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + + document = app_token.get(document_url) + document.body['type'] # => 'passport' + - lang: php + source: | + getDocument($documentUrl); + $document->type; # => "passport" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + document_url = 'https://api-sandbox.dwolla.com/documents/56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + + document = app_token.get document_url + document.type # => "passport" + parameters: + - name: id + in: path + description: Document unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Document' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /customers/{id}/kba: + post: + tags: + - kba + summary: Initiate a KBA session + description: Creates a new KBA (Knowledge-Based Authentication) session for a personal Verified Customer. Returns a KBA identifier that represents the session and is used to retrieve authentication questions for customer verification. + operationId: initiateKbaForCustomer + x-speakeasy-group: customers.kba + x-speakeasy-name-override: initiate + x-codeSamples: + - lang: bash + source: | + POST https://api.dwolla.com/customers/33aa88b1-97df-424a-9043-d5f85809858b/kba + Authorization: Bearer cRahPzURfaIrTKL18tmslWPqKdzkLeYJm0oB1hGJ1vMPArft1v + Content-Type: application/json + Accept: application/vnd.dwolla.v1.hal+json + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/61a74e62-e27d-46f1-9fa6-a8e57226bb3e"; + + dwolla.post(`${customerUrl}/kba`).then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/61a74e62-e27d-46f1-9fa6-a8e57226bb3e' + + kba = app_token.post('%s/kba' % customer_url) + kba.headers['location'] # => "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31" + - lang: php + source: | + initiateKba($customer_url); + $kba; # => "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/ca22d192-48f1-4b72-b29d-681e9e20795d' + + kba = app_token.post "#{customer_url}/kba" + kba.response_headers[:location] # => "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31" + parameters: + - name: id + in: path + description: The ID of the Customer for initiating a KBA session + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '403': + description: 403 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InvalidResourceStateSchema' + - $ref: '#/components/schemas/ForbiddenError' + '404': + description: 404 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /kba/{id}: + get: + tags: + - kba + summary: Retrieve KBA Questions + description: Returns the KBA questions for a specific KBA session. The questions are used to verify the customer's identity during the KBA process. + operationId: getKbaQuestions + x-speakeasy-name-override: getQuestions + x-codeSamples: + - lang: bash + source: | + GET https://api.dwolla.com/kba/33aa88b1-97df-424a-9043-d5f85809858b + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer cRahPzURfaIrTewKL18tmslWPqKdzkLeYJm0oB1hGJ1vMPArft1v + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var kbaUrl = + "https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31"; + + dwolla.get(kbaUrl).then((res) => res.body.id); // => '70b0e9cc-020d-4de2-9a82-a2281afa4c31' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' + + kba_questions = app_token.get(kba_url) + kba_questions.id # => '70b0e9cc-020d-4de2-9a82-a2281afa4c31' + - lang: php + source: | + getKbaQuestions($kbaUrl); + print $kbaQuestions->id; # => "70b0e9cc-020d-4de2-9a82-a2281afa4c31" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' + + kba_questions = app_token.get kba_url + kba_questions.id # => "70b0e9cc-020d-4de2-9a82-a2281afa4c31" + parameters: + - name: id + in: path + description: The ID of the KBA session to retrieve questions for + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + required: + - _links + - id + - questions + properties: + _links: + type: object + required: + - answer + properties: + answer: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/kba/62dac6f3-bf8f-4961-9af8-428de8ecd9a4 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: kba + id: + type: string + example: 62dac6f3-bf8f-4961-9af8-428de8ecd9a4 + questions: + type: array + items: + type: object + required: + - id + - text + - answers + properties: + id: + type: string + example: '2355953375' + text: + type: string + example: In what county do you currently live? + answers: + type: array + items: + type: object + required: + - id + - text + properties: + id: + type: string + example: '2687969295' + text: + type: string + example: Pulaski + '403': + description: 403 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: 404 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: KBA questions not found. Check KBA id. + post: + tags: + - kba + summary: Verify KBA Questions + description: Submits customer answers to KBA questions for identity verification. Requires four question-answer pairs with questionId and answerId values. Returns verification status indicating whether the customer passed or failed the KBA authentication. + operationId: verifyKbaQuestions + x-speakeasy-name-override: verify + x-codeSamples: + - lang: bash + source: | + POST https://api.dwolla.com/kba/33aa88b1-97df-424a-9043-d5f85809858b + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer cRahPzURfaIrTewKL18tmslWPqKdzkLeYJm0oB1hGJ1vMPArft1v + + { + "answers": [ + { "questionId": "2355953375", "answerId": "2687969335" }, + { "questionId": "2355953385", "answerId": "2687969385" }, + { "questionId": "2355953395", "answerId": "2687969435" }, + { "questionId": "2355953405", "answerId": "2687969485" } + ] + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var kbaUrl = "https://api.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31"; + var requestBody = { + answers: [ + { questionId: "2355953375", answerId: "2687969335" }, + { questionId: "2355953385", answerId: "2687969385" }, + { questionId: "2355953395", answerId: "2687969435" }, + { questionId: "2355953405", answerId: "2687969485" }, + ], + }; + + dwolla.post(kbaUrl, requestBody); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' + + request_body = { + 'answers' : [ + { 'questionId': "2355953375", 'answerId': "2687969335" }, + { 'questionId': "2355953385", 'answerId': "2687969385" }, + { 'questionId': "2355953395", 'answerId':"2687969435" }, + { 'questionId': "2355953405", 'answerId': "2687969485" } + ] + } + + kba_answers = app_token.post (kba_url, request_body) + - lang: php + source: | + answerKbaQuestions([ + "answers" => [ + [ + "questionId" => "2355953375", + "answerId" => "2687969335" + ], + [ + "questionId" => "2355953385", + "answerId" => "2687969385" + ], + [ + "questionId" => "2355953395", + "answerId" => "2687969435" + ], + [ + "questionId" => "2355953405", + "answerId" => "2687969485" + ] + ] + ], $kbaUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + kba_url = 'https://api-sandbox.dwolla.com/kba/70b0e9cc-020d-4de2-9a82-a2281afa4c31' + + request_body = { + :answers => [ + { :questionId => "2355953375", :answerId => "2687969335" }, + { :questionId => "2355953385", :answerId => "2687969385" }, + { :questionId => "2355953395", :answerId => "2687969435" }, + { :questionId => "2355953405", :answerId => "2687969485" } + ] + } + + kba_answers = app_token.post kba_url, request_body + parameters: + - name: id + in: path + description: The id of the KBA session to verify questions for. + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for verifying KBA questions + content: + application/json: + schema: + required: + - answers + type: object + properties: + answers: + type: array + items: + type: object + required: + - questionId + - answerId + properties: + questionId: + type: string + example: '2355953375' + answerId: + type: string + example: '2687969335' + responses: + '200': + description: created + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + properties: + customer: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/customers/b5fd802d-d8c7-43ce-94a8-7c14485b7042 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: customer + verificationStatus: + type: string + example: verified + '403': + description: 403 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/ForbiddenError' + - $ref: '#/components/schemas/InvalidKbaSessionError' + - $ref: '#/components/schemas/ExpiredKbaSessionError' + '404': + description: 404 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: KBA session not found. + /customers/{id}/funding-sources: + get: + tags: + - funding sources + summary: List customer funding sources + description: Returns all funding sources for a customer, including bank accounts, debit card funding sources, and Dwolla balance (verified customers only). Shows verification status, limited account details, and creation dates. Card funding sources include masked card information. Supports filtering to exclude removed funding sources using the removed parameter. + operationId: listCustomerFundingSources + x-speakeasy-group: customers.fundingSources + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733/funding-sources + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733"; + + dwolla + .get(`${customerUrl}/funding-sources`) + .then((res) => res.body._embedded["funding-sources"][0].name); // => 'Jane Doe's Checking' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733' + + funding_sources = app_token.get('%s/funding-sources' % customer_url) + funding_sources.body['_embedded']['funding-sources'][0]['name'] # => 'Jane Doe's Checking' + - lang: php + source: | + getCustomerFundingSources($customerUrl); + $fundingSources->_embedded->{'funding-sources'}[0]->name; # => "Jane Doe's Checking" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733' + + funding_sources = app_token.get "#{customer_url}/funding-sources" + funding_sources._embedded['funding-sources'][0].name # => "Jane Doe's Checking" + parameters: + - name: id + in: path + description: Customer's unique identifier + required: true + schema: + type: string + - name: removed + in: query + description: Filter removed funding sources. Boolean value. Defaults to `true` + required: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/FundingSources' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to list funding sources. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Customer not found. + post: + tags: + - funding sources + summary: Create customer funding source + description: Creates a bank account or debit card funding source for a customer. Supports multiple methods including manual entry with routing/account numbers, instant verification using existing open banking connections, debit card addition via Exchange, and virtual account numbers. Bank funding sources require verification before transfers can be initiated. + operationId: createCustomerFundingSource + x-speakeasy-group: customers.fundingSources + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + label: Create Bank Funding Source + source: | + POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + { + "routingNumber": "222222226", + "accountNumber": "123456789", + "bankAccountType": "checking", + "name": "Jane Doe's Checking" + } + - lang: bash + label: Create Debit Card Funding Source + source: | + POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + { + "_links": { + "exchange": { + "href": "https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04" + } + }, + "name": "My Visa Debit Card", + "cardDetails": { + "firstName": "Jane", + "lastName": "Doe", + "billingAddress": { + "address1": "123 Main St", + "address2": "Apt 4B", + "city": "Dallas", + "stateProvinceRegion": "TX", + "country": "US", + "postalCode": "76034" + } + } + } + - lang: javascript + label: Create Bank Funding Source + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; + var requestBody = { + routingNumber: "222222226", + accountNumber: "123456789", + bankAccountType: "checking", + name: "Jane Doe's Checking", + }; + + dwolla + .post(`${customerUrl}/funding-sources`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' + - lang: javascript + label: Create Debit Card Funding Source + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; + var requestBody = { + _links: { + exchange: { + href: "https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04" + } + }, + name: "My Visa Debit Card", + cardDetails: { + firstName: "Jane", + lastName: "Doe", + billingAddress: { + address1: "123 Main St", + address2: "Apt 4B", + city: "Dallas", + stateProvinceRegion: "TX", + country: "US", + postalCode: "76034" + } + } + }; + + dwolla + .post(`${customerUrl}/funding-sources`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012' + - lang: python + label: Create Bank Funding Source + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + 'routingNumber': '222222226', + 'accountNumber': '123456789', + 'bankAccountType': 'checking', + 'name': 'Jane Doe's Checking' + } + + customer = app_token.post('%s/funding-sources' % customer_url, request_body) + customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' + - lang: python + label: Create Debit Card Funding Source + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + '_links': { + 'exchange': { + 'href': 'https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04' + } + }, + 'name': 'My Visa Debit Card', + 'cardDetails': { + 'firstName': 'Jane', + 'lastName': 'Doe', + 'billingAddress': { + 'address1': '123 Main St', + 'address2': 'Apt 4B', + 'city': 'Dallas', + 'stateProvinceRegion': 'TX', + 'country': 'US', + 'postalCode': '76034' + } + } + } + + customer = app_token.post('%s/funding-sources' % customer_url, request_body) + customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012' + - lang: php + label: Create Bank Funding Source + source: | + createCustomerFundingSource([ + "routingNumber" => "222222226", + "accountNumber" => "123456789", + "bankAccountType" => "checking", + "name" => "Jane Doe's Checking" + ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); + $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" + ?> + - lang: php + label: Create Debit Card Funding Source + source: | + createCustomerFundingSource([ + "_links" => [ + "exchange" => [ + "href" => "https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04" + ] + ], + "name" => "My Visa Debit Card", + "cardDetails" => [ + "firstName" => "Jane", + "lastName" => "Doe", + "billingAddress" => [ + "address1" => "123 Main St", + "address2" => "Apt 4B", + "city" => "Dallas", + "stateProvinceRegion" => "TX", + "country" => "US", + "postalCode" => "76034" + ] + ] + ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); + $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012" + ?> + - lang: ruby + label: Create Bank Funding Source + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + routingNumber: '222222226', + accountNumber: '123456789', + bankAccountType: 'checking', + name: 'Jane Doe's Checking' + } + + funding_source = app_token.post "#{customer_url}/funding-sources", request_body + funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" + - lang: ruby + label: Create Debit Card Funding Source + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + _links: { + exchange: { + href: 'https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04' + } + }, + name: 'My Visa Debit Card', + cardDetails: { + firstName: 'Jane', + lastName: 'Doe', + billingAddress: { + address1: '123 Main St', + address2: 'Apt 4B', + city: 'Dallas', + stateProvinceRegion: 'TX', + country: 'US', + postalCode: '76034' + } + } + } + + funding_source = app_token.post "#{customer_url}/funding-sources", request_body + funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012" + - lang: bash + label: Create Virtual Account Number (VAN) + source: | + POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + { + "name": "My First VAN", + "type": "virtual", + "bankAccountType": "checking" + } + - lang: bash + label: Create Funding Source via Exchange + source: | + POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + { + "_links": { + "exchange": { + "href": "https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65" + } + }, + "bankAccountType": "checking", + "name": "My Bank Account" + } + - lang: javascript + label: Create Virtual Account Number (VAN) + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; + var requestBody = { + name: "My First VAN", + type: "virtual", + bankAccountType: "checking", + }; + + dwolla + .post(`${customerUrl}/funding-sources`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd' + - lang: javascript + label: Create Funding Source via Exchange + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; + var requestBody = { + _links: { + exchange: { + href: "https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65" + } + }, + bankAccountType: "checking", + name: "My Bank Account" + }; + + dwolla + .post(`${customerUrl}/funding-sources`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' + - lang: python + label: Create Virtual Account Number (VAN) + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + 'name': 'My First VAN', + 'type': 'virtual', + 'bankAccountType': 'checking' + } + + customer = app_token.post('%s/funding-sources' % customer_url, request_body) + customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd' + - lang: python + label: Create Funding Source via Exchange + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + '_links': { + 'exchange': { + 'href': 'https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65' + } + }, + 'bankAccountType': 'checking', + 'name': 'My Bank Account' + } + + customer = app_token.post('%s/funding-sources' % customer_url, request_body) + customer.headers['location'] # => 'https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31' + - lang: php + label: Create Virtual Account Number (VAN) + source: | + createCustomerFundingSource([ + "name" => "My First VAN", + "type" => "virtual", + "bankAccountType" => "checking" + ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); + $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd" + ?> + - lang: php + label: Create Funding Source via Exchange + source: | + createCustomerFundingSource([ + "_links" => [ + "exchange" => [ + "href" => "https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65" + ] + ], + "bankAccountType" => "checking", + "name" => "My Bank Account" + ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); + $fundingSource; # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" + ?> + - lang: ruby + label: Create Virtual Account Number (VAN) + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + name: 'My First VAN', + type: 'virtual', + bankAccountType: 'checking' + } + + funding_source = app_token.post "#{customer_url}/funding-sources", request_body + funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/fc84d628-f694-47e8-8d57-0d5872a81afd" + - lang: ruby + label: Create Funding Source via Exchange + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + _links: { + exchange: { + href: 'https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65' + } + }, + bankAccountType: 'checking', + name: 'My Bank Account' + } + + funding_source = app_token.post "#{customer_url}/funding-sources", request_body + funding_source.response_headers[:location] # => "https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31" + parameters: + - name: id + in: path + description: Customer's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + description: Parameters for creating a funding source + required: true + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/CreateCustomerFundingSource' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: validation error + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InactiveExchangeError' + - $ref: '#/components/schemas/InvalidExchangeTokenError' + - $ref: '#/components/schemas/DuplicateFundingSourceError' + - $ref: '#/components/schemas/UnsupportedCardCountryError' + - $ref: '#/components/schemas/InvalidTokenError' + - $ref: '#/components/schemas/MaximumCardsExceededError' + - $ref: '#/components/schemas/CardMissingRequiredFieldsError' + '403': + description: forbidden + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to create funding source. + '404': + description: not found + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Customer ID not found. Check Customer ID. + /funding-sources/{id}: + get: + tags: + - funding sources + summary: Retrieve a funding source + description: Returns detailed information for a specific funding source, including its type, status, and verification details. Supports bank accounts (via Open Banking), debit card funding sources, and Dwolla balance (verified customers only). Debit card funding sources include masked card details such as brand, last four digits, expiration date, and cardholder name. + operationId: getFundingSource + x-speakeasy-group: fundingSources + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var fundingSourceUrl = + "https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31"; + + dwolla.get(fundingSourceUrl).then((res) => res.body.name); // => "Test checking account" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31' + + funding_source = app_token.get(funding_source_url) + funding_source.body['name'] # => 'Test checking account' + - lang: php + source: | + id($fundingSourceUrl); + $fundingSource->name; # => "Test checking account" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31' + + funding_source = app_token.get funding_source_url + funding_source.name # => "Test checking account" + parameters: + - name: id + in: path + description: Funding source unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/FundingSource' + examples: + standard_bank_account: + summary: Standard bank account + value: + _links: + self: + href: https://api-sandbox.dwolla.com/funding-sources/49dbaa24-1580-4b1c-8b58-24e26656fa31 + type: application/vnd.dwolla.v1.hal+json + resource-type: funding-source + id: 49dbaa24-1580-4b1c-8b58-24e26656fa31 + status: verified + type: bank + bankAccountType: checking + name: Test checking account + created: '2022-07-23T00:18:21.419Z' + removed: false + channels: + - ach + bankName: SANDBOX TEST BANK + fingerprint: 5012989b55af15400e8102f95d2ec5e7ce3aef45c01613280d80a236dd8d6c + settlement_account: + summary: Card network settlement account + value: + _links: + self: + href: https://api-sandbox.dwolla.com/funding-sources/12345678-1234-1234-1234-123456789012 + type: application/vnd.dwolla.v1.hal+json + resource-type: funding-source + id: 12345678-1234-1234-1234-123456789012 + status: unverified + type: bank + bankAccountType: checking + name: Checkout.com Settlement Account + created: '2024-01-15T10:30:00.000Z' + removed: false + channels: + - ach + - real-time-payments + bankName: ABC Bank + fingerprint: 4cf31392f678cb26c62b75096e1a09d4465a801798b3d5c3729de44a4f54c794 + bankUsageType: card-network + card_funding_source: + summary: Debit card funding source + value: + _links: + self: + href: https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012 + type: application/vnd.dwolla.v1.hal+json + resource-type: funding-source + transfer-to-balance: + href: https://api-sandbox.dwolla.com/transfers + type: application/vnd.dwolla.v1.hal+json + resource-type: transfer + remove: + href: https://api-sandbox.dwolla.com/funding-sources/12345678-abcd-1234-abcd-123456789012 + type: application/vnd.dwolla.v1.hal+json + resource-type: funding-source + customer: + href: https://api-sandbox.dwolla.com/customers/91f059e7-fac6-4677-bee1-49057a6e528f + type: application/vnd.dwolla.v1.hal+json + resource-type: customer + transfer-receive: + href: https://api-sandbox.dwolla.com/transfers + type: application/vnd.dwolla.v1.hal+json + resource-type: transfer + id: 12fb2f3c-39c7-40cf-99e2-b0311ba39261 + status: verified + type: card + name: My Visa Debit Card + created: '2025-12-10T18:02:47.985Z' + removed: false + channels: [] + fingerprint: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2 + cardDetails: + brand: VISA + lastFour: '1519' + expirationMonth: 10 + expirationYear: 2027 + nameOnCard: Jane Doe + bin: '40247644' + billingAddress: + address1: 552 test + city: Des Moines + stateProvinceRegion: IA + country: US + postalCode: '50310' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Funding source not found. + post: + tags: + - funding sources + summary: Update or remove a funding source + description: Updates a bank funding source's details or soft deletes it. When updating, you can change the name (any status) or modify routing/account numbers and account type (unverified status only). When removing, the funding source is soft deleted and can still be accessed but marked as removed. + operationId: updateOrRemoveFundingSource + x-speakeasy-group: fundingSources + x-speakeasy-name-override: updateOrRemove + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "name": "Test Checking - 1234" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var fundingSourceUrl = + "https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c"; + var requestBody = { + name: "Test Checking - 1234", + }; + + dwolla.post(fundingSourceUrl, requestBody).then((res) => res.body.name); // => "Test Checking - 1234" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' + request_body = { + 'name': 'Test Checking - 1234' + } + + funding_source = app_token.post(funding_source_url, request_body) + funding_source.body['name'] # => 'Test Checking - 1234' + - lang: php + source: | + /** + * No example for this language yet. Coming soon. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' + request_body = { + "name" => "Test Checking - 1234", + } + + funding_source = app_token.post "#{funding_source_url}", request_body + funding_source.name # => "Test Checking - 1234" + parameters: + - name: id + in: path + description: Funding source unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to update a customer funding source + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/UpdateUnverifiedBank' + - $ref: '#/components/schemas/UpdateVerifiedBank' + - $ref: '#/components/schemas/RemoveBank' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + '400': + description: validation error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: validationError + message: + type: string + example: Only funding sources of type='bank' can be updated. + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidResourceState + message: + type: string + example: A removed bank cannot be updated. + /funding-sources/{id}/micro-deposits: + get: + tags: + - funding sources + summary: Retrieve micro-deposits details + description: Returns the status and details of micro-deposits for a funding source to check verification eligibility. Includes deposit status (pending, processed, failed), creation timestamp, and failure details with ACH return codes if deposits failed. Use this endpoint to determine when micro-deposits are ready for verification. + operationId: getMicroDeposits + x-speakeasy-group: fundingSources.microDeposits + x-speakeasy-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c/micro-deposits + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var fundingSourceUrl = + "https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c"; + + dwolla.get(`${fundingSourceUrl}/micro-deposits`).then((res) => res.body.status); // => "failed" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' + + funding_source = app_token.get('%s/micro-deposits' % funding_source_url) + funding_source.body['status'] # => 'failed' + - lang: php + source: | + verifyMicroDepositsExist($fundingSourceUrl); + $fundingSource->status; # => "failed" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/692486f8-29f6-4516-a6a5-c69fd2ce854c' + + funding_source = app_token.get "#{funding_source_url}/micro-deposits" + funding_source.status # => "failed" + parameters: + - name: id + in: path + description: The ID of the FS that previously had micro-deposits initiated + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + created: + type: string + format: date-time + example: '2022-12-30T20:56:53.000Z' + status: + type: string + example: failed + failure: + type: object + properties: + code: + type: string + example: R03 + description: + type: string + example: No Account/Unable to locate account + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - funding sources + summary: Initiate or Verify micro-deposits + description: Handles micro-deposit bank verification process. Make a request without a request body to initiate two small deposits to the customer's bank account. Include deposit amounts to verify the received values and complete verification. + operationId: initiateOrVerifyMicroDeposits + x-speakeasy-group: fundingSources.microDeposits + x-speakeasy-name-override: initiateOrVerify + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909/micro-deposits + Authorization: Bearer 8tJjM7iTjujLthkbVPMUcHLqMNw4uv5kG712g9j1RRBHplGpwo + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + - lang: javascript + source: | + var fundingSourceUrl = + "https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909"; + + dwolla.post(`${fundingSourceUrl}/micro-deposits`); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' + + app_token.post('%s/micro-deposits' % funding_source_url) + - lang: php + source: | + microDeposits(null, $fundingSourceUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e52006c3-7560-4ff1-99d5-b0f3a6f4f909' + + app_token.post "#{funding_source_url}/micro-deposits" + parameters: + - name: id + in: path + description: The ID of the FS to initiate or verify micro-deposit + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: false + description: | + Optional request body for verifying micro-deposits. + - If omitted: Endpoint will initiate micro-deposits + - If provided: Must contain micro-deposit amounts for verification + content: + application/json: + schema: + oneOf: + - type: + - object + - 'null' + title: InitiateMicroDeposits + description: No request body is required for initiating micro-deposits. + - $ref: '#/components/schemas/VerifyMicroDeposits' + description: Required request body for verifying micro-deposits + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + description: Response for microdeposits operations (initiation and verification) + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + format: uri + example: https://api-sandbox.dwolla.com/funding-sources/2e446d1b-fb3c-42a0-9691-5d1d6a4dbbf0/micro-deposits + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: micro-deposits + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidResourceState + message: + type: string + example: Bank already verified. + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: The requested resource was not found. + /funding-sources/{id}/balance: + get: + tags: + - funding sources + summary: Retrieve funding source balance + description: Returns the current balance for a specific funding source. For bank accounts, includes available and closing balances; for Dwolla balance, includes balance and total amounts; for settlement accounts (bankUsageType = card-network), includes available balance only. Supports bank accounts (via Open Banking), Dwolla balance (verified customers only), and settlement accounts for card network processing. + operationId: getFundingSourceBalance + x-speakeasy-group: fundingSources.balance + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418/balance + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var fundingSourceUrl = + "https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418"; + + dwolla.get(`${fundingSourceUrl}/balance`).then((res) => res.body.balance.value); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418' + + funding_source = app_token.get('%s/balance' % funding_source_url) + - lang: php + source: | + getBalance($fundingSourceUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/c2eb3f03-1b0e-4d18-a4a2-e552cc111418' + + funding_source = app_token.get "#{funding_source_url}/balance" + parameters: + - name: id + in: path + description: ID of funding source to retrieve the balance for + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - title: Dwolla Balance Response + description: Response for retrieving balance of a Dwolla Balance funding source + type: object + required: + - _links + - balance + - total + - lastUpdated + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + balance: + type: object + properties: + value: + type: string + example: '4616.87' + currency: + type: string + example: USD + total: + type: object + properties: + value: + type: string + example: '4616.87' + currency: + type: string + example: USD + lastUpdated: + type: string + example: '2017-04-18T15:20:25.880Z' + - title: Bank Balance Response + description: Response for retrieving balance of a bank account verified through Open Banking + type: object + required: + - _links + - available + - closing + - lastUpdated + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/42f48a64-2a9b-40df-9777-603ed2fe2764/balance + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: balance + funding-source: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/42f48a64-2a9b-40df-9777-603ed2fe2764 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: funding-source + available: + type: object + properties: + value: + type: string + example: '542.00' + currency: + type: string + example: USD + closing: + type: object + properties: + value: + type: string + example: '542.00' + currency: + type: string + example: USD + lastUpdated: + type: string + example: '2024-09-09T16:39:14.219Z' + - title: Settlement Account Balance Response + description: Response for retrieving balance of a settlement account with bankUsageType = card-network + type: object + required: + - _links + - available + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/12345678-1234-1234-1234-123456789012/balance + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: balance + funding-source: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/12345678-1234-1234-1234-123456789012 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: funding-source + available: + type: object + properties: + value: + type: string + example: '3209.55' + currency: + type: string + example: USD + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Funding source not found. + /funding-sources/{id}/ach-routing: + get: + tags: + - funding sources + summary: Retrieve VAN account and routing numbers + description: Returns the unique account and routing numbers for a Virtual Account Number (VAN) funding source. These numbers can be used by external systems to initiate ACH transactions that pull funds from or push funds to the associated Dwolla balance. + operationId: getVanRouting + x-speakeasy-group: fundingSources + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var fundingSourceUrl = + "https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing"; + + dwolla.get(fundingSourceUrl).then((res) => res.body.name); // => "Test checking account" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing' + + funding_source = app_token.get(funding_source_url) + funding_source.body['name'] # => 'Test checking account' + - lang: php + source: | + id($fundingSourceUrl); + $fundingSource->name; # => "Test checking account" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + funding_source_url = 'https://api-sandbox.dwolla.com/funding-sources/e6d68efb-c49b-43db-8867-e1ca58c6ee8c/ach-routing' + + funding_source = app_token.get funding_source_url + funding_source.name # => "Test checking account" + parameters: + - name: id + in: path + description: ID of VAN funding source to retrieve ACH details + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + accountNumber: + type: string + example: '9619991490430833' + routingNumber: + type: string + example: '084106768' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Funding source not found. + /on-demand-authorizations: + post: + tags: + - funding sources + summary: Create an on-demand transfer authorization + description: Create an on-demand transfer authorization that allows Customers to pre-authorize variable amount ACH transfers from their bank account for future payments. This authorization is used when creating Customer funding sources to enable flexible payment processing. Returns UI text elements including authorization body text and button text for display in your application's bank account addition flow. + operationId: createOnDemandTransferAuthorization + x-speakeasy-group: fundingSources.onDemandTransferAuthorizations + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/on-demand-authorizations + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388" + } + }, + "bodyText": "I agree that future payments to Company ABC inc. will be processed by the Dwolla payment system from the selected account above. In order to cancel this authorization, I will change my payment settings within my Company ABC inc. account.", + "buttonText": "Agree & Continue" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla.post("on-demand-authorizations").then((res) => res.body.buttonText); // => "Agree & Continue" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + on_demand_authorization = app_token.post('on-demand-authorizations') + on_demand_authorization.body['buttonText'] # => 'Agree & Continue' + - lang: php + source: | + createAuthorization(); + $onDemandAuth->_links["self"]->href; # => "https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + on_demand_authorization = app_token.post "on-demand-authorizations" + on_demand_authorization.buttonText # => "Agree & Continue" + parameters: + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: Ok + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/OnDemandAuthorization' + '403': + description: 403 Error + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + /transfers: + post: + tags: + - transfers + summary: Initiate a transfer + description: Initiate a transfer between funding sources from a Dwolla Account or API Customer resource. Supports ACH, Instant Payments (RTP/FedNow), Push-to-Debit Card, and wire transfers with optional expedited clearing, facilitator fees, metadata, and correlation IDs for enhanced traceability. Includes idempotency key support to prevent duplicate transfers and extensive customization options for addenda records, optional ACH Company Entry Description (CED) on bank statements, and processing channels. Returns the location of the created transfer resource for tracking and management. + operationId: initiateTransfer + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/transfers + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "source": { + "href": "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" + }, + "destination": { + "href": "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" + } + }, + "amount": { + "currency": "USD", + "value": "1.00" + }, + "clearing": { + "source": "standard", + "destination": "next-available" + }, + "achDetails": { + "source": { + "addenda": { + "values": ["ABC123_AddendaValue"] + } + }, + "destination": { + "addenda": { + "values": ["ZYX987_AddendaValue"] + } + } + }, + "instantDetails": { + "destination": { + "remittanceData": "ABC_123 Remittance Data" + } + }, + "fees": [ + { + "_links": { + "charge-to": { + "href": "https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8" + } + }, + "amount": { + "value": "4.00", + "currency": "USD" + } + } + ], + "metadata": { + "key": "value" + }, + "correlationId": "6d127333-69e9-4c2b-8cae-df850228e130", + "processingChannel": { + "destination": "instant" + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var requestBody = { + _links: { + source: { + href: "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4", + }, + destination: { + href: "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db", + }, + }, + amount: { + currency: "USD", + value: "1.00", + }, + clearing: { + source: "standard", + destination: "next-available", + }, + achDetails: { + source: { + addenda: { + values: ["ABC123_AddendaValue"], + }, + }, + destination: { + addenda: { + values: ["ZYX987_AddendaValue"], + }, + }, + }, + instantDetails: { + destination: { + remittanceData: "ABC_123 Remittance Data", + }, + }, + fees: [ + { + _links: { + "charge-to": { + href: "https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8", + }, + }, + amount: { + value: "4.00", + currency: "USD", + }, + }, + ], + metadata: { + key: "value", + }, + correlationId: "6d127333-69e9-4c2b-8cae-df850228e130", + processingChannel: { + destination: "instant", + }, + }; + + dwolla + .post("transfers", requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + request_body = { + '_links': { + 'source': { + 'href': 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4' + }, + 'destination': { + 'href': 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db' + } + }, + 'amount': { + 'currency': 'USD', + 'value': '1.00' + }, + 'clearing': { + 'source': 'standard', + 'destination': 'next-available' + }, + 'achDetails': { + 'source': { + 'addenda': { + 'values': ['ABC123_AddendaValue'] + } + }, + 'destination': { + 'addenda': { + 'values': ['ZYX987_AddendaValue'] + } + } + }, + 'instantDetails': { + 'destination': { + 'remittanceData': 'ABC_123 Remittance Data' + } + }, + 'fees': [ + { + '_links': { + 'charge-to': { + 'href': 'https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8' + } + }, + 'amount': { + 'value': '4.00', + 'currency': 'USD' + } + } + ], + 'metadata': { + 'key': 'value' + }, + 'correlationId': '6d127333-69e9-4c2b-8cae-df850228e130', + 'processingChannel': { + 'destination': 'instant' + } + } + + transfer = app_token.post('transfers', request_body) + transfer.headers['location'] # => 'https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e' + - lang: php + source: | + create([ + '_links' => [ + 'source' => [ + 'href' => 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4', + ], + 'destination' => [ + 'href' => 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db', + ] + ], + 'amount' => [ + 'currency' => 'USD', + 'value' => '1.00' + ], + 'clearing' => [ + 'source' => 'standard', + 'destination' => 'next-available' + ], + 'achDetails' => [ + 'source' => [ + 'addenda' => [ + 'values' => ['ABC123_AddendaValue'] + ] + ], + 'destination' => [ + 'addenda' => [ + 'values' => ['ZYX987_AddendaValue'] + ] + ] + ], + 'instantDetails' => [ + 'destination' => [ + 'remittanceData' => 'ABC_123 Remittance Data' + ] + ], + 'fees' => [ + [ + '_links' => [ + 'charge-to' => [ + 'href' => 'https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8', + ] + ], + 'amount' => [ + 'value' => '4.00', + 'currency' => 'USD' + ] + ] + ], + 'metadata' => [ + 'key' => 'value' + ], + 'correlationId' => '6d127333-69e9-4c2b-8cae-df850228e130', + 'processingChannel' => [ + 'destination' => 'instant' + ] + ]); + $transfer; # => "https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + request_body = { + :_links => { + :source => { + :href => "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" + }, + :destination => { + :href => "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" + } + }, + :amount => { + :currency => "USD", + :value => "1.00" + }, + :clearing => { + :source => "standard", + :destination => "next-available" + }, + :achDetails => { + :source => { + :addenda => { + :values => ["ABC123_AddendaValue"] + } + }, + :destination => { + :addenda => { + :values => ["ZYX987_AddendaValue"] + } + } + }, + :instantDetails => { + :destination => { + :remittanceData => "ABC_123 Remittance Data" + } + }, + :fees => [ + { + :_links => { + :"charge-to" => { + :href => "https://api-sandbox.dwolla.com/customers/d795f696-2cac-4662-8f16-95f1db9bddd8" + } + }, + :amount => { + :value => "4.00", + :currency => "USD" + } + } + ], + :metadata => { + :key => "value" + }, + :correlationId => "6d127333-69e9-4c2b-8cae-df850228e130", + :processingChannel => { + :destination => "instant" + } + } + + transfer = app_token.post "transfers", request_body + transfer.response_headers[:location] # => "https://api-sandbox.dwolla.com/transfers/0e6b8c1e-7b6e-4b2e-8e2e-1b2e2e2e2e2e" + parameters: + - $ref: '#/components/parameters/Accept' + - name: Idempotency-Key + schema: + type: string + in: header + example: 19051a62-3403-11e6-ac61-9e71128cae77 + requestBody: + required: true + description: Parameters to initiate a transfer + content: + application/json: + schema: + required: + - _links + - amount + type: object + properties: + _links: + type: object + properties: + source: + type: object + properties: + href: + type: string + destination: + type: object + properties: + href: + type: string + amount: + $ref: '#/components/schemas/TransferAmount' + metadata: + type: object + fees: + type: array + items: + type: object + properties: + _links: + type: object + properties: + charge-to: + type: object + properties: + href: + type: string + amount: + $ref: '#/components/schemas/TransferAmount' + clearing: + type: object + properties: + source: + type: string + destination: + type: string + achDetails: + type: object + properties: + source: + type: object + properties: + addenda: + type: object + properties: + values: + type: array + items: + type: string + destination: + type: object + properties: + addenda: + type: object + properties: + values: + type: array + items: + type: string + rtpDetails: + type: object + description: Real-Time Payments (RTP) specific transaction details. + properties: + destination: + type: object + description: RTP details for the destination + properties: + remittanceData: + type: string + description: 'Remittance information for Real-Time Payments, providing context about the payment purpose. Acceptable characters: alphanumeric (0-9, a-z, A-Z), space, and special characters (#,.''&/-@!$%*()_+={}|:;`[]^~\")' + maxLength: 140 + pattern: '^[0-9a-zA-Z #,.''&/\-@!$%*()_+={}|:;`\[\]\^\~\\"]+$' + example: ABC_123 Remittance Data + instantDetails: + type: object + description: Instant Payments specific transaction details for both RTP and FedNow networks. + properties: + destination: + type: object + description: Instant payment details for the destination + properties: + remittanceData: + type: string + description: 'Remittance information for Instant Payments (RTP/FedNow), providing context about the payment purpose. Acceptable characters: alphanumeric (0-9, a-z, A-Z), space, and special characters (#,.''&/-@!$%*()_+={}|:;`[]^~\")' + maxLength: 140 + pattern: '^[0-9a-zA-Z #,.''&/\-@!$%*()_+={}|:;`\[\]\^\~\\"]+$' + example: ABC_123 Remittance Data + correlationId: + type: string + processingChannel: + type: object + properties: + destination: + type: string + enum: + - real-time-payments + - instant + example: instant + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/SourceNotFoundError' + - $ref: '#/components/schemas/ReceiverNotFoundError' + - $ref: '#/components/schemas/InvalidSourceFundingSourceError' + - $ref: '#/components/schemas/SenderRestrictedError' + - $ref: '#/components/schemas/ReceiverRestrictedError' + - $ref: '#/components/schemas/InvalidMetadataError' + - $ref: '#/components/schemas/OperationBlockedError' + - $ref: '#/components/schemas/InvalidAmountLimitError' + - $ref: '#/components/schemas/CannotParseAmountError' + - $ref: '#/components/schemas/InsufficientFundsError' + - $ref: '#/components/schemas/FacilitatorFeeAccountNotFoundError' + - $ref: '#/components/schemas/FacilitatorFeeSumTooLargeError' + - $ref: '#/components/schemas/FacilitatorFeeBelowMinimumError' + - $ref: '#/components/schemas/HighRiskError' + - $ref: '#/components/schemas/IncompatibleHoldingsError' + - $ref: '#/components/schemas/DirectAccountWithoutBankError' + - $ref: '#/components/schemas/SourceSameAsDestinationError' + - $ref: '#/components/schemas/InvalidFacilitatorError' + - $ref: '#/components/schemas/InvalidFacilitatorFeeCollectFromError' + - $ref: '#/components/schemas/InvalidFacilitatorFeeCollectFromCombinationError' + - $ref: '#/components/schemas/InvalidDestinationFundingSourceError' + - $ref: '#/components/schemas/InvalidOrRemovedCardDestinationError' + - $ref: '#/components/schemas/InvalidFacilitatorFeeAmountError' + - $ref: '#/components/schemas/WeeklyReceiveLimitReachedError' + - $ref: '#/components/schemas/InvalidDestinationClearingTypeError' + - $ref: '#/components/schemas/InvalidAmountForDestinationClearingTypeError' + - $ref: '#/components/schemas/InvalidCorrelationIdError' + - $ref: '#/components/schemas/SourceAddendaMaxLengthError' + - $ref: '#/components/schemas/DestinationAddendaMaxLengthError' + - $ref: '#/components/schemas/AchAddendaEntriesNotEnabledForAccountError' + - $ref: '#/components/schemas/PointOfSaleAddendaEntriesNotEnabledForAccountError' + - $ref: '#/components/schemas/IncompatibleAddendaEntriesError' + - $ref: '#/components/schemas/InvalidPointOfSaleAddendaIdentificationCodeError' + - $ref: '#/components/schemas/InvalidPointOfSaleAddendaSerialNumberError' + - $ref: '#/components/schemas/InvalidPointOfSaleAddendaDateError' + - $ref: '#/components/schemas/InvalidPointOfSaleAddendaAddressError' + - $ref: '#/components/schemas/InvalidPointOfSaleAddendaCityError' + - $ref: '#/components/schemas/InvalidPointOfSaleAddendaStateError' + - $ref: '#/components/schemas/TransferExpiredForFeeError' + - $ref: '#/components/schemas/InvalidFeeOdfiError' + - $ref: '#/components/schemas/InvalidSourceBankAccountTypeError' + - $ref: '#/components/schemas/InvalidDestinationBankAccountTypeError' + - $ref: '#/components/schemas/IncompatibleSourceAndDestinationTypesError' + - $ref: '#/components/schemas/SourceNotCardNetworkSettlementError' + - $ref: '#/components/schemas/CardSourceNotAllowedError' + - $ref: '#/components/schemas/IncompatibleSourceForRtpDestinationError' + - $ref: '#/components/schemas/InvalidAmountForDestinationProcessingChannelError' + - $ref: '#/components/schemas/RtpFacilitatorFeeNotSupportedError' + - $ref: '#/components/schemas/RtpUnverifiedSenderNotSupportedError' + - $ref: '#/components/schemas/RtpPersonalToPersonalNotSupportedError' + - $ref: '#/components/schemas/DestinationProcessingChannelNotSupportedError' + - $ref: '#/components/schemas/DestinationRemittanceDataMaxLengthError' + - $ref: '#/components/schemas/WithdrawInvalidAmountError' + - $ref: '#/components/schemas/WithdrawInvalidFundingSourceError' + - $ref: '#/components/schemas/WithdrawAccountRestrictedError' + - $ref: '#/components/schemas/WithdrawInvalidAmountForClearingTypeError' + - $ref: '#/components/schemas/WithdrawInvalidWireBeneficiaryLocalityError' + - $ref: '#/components/schemas/WithdrawInvalidWireBeneficiaryRegionError' + - $ref: '#/components/schemas/WithdrawInvalidWireBeneficiaryCountryError' + - $ref: '#/components/schemas/WithdrawInvalidWireOriginatorToBeneficiaryError' + - $ref: '#/components/schemas/WithdrawProcessingChannelNotSupportedError' + - $ref: '#/components/schemas/WithdrawRtpUnverifiedSenderNotSupportedError' + - $ref: '#/components/schemas/WithdrawRtpPersonalWithdrawalNotSupportedError' + - $ref: '#/components/schemas/DepositAccountRestrictedError' + - $ref: '#/components/schemas/WireInvalidImadError' + - $ref: '#/components/schemas/WireAccountRestrictedError' + - $ref: '#/components/schemas/WireNotEnabledError' + - $ref: '#/components/schemas/WireAccountNotFoundError' + - $ref: '#/components/schemas/PrefundingSourceNotAllowedError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InvalidAttemptToFacilitateFundsError' + - $ref: '#/components/schemas/InvalidAttemptToPayInFundsError' + - $ref: '#/components/schemas/InvalidAttemptToPayOutFundsError' + - $ref: '#/components/schemas/RtpAccountSettingNotEnabledError' + '429': + description: Too Many Requests + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/TooManyRequestsErrorError' + /transfers/{id}: + get: + tags: + - transfers + summary: Retrieve a transfer + description: Retrieve detailed information for a specific transfer by its unique identifier belonging to an Account or Customer. Returns transfer status, amount, creation date, clearing details, and links to source and destination funding sources for complete transaction tracking. Includes cancellation links when applicable and references to related funding transfers. Essential for monitoring transfer lifecycle and transaction reconciliation. + operationId: getTransfer + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var transferUrl = + "https://api-sandbox.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8"; + + dwolla.get(transferUrl).then((res) => res.body.status); // => 'pending' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + transfer_url = 'https://api-sandbox.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8' + + transfer = account_token.get(transfer_url) + transfer.body['status'] # => 'pending' + - lang: php + source: | + byId($transferUrl); + $transfer->status; # => "pending" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + transfer_url = 'https://api.dwolla.com/transfers/15c6bcce-46f7-e811-8112-e8dd3bececa8' + + transfer = app_token.get transfer_url + transfer.status # => "pending" + parameters: + - name: id + in: path + description: ID of transfer to be retrieved + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Transfer' + '404': + description: 404 Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - transfers + summary: Cancel a transfer + description: Cancel a pending transfer by setting its status to cancelled. Only transfers in pending status can be cancelled before processing begins. Returns the updated transfer resource with cancelled status. Use this endpoint to stop a bank transfer from further processing. + operationId: cancelTransfer + x-speakeasy-name-override: cancel + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388 + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "status": "cancelled" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var transferUrl = + "https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388"; + var requestBody = { + status: "cancelled", + }; + + dwolla.post(transfer_url, requestBody).then((res) => res.body.status); // => "cancelled" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + transfer_url = 'https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388' + request_body = { + 'status': 'cancelled' + } + + transfer = app_token.post(transfer_url, request_body) + transfer.body['status'] # => 'cancelled' + - lang: php + source: | + update([ + 'status' => 'cancelled', + ], $transferUrl); + + $transfer->status; # => "cancelled" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + transfer_url = 'https://api-sandbox.dwolla.com/transfers/3d48c13a-0fc6-e511-80de-0aa34a9b2388' + request_body = { + "status" => "cancelled", + } + + transfer = app_token.post "#{transfer_url}", request_body + transfer.status # => "cancelled" + parameters: + - name: id + in: path + description: ID of transfer + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to cancel a transfer + content: + application/json: + schema: + required: + - status + type: object + properties: + status: + type: string + const: cancelled + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + '400': + description: 400 Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/BadRequestError' + - $ref: '#/components/schemas/StatusInvalidError' + - $ref: '#/components/schemas/StatusNotAllowedError' + '404': + description: 404 Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /customers/{id}/transfers: + get: + tags: + - transfers + summary: List and search transfers for a customer + description: Retrieve and search transfers for a specific Customer with comprehensive filtering and pagination support. Supports searching by customer details (name, email, business name), amount ranges, date ranges, transfer status, and correlation IDs for enhanced transaction discovery. Returns paginated transfer results including status, amounts, metadata, and links to source and destination funding sources. Use this endpoint for transaction history analysis and reconciliation purposes. + operationId: listCustomerTransfers + x-speakeasy-group: customers.transfers + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295/transfers + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "http://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295"; + + dwolla + .get(`${customerUrl}/transfers`) + .then((res) => res.body._embedded["transfers"][0].status); // => "pending" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'http://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295' + + transfers = app_token.get('%s/transfers' % customer_url) + transfers.body['_embedded']['transfers'][0]['status'] # => 'pending' + - lang: php + source: | + getCustomerTransfers($customerUrl); + $transfers->_embedded->{'transfers'}[0]->status; # => "pending" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'http://api-sandbox.dwolla.com/customers/33e56307-6754-41cb-81e2-23a7f1072295' + + transfers = app_token.get "#{customer_url}/transfers" + transfers._embedded['transfers'][0].status # => "pending" + parameters: + - name: id + in: path + description: Customer's unique identifier + required: true + schema: + type: string + - name: search + in: query + description: A string to search on fields `firstName`, `lastName`, `email`, `businessName` + required: false + schema: + type: string + - name: startAmount + in: query + description: Only include transactions with an amount equal to or greater than `startAmount` + required: false + schema: + type: string + - name: endAmount + in: query + description: Only include transactions with an amount equal to or less than `endAmount` + required: false + schema: + type: string + - name: startDate + in: query + description: Only include transactions created after this date. ISO-8601 format `YYYY-MM-DD` + required: false + schema: + type: string + - name: endDate + in: query + description: Only include transactions created before this date. ISO-8601 format `YYYY-MM-DD` + required: false + schema: + type: string + - name: status + in: query + description: Filter on transaction status. Possible values are `pending`, `processed`, `failed`, or `cancelled` + required: false + schema: + type: string + - name: correlationId + in: query + description: A string value to search on if `correlationId` was specified for a transaction + required: false + schema: + type: string + - name: limit + in: query + description: Number of search results to return. Defaults to 25 + required: false + schema: + type: string + - name: offset + in: query + description: Number of search results to skip. Use for pagination + required: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Transfers' + '404': + description: 404 Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /transfers/{id}/fees: + get: + tags: + - transfers + summary: List fees for a transfer + description: Retrieve detailed fee information for a specific transfer by its unique identifier. Returns the total number of fees and individual fee transaction details including amounts, status, and links to source and destination accounts. + operationId: listTransferFees + x-speakeasy-group: transfers.fees + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388/fees + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var transferUrl = + "https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388"; + + dwolla.get(`${transferUrl}/fees`).then((res) => res.body.total); // => 2 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' + + fees = app_token.get('%s/fees' % transfer_url) + fees.body['total'] # => 2 + - lang: php + source: | + getFeesBySource($transferUrl); + $transferFees->total; # => "2" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' + + fees = app_token.get "#{transfer_url}/fees" + fees.total # => 2 + parameters: + - name: id + in: path + description: ID of transfer to retrieve fees for + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + transactions: + type: array + items: + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 416a2857-c887-4cca-bd02-8c3f75c4bb0e + status: + type: string + example: pending + amount: + type: object + properties: + value: + type: string + example: '2.00' + currency: + type: string + example: USD + created: + type: string + format: date-time + example: '2016-02-22T20:46:38.777Z' + total: + type: integer + format: int32 + example: 1 + '404': + description: 404 Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /transfers/{id}/failure: + get: + tags: + - transfers + summary: Retrieve a transfer failure reason + description: Retrieve detailed failure information for a failed bank or VAN transfer including the ACH return code, description, and explanation. Returns failure details with links to the failed funding source and associated Customer for comprehensive error analysis. Available only for transfers with failure status and accessed through the failure link from transfer retrieval. Critical for troubleshooting payment failures and understanding ACH return reasons. + operationId: getTransferFailureReason + x-speakeasy-group: transfers.failure + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/transfers/8997ebed-69be-e611-80ea-0aa34a9b2388/failure + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var transferUrl = + "https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388"; + + dwolla.get(`${transferUrl}/failure`).then((res) => res.body.code); // => 'R01' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' + + failure = app_token.get('%s/failure' % transfer_url) + failure.body['code'] # => 'R01' + - lang: php + source: | + failureById($transferUrl); + $transferFailure->code; # => "R01" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + transfer_url = 'https://api-sandbox.dwolla.com/transfers/83eb4b5e-a5d9-e511-80de-0aa34a9b2388' + + failure = app_token.get "#{transfer_url}/failure" + failure.code # => "R01" + parameters: + - name: id + in: path + description: Transfer unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + required: + - code + - description + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + code: + type: string + example: R03 + description: + type: string + example: No Account/Unable to Locate Account + explanation: + type: string + example: The account number does not correspond to the individual identified in the entry or a valid account. + '403': + description: 403 Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: 404 Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /mass-payments: + post: + tags: + - mass payments + summary: Initiate a mass payment + description: Create a mass payment containing up to 5,000 individual payment items from a Dwolla Main Account or Verified Customer funding source. Supports optional metadata, correlation IDs for traceability, deferred processing, and expedited transfer options including same-day ACH clearing. Returns the location of the created mass payment resource with a unique identifier for tracking and management. + operationId: initiateMassPayment + x-speakeasy-group: massPayments + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/mass-payments + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + Idempotency-Key: 19051a62-3403-11e6-ac61-9e71128cae77 + + { + "_links": { + "source": { + "href": "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" + } + }, + "achDetails": { + "source": { + "addenda": { + "values": ["ABC123_AddendaValue"] + } + } + }, + "clearing": { + "source": "next-available" + }, + "items": [ + { + "_links": { + "destination": { + "href": "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" + } + }, + "amount": { + "currency": "USD", + "value": "1.00" + }, + "clearing": { + "destination": "next-available" + }, + "metadata": { + "payment1": "payment1" + }, + "achDetails": { + "destination": { + "addenda": { + "values": ["ZYX987_AddendaValue"] + } + } + }, + "correlationId": "ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841", + "processingChannel": { + "destination": "instant" + } + }, + { + "_links": { + "destination": { + "href": "https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd" + } + }, + "amount": { + "currency": "USD", + "value": "5.00" + }, + "clearing": { + "destination": "next-available" + }, + "metadata": { + "payment2": "payment2" + }, + "achDetails": { + "destination": { + "addenda": { + "values": ["ZYX987_AddendaValue"] + } + } + } + } + ], + "metadata": { + "batch1": "batch1" + }, + "correlationId": "6d127333-69e9-4c2b-8cae-df850228e130" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var requestBody = { + _links: { + source: { + href: "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4", + }, + }, + achDetails: { + source: { + addenda: { + values: ["ABC123_AddendaValue"], + }, + }, + }, + clearing: { + source: "standard", + }, + items: [ + { + _links: { + destination: { + href: "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db", + }, + }, + amount: { + currency: "USD", + value: "1.00", + }, + clearing: { + destination: "next-available", + }, + metadata: { + payment1: "payment1", + }, + correlationId: "ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841", + achDetails: { + destination: { + addenda: { + values: ["ABC123_AddendaValue"], + }, + }, + }, + processingChannel: { + destination: "instant", + }, + }, + { + _links: { + destination: { + href: "https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd", + }, + }, + amount: { + currency: "USD", + value: "5.00", + }, + clearing: { + destination: "next-available", + }, + metadata: { + payment2: "payment2", + }, + achDetails: { + destination: { + addenda: { + values: ["ABC123_AddendaValue"], + }, + }, + }, + }, + ], + metadata: { + batch1: "batch1", + }, + correlationId: "6d127333-69e9-4c2b-8cae-df850228e130", + }; + + dwolla + .post("mass-payments", requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + request_body = { + '_links': { + 'source': { + 'href': 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4' + } + }, + 'achDetails': { + 'addenda': { + 'values': ['ABC123_AddendaValue'] + } + }, + 'clearing': { + 'source': 'standard' + }, + 'items': [ + { + '_links': { + 'destination': { + 'href': 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db' + } + }, + 'amount': { + 'currency': 'USD', + 'value': '1.00' + }, + 'clearing': { + 'destination': 'next-available' + }, + 'metadata': { + 'payment1': 'payment1' + }, + 'correlationId': 'ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841', + 'achDetails': { + 'addenda': { + 'values': ['ABC123_AddendaValue'] + } + }, + 'processingChannel': { + 'destination': 'instant' + } + }, + { + '_links': { + 'destination': { + 'href': 'https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd' + } + }, + 'amount': { + 'currency': 'USD', + 'value': '5.00' + }, + 'clearing': { + 'destination': 'next-available' + }, + 'metadata': { + 'payment2': 'payment2' + }, + 'achDetails': { + 'addenda': { + 'values': ['ABC123_AddendaValue'] + } + } + } + ], + 'metadata': { + 'batch1': 'batch1' + }, + 'correlationId': '6d127333-69e9-4c2b-8cae-df850228e130' + } + + mass_payment = app_token.post('mass-payments', request_body) + mass_payment.headers['location'] # => 'https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4' + - lang: php + source: | + create([ + '_links' => + [ + 'source' => + [ + 'href' => 'https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4', + ], + ], + 'achDetails' => + [ + 'source' => [ + 'addenda' => [ + 'values' => ['ABC123_AddendaValue'] + ] + ] + ], + 'clearing' => + [ + 'source' => 'standard' + ], + 'items' => + [ + [ + '_links' => + [ + 'destination' => + [ + 'href' => 'https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db', + ], + ], + 'amount' => + [ + 'currency' => 'USD', + 'value' => '1.00', + ], + 'clearing' => + [ + 'destination' => 'next-available' + ], + 'metadata' => + [ + 'payment1' => 'payment1', + ], + 'correlationId' => 'ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841', + 'achDetails' => + [ + 'source' => [ + 'addenda' => [ + 'values' => ['ABC123_AddendaValue'] + ] + ] + ], + 'processingChannel' => [ + 'destination' => 'instant' + ] + ], + [ + '_links' => + [ + 'destination' => + [ + 'href' => 'https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd', + ], + ], + 'amount' => + [ + 'currency' => 'USD', + 'value' => '5.00', + ], + 'clearing' => + [ + 'destination' => 'next-available' + ], + 'metadata' => + [ + 'payment2' => 'payment2', + ], + 'achDetails' => + [ + 'source' => [ + 'addenda' => [ + 'values' => ['ABC123_AddendaValue'] + ] + ] + ] + ], + ], + 'metadata' => + [ + 'batch1' => 'batch1', + ], + 'correlationId' => '6d127333-69e9-4c2b-8cae-df850228e130', + ]); + $massPayment; # => "https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + request_body = { + :_links => { + :source => { + :href => "https://api-sandbox.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4" + } + }, + :achDetails => { + :source => { + :addenda => { + :values => ["ABC123_AddendaValue"] + } + } + }, + :clearing => { + :source => "standard" + }, + :items => [ + { + :_links => { + :destination => { + :href => "https://api-sandbox.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db" + } + }, + :amount => { + :currency => "USD", + :value => "1.00" + }, + :clearing => { + :destination => "next-available" + }, + :metadata => { + :payment1 => "payment1" + }, + :correlationId => "ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841", + :achDetails => { + :destination => { + :addenda => { + :values => ["ABC123_AddendaValue"] + } + } + }, + :processingChannel => { + :destination => "instant" + } + }, + { + :_links => { + :destination => { + :href => "https://api-sandbox.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd" + } + }, + :amount => { + :currency => "USD", + :value => "5.00" + }, + :clearing => { + :destination => "next-available" + }, + :metadata => { + :payment2 => "payment2" + }, + :achDetails => { + :destination => { + :addenda => { + :values => ["ABC123_AddendaValue"] + } + } + } + } + ], + :metadata => { + :batch1 => "batch1" + }, + :correlationId => "6d127333-69e9-4c2b-8cae-df850228e130" + } + + mass_payment = app_token.post "mass-payments", request_body + mass_payment.response_headers[:location] # => "https://api-sandbox.dwolla.com/mass-payments/cf1e9e00-09cf-43da-b8b5-a43b3f6192d4" + parameters: + - $ref: '#/components/parameters/Accept' + - name: Idempotency-Key + schema: + type: string + in: header + example: 19051a62-3403-11e6-ac61-9e71128cae77 + requestBody: + required: true + description: Parameters for initiating a mass payment + content: + application/json: + schema: + required: + - _links + - items + type: object + properties: + _links: + type: object + properties: + source: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/707177c3-bf15-4e7e-b37c-55c3898d9bf4 + items: + type: array + items: + type: object + properties: + _links: + type: object + properties: + destination: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/9c7f8d57-cd45-4e7a-bf7a-914dbd6131db + amount: + $ref: '#/components/schemas/TransferAmount' + processingChannel: + type: object + properties: + destination: + type: string + example: real-time-payments + metadata: + type: object + clearing: + type: object + properties: + destination: + type: string + example: next-available + achDetails: + type: object + properties: + destination: + type: object + properties: + addenda: + type: object + properties: + values: + type: array + items: + type: string + example: XYZ987_AddendaValue + correlationId: + type: string + example: ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841 + status: + type: string + example: deferred + achDetails: + type: object + properties: + source: + type: object + properties: + addenda: + type: object + properties: + values: + type: array + items: + type: string + example: ZYX987_AddendaValue + clearing: + type: object + properties: + source: + type: string + example: next-available + metadata: + type: object + correlationId: + type: string + example: ad6ca82d-59f7-45f0-a8d2-94c2cd4e8841 + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to create mass payment + /mass-payments/{id}: + get: + tags: + - mass payments + summary: Retrieve a mass payment + description: Retrieve detailed information for a mass payment by its unique identifier. Returns the current processing status (pending, processing, or complete), creation date, metadata, and links to the source funding source and payment items. Use this endpoint to monitor mass payment processing progress and determine when to check individual item results. + operationId: getMassPayment + x-speakeasy-group: massPayments + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var massPaymentUrl = + "https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563"; + + dwolla.get(massPaymentUrl).then((res) => res.body.status); // => 'processing' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563' + + mass_payment = app_token.get(mass_payment_url) + mass_payment.body['status'] # => 'processing' + - lang: php + source: | + byId($massPaymentUrl); + $massPayment->status; # => "processing" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + mass_payment_url = "https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563" + + mass_payment = app_token.get mass_payment_url + mass_payment.status # => "processing" + parameters: + - name: id + in: path + description: Mass payment unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/MassPayment' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to retrieve mass payment + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Mass payment not found + post: + tags: + - mass payments + summary: Update a mass payment + description: Update the status of a deferred mass payment to control its processing lifecycle. Set status to `pending` to trigger processing and begin fund transfers, or `cancelled` to permanently cancel the mass payment before processing begins. Only applies to mass payments created with deferred status. Returns the updated mass payment resource with the new status. + operationId: updateMassPayment + x-speakeasy-group: massPayments + x-speakeasy-name-override: update + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "status": "pending" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var massPaymentUrl = + "https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c"; + var requestBody = { + status: "pending", + }; + + dwolla.post(massPaymentUrl, requestBody).then((res) => res.body.status); // => "pending" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c' + request_body = { + 'status': 'pending' + } + + mass_payments = app_token.post('mass-payments', request_body) + mass_payments.body['status'] # => 'pending' + - lang: php + source: | + /** + * No example for this language yet. Coming soon. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/692486f8-29f6-4516-a6a5-c69fd2ce854c' + request_body = { + "status" => "pending", + } + + mass_payment = app_token.post "#{mass_payment_url}", request_body + mass_payment.status # => "pending" + parameters: + - name: id + in: path + description: ID of mass payment to update + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters for updating a mass payment + content: + application/json: + schema: + required: + - status + type: object + properties: + status: + type: string + example: pending + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/MassPayment' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to update mass payment + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Mass payment not found + /mass-payments/{id}/items: + get: + tags: + - mass payments + summary: List items for a mass payment + description: Retrieve individual payment items within a mass payment with optional status filtering and pagination support. Each item represents a distinct payment with status indicators (failed, pending, success) showing whether a transfer was successfully created. Returns paginated item details including amount, destination, metadata, and error information for failed items. Supports filtering by status and standard pagination. + operationId: listMassPaymentItems + x-speakeasy-group: massPayments.items + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var massPaymentUrl = + "https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563"; + + dwolla.get(`${massPaymentUrl}/items`).then((res) => res.body.total); // => 2 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563' + + mass_payment_items = app_token.get('%s/items' % mass_payment_url) + mass_payment_items.body['total'] # => "2" + - lang: php + source: | + getMassPaymentItems($massPaymentUrl); + $massPaymentItems->total; # => "2" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + mass_payment_url = 'https://api-sandbox.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563' + + mass_payment_items = app_token.get "#{mass_payment_url}/items" + mass_payment_items.total # => 2 + parameters: + - name: id + in: path + description: Mass payment unique identifier + required: true + schema: + type: string + - name: limit + in: query + description: How many results to return + required: false + schema: + type: string + - name: offset + in: query + description: How many results to skip + required: false + schema: + type: string + - name: status + in: query + description: Filter by item status + required: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items + first: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items?limit=25&offset=0 + last: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563/items?limit=25&offset=0 + _embedded: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/MassPaymentItem' + total: + type: integer + format: int32 + example: 3 + '403': + description: Not authorized to list mass payment items + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to list mass payment items. + '404': + description: Mass payment not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Mass payment not found. + /mass-payment-items/{itemId}: + get: + tags: + - mass payments + summary: Retrieve mass payment item + description: Retrieve detailed information for a specific mass payment item by its unique identifier. Returns item status, amount, metadata, and links to the parent mass payment, associated transfer, and destination funding source. Use this endpoint to check the processing status and details of an individual item within a mass payment batch. + operationId: getMassPaymentItem + x-speakeasy-group: massPayments.items + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var massPaymentItemUrl = + "https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388"; + + dwolla.get(massPaymentItemUrl).then((res) => res.body.status); // => 'success' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + mass_payment_item_url = 'https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388' + + mass_payment_item = app_token.get(mass_payment_item_url) + mass_payment_item.body['status'] # => 'success' + - lang: php + source: | + byId($massPaymentItemUrl); + $massPaymentItem->status; # => "success" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + mass_payment_item_url = 'https://api-sandbox.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388' + + mass_payment_item = app_token.get mass_payment_item_url + mass_payment_item.status # => "success" + parameters: + - name: itemId + in: path + description: ID of item to be retrieved in mass payment + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: success operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/MassPaymentItem' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to retrieve mass payment item + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Mass payment item not found + /customers/{id}/mass-payments: + get: + tags: + - mass payments + summary: List mass payments for customer + description: Retrieve all previously created mass payments for a Verified Customer account with optional correlation ID filtering and pagination support. Mass payments are returned ordered by date created with most recent appearing first. Returns paginated results including mass payment status, metadata, source funding information, and item links. Supports standard pagination parameters and correlation ID search for enhanced traceability. + operationId: listCustomerMassPayments + x-speakeasy-group: customers.massPayments + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/39e21228-5958-4c4f-96fe-48a4bf11332d/mass-payments + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/ca32853c-48fa-40be-ae75-77b37504581b"; + + dwolla + .get(`${customerUrl}/mass-payments`, { limit: 10 }) + .then((res) => res.body._embedded["mass-payments"][0].status); // => "complete" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/ca32853c-48fa-40be-ae75-77b37504581b' + + mass_payments = app_token.get('%s/mass-payments' % customer_url) + mass_payments.body['_embedded']['mass-payments'][0]['status'] # => 'complete' + - lang: php + source: | + getByCustomer($customerUrl); + $masspayments->_embedded->{'mass-payments'}[0]->status; # => "complete" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/ca32853c-48fa-40be-ae75-77b37504581b' + + mass_payments = app_token.get "#{customer_url}/mass-payments", limit: 10 + mass_payments._embedded['mass-payments'][0].status # => "complete" + parameters: + - name: id + in: path + description: Customer ID to get mass payments for + required: true + schema: + type: string + - name: correlationId + in: query + description: A string value to search on if `correlationId` was specified for a transaction + required: false + schema: + type: string + - name: limit + in: query + description: Number of search results to return. Defaults to 25 + required: false + schema: + type: integer + - name: offset + in: query + description: Number of search results to skip. Use for pagination + required: false + schema: + type: integer + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/MassPayments' + '403': + description: Not authorized to list mass payments + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotAuthorized + message: + type: string + example: Not authorized to list mass payments. + '404': + description: Customer not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Customer not found. + /labels/{id}: + get: + tags: + - labels + summary: Retrieve a label + description: Retrieve details for a specific Label used to categorize and track funds within your account. Returns Label information including unique identifier, current amount with currency, and creation timestamp. + operationId: getLabel + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var labelUrl = + "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc"; + + dwolla.get(labelUrl).then((res) => res.body.id); // => '7e042ffe-e25e-40d2-b86e-748b98845ecc' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' + + label = app_token.get(label_url) + label.body['id'] # => '7e042ffe-e25e-40d2-b86e-748b98845ecc' + - lang: php + source: | + getLabel($labelUrl); + $label->id; # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' + + label = app_token.get label_url + label.id # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" + parameters: + - name: id + in: path + description: Label unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Label' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + delete: + tags: + - labels + summary: Remove a label + description: Delete a Label to stop tracking funds and remove it from your account. Returns success status if the Label is successfully removed. Use this to streamline your account management and remove unused Labels from your system. + operationId: removeLabel + x-speakeasy-name-override: remove + x-codeSamples: + - lang: bash + source: | + DELETE https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var labelUrl = + "https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc"; + + dwolla.delete(labelUrl); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + label_url = 'https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc' + + app_token.delete(label_url) + - lang: php + source: | + removeLabel('https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc'); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + label_url = 'https://api-sandbox.dwolla.com/labels/30165ded-2f32-4ee9-b340-ac44dda1d7fc' + + app_token.delete label_url + parameters: + - name: id + in: path + description: A label unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Label' + '403': + description: forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidResourceState + message: + type: string + example: Amount must be zero to remove label. + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /customers/{id}/labels: + get: + tags: + - labels + summary: List labels for a customer + description: Returns all labels for a specified Verified Customer, sorted by creation date (most recent first). Supports pagination with limit and offset parameters. Each label includes its current amount and creation timestamp. + operationId: listCustomerLabels + x-speakeasy-group: customers.labels + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/315a9456-3750-44bf-8b41-487b10d1d4bb/labels + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/5b29279d-6359-4c87-a318-e09095532733"; + + dwolla + .get(`${customerUrl}/labels`) + .then((res) => res.body._embedded["labels"][0].id); // => '7e042ffe-e25e-40d2-b86e-748b98845ecc' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/315a9456-3750-44bf-8b41-487b10d1d4bb' + + labels = app_token.get('%s/labels' % customer_url) + labels.body['_embedded']['labels'][0]['id'] # => '7e042ffe-e25e-40d2-b86e-748b98845ecc' + - lang: php + source: | + getLabelsForCustomer($customerUrl); + $labels->_embedded->{'labels'}[0]->id; # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/315a9456-3750-44bf-8b41-487b10d1d4bb' + + labels = app_token.get "#{customer_url}/labels" + labels._embedded['labels'][0].id # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" + parameters: + - name: id + in: path + description: ID of customer + required: true + schema: + type: string + - name: limit + in: query + description: How many results to return + required: false + schema: + type: string + - name: offset + in: query + description: How many results to skip + required: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: success operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Labels' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to list customer labels + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Customer not found + post: + tags: + - labels + summary: Create a label for a customer + description: Creates a new label for a Verified Customer with a specified amount. Labels help organize and track funds within a customer's balance. Returns the location of the created label resource in the response header. + operationId: createCustomerLabel + x-speakeasy-group: customers.labels + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/labels + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "amount": { + "currency": "USD", + "value": "10.00" + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"; + var requestBody = { + amount: { + currency: "USD", + value: "10.00", + }, + }; + + dwolla + .post(`${customerUrl}/labels`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + 'amount': { + 'currency': 'USD', + 'value': '10.00' + } + } + + label = app_token.post('%s/labels' % customer_url, request_body) + label.headers['location'] # => 'https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31' + - lang: php + source: | + createLabel([ + 'amount' => [ + 'currency' => 'USD', + 'value' => '10.00' + ] + ], "https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C"); + $label; # => "https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C' + request_body = { + :amount => { + :currency => "USD", + :value => "10.00" + } + } + + label = app_token.post "#{customer_url}/labels", request_body + label.response_headers[:location] # => "https://api-sandbox.dwolla.com/labels/375c6781-2a17-476c-84f7-db7d2f6ffb31" + parameters: + - name: id + in: path + description: ID of customer to create a label for + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to create a customer label + content: + application/json: + schema: + required: + - amount + type: object + properties: + amount: + type: object + properties: + currency: + type: string + example: USD + value: + type: string + example: '12.34' + responses: + '201': + description: create + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to create customer label + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Customer not found + /labels/{id}/ledger-entries: + get: + tags: + - labels + summary: List label ledger entries + description: Returns all ledger entries for a specific Label, sorted by creation date (newest first). Supports pagination with limit and offset parameters. Each ledger entry includes its amount, currency, and creation timestamp. + operationId: listLabelLedgerEntries + x-speakeasy-group: labels.ledgerEntries + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc/ledger-entries + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var labelUrl = + "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc"; + + dwolla + .get(`${labelUrl}/ledger-entries`) + .then((res) => res.body._embedded["ledger-entries"][0].id); // => '32d68709-62dd-43d6-a6df-562f4baec526' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' + + ledger_entries = app_token.get('%s/ledger-entries' % label_url) + ledger_entries.body['_embedded']['ledger-entries'][0]['id'] # => '32d68709-62dd-43d6-a6df-562f4baec526' + - lang: php + source: | + getLedgerEntriesForLabel($labelUrl); + $ledgerEntries->_embedded->{'ledger-entries'}[0]->id; # => "32d68709-62dd-43d6-a6df-562f4baec526" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + label_url = 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' + + ledger_entries = app_token.get "#{label_url}/ledger-entries" + ledger_entries._embedded['ledger-entries'][0].id # => "32d68709-62dd-43d6-a6df-562f4baec526" + parameters: + - name: id + in: path + description: A label unique identifier + required: true + schema: + type: string + - name: limit + in: query + description: How many results to return + required: false + schema: + type: integer + - name: offset + in: query + description: How many results to skip + required: false + schema: + type: integer + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/LabelLedgerEntries' + '400': + description: Bad request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - labels + summary: Create a label ledger entry + description: Create a new ledger entry to track fund adjustments on a Label by specifying a positive or negative amount value. Returns the location of the created ledger entry in the response header. Label amounts cannot go negative, so validation errors occur if the entry would result in a negative Label balance. + operationId: createLabelLedgerEntry + x-speakeasy-group: labels.ledgerEntries + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f/ledger-entries + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "amount": { + "value": "-5.00", + "currency": "USD" + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var labelUrl = + "https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f"; + var requestBody = { + amount: { + currency: "USD", + value: "-5.00", + }, + }; + + dwolla + .post(`${labelUrl}/ledger-entries`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + label_url = 'https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f' + request_body = { + 'amount': { + 'currency': 'USD', + 'value': '-5.00' + } + } + + ledger_entry = app_token.post('%s/ledger-entries' % label_url, request_body) + ledger_entry.headers['location'] # => 'https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8' + - lang: php + source: | + addLedgerEntry([ + 'amount' => [ + 'currency' => 'USD', + 'value' => '-5.00' + ] + ], "https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f"); + $label; # => "https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + label_url = 'https://api-sandbox.dwolla.com/labels/e217bcac-628a-456d-a375-6cc51230616f' + request_body = { + :amount => { + :currency => "USD", + :value => "-5.00" + } + } + + ledger_entry = app_token.post "#{label_url}/ledger-entries", request_body + ledger_entry.response_headers[:location] # => "https://api-sandbox.dwolla.com/ledger-entries/76e5541d-18f4-e811-8112-e8dd3bececa8" + parameters: + - name: id + in: path + description: The Id of the Label to update. + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to create a label ledger entry + content: + application/json: + schema: + required: + - amount + type: object + properties: + amount: + type: object + required: + - value + - currency + properties: + value: + type: string + description: Amount of funds to increase or decrease for a Label. To decrease funds in a Label a string numeric value will be supplied and prepended with a "-" operator. + example: '-5.00' + currency: + type: string + description: Currency code for the amount + example: USD + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /ledger-entries/{ledgerEntryId}: + get: + tags: + - labels + summary: Retrieve a label ledger entry + description: Returns detailed information for a specific ledger entry on a Label, including its amount, currency, and creation timestamp. + operationId: getLabelLedgerEntry + x-speakeasy-group: labels.ledgerEntries + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var ledgerEntryUrl = + "https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526"; + + dwolla.get(ledgerEntryUrl).then((res) => res.body.id); // => '32d68709-62dd-43d6-a6df-562f4baec526' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + ledger_entry_url = 'https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526' + + ledger_entry = app_token.get(ledger_entry_url) + ledger_entry.body['id'] # => '32d68709-62dd-43d6-a6df-562f4baec526' + - lang: php + source: | + getLedgerEntry($ledgerEntryUrl); + $ledgerEntry->id; # => "7e042ffe-e25e-40d2-b86e-748b98845ecc" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + ledger_entry_url = 'https://api-sandbox.dwolla.com/ledger-entries/32d68709-62dd-43d6-a6df-562f4baec526' + + ledger_entry = app_token.get ledger_entry_url + ledger_entry.id # => "32d68709-62dd-43d6-a6df-562f4baec526" + parameters: + - name: ledgerEntryId + in: path + description: A label ledger entry unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/LabelLedgerEntry' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /label-reallocations: + post: + tags: + - labels + summary: Create a label reallocation + description: Reallocates funds between two labels belonging to the same Verified Customer. Moves the specified amount from the source label to the destination label, creating ledger entries for both. The reallocation only succeeds if the source label has sufficient funds. + operationId: createLabelReallocation + x-speakeasy-group: labels.reallocations + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/label-reallocations + Content-Type: application/vnd.dwolla.v1.hal+json + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links":{ + "from": { + "href": "https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45" + }, + "to": { + "href": "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc" + } + }, + "amount": { + "value": "15.00", + "currency": "USD" + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var requestBody = { + _links: { + from: { + href: "https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45", + }, + to: { + href: "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc", + }, + }, + amount: { + currency: "USD", + value: "1.00", + }, + }; + + dwolla + .post("label-reallocations", requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + request_body = { + '_links': { + 'from': { + 'href': 'https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45' + }, + 'to': { + 'href': 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' + } + }, + 'amount': { + 'currency': 'USD', + 'value': '15.00' + } + } + + labelReallocation = app_token.post('label-reallocations', request_body) + labelReallocation.headers['location'] # => 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' + - lang: php + source: | + reallocateLabel([ + '_links' => [ + 'from' => [ + 'href' => 'https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45', + ], + 'to' => [ + 'href' => 'https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc' + ] + ], + 'amount' => [ + 'currency' => 'USD', + 'value' => '15.00' + ] + ]); + $labelReallocation; # => "https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + request_body = { + :_links => { + :from => { + :href => "https://api-sandbox.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45" + }, + :to => { + :href => "https://api-sandbox.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc" + } + }, + :amount => { + :currency => "USD", + :value => "15.00" + } + } + + labelReallocation = app_token.post "label-reallocations", request_body + labelReallocation.response_headers[:location] # => "https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21" + parameters: + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to create a label reallocation + content: + application/json: + schema: + required: + - _links + - amount + type: object + properties: + _links: + type: object + properties: + from: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/labels/c91c501c-f49b-48be-a93b-12b45e152d45 + to: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/labels/7e042ffe-e25e-40d2-b86e-748b98845ecc + amount: + type: object + properties: + currency: + type: string + example: USD + value: + type: string + example: '15.00' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Not authorized to create label reallocation + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Label not found + /label-reallocations/{reallocationId}: + get: + tags: + - labels + summary: Retrieve a label reallocation + description: Retrieve details for a specific label reallocation that transfers funds between Labels. Returns reallocation information including source and destination Labels, amount transferred, status, and creation timestamp. Use this to track and audit fund movements between different Labels. + operationId: retrieveLabelReallocation + x-speakeasy-group: labels.reallocations + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var labelReallocationUrl = + "https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21"; + + dwolla.get(labelReallocationUrl).then((res) => res.body.created); // => '2019-05-16T13:41:31.036Z' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + label_reallocation_url = 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' + + label_reallocation = app_token.get(label_reallocation_url) + label_reallocation.body['created'] # => '2019-05-16T13:41:31.036Z' + - lang: php + source: | + getLabelReallocation($labelReallocationUrl); + $labelReallocation->created; # => "2019-05-16T13:41:31.036Z" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + label_reallocation_url = 'https://api-sandbox.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21' + + label_reallocation = app_token.get label_reallocation_url + label_reallocation.created # => "2019-05-16T13:41:31.036Z" + parameters: + - name: reallocationId + in: path + description: Label reallocation unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/label-reallocations/fd36b78c-42f3-4e21-8efb-09196fccbd21 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: label-reallocation + to-ledger-entry: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/ledger-entries/d8a4bf7a-3fa0-48b9-873c-765d7375c59f + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: ledger-entry + from-ledger-entry: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/ledger-entries/f6a44994-b4da-48e3-bd10-d3a168e6a77d + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: ledger-entry + created: + type: string + format: date-time + example: '2022-05-16T13:41:31.036Z' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /events: + get: + tags: + - events + summary: List events + description: Returns a paginated list of events representing state changes to resources in your Dwolla application. Events track actions on customers, transfers, funding sources, and other resources, sorted by creation date (newest first). Events are retained for 30 days and are essential for webhook notifications and system activity monitoring. + operationId: listEvents + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/events + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/events" + }, + "first": { + "href": "https://api-sandbox.dwolla.com/events?limit=25&offset=0" + }, + "last": { + "href": "https://api-sandbox.dwolla.com/events?limit=25&offset=150" + }, + "next": { + "href": "https://api-sandbox.dwolla.com/events?limit=25&offset=25" + } + }, + "_embedded": { + "events": [ + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/events/78e57644-56e4-4da2-b743-059479f2e80f" + }, + "resource": { + "href": "https://api-sandbox.dwolla.com/transfers/47CFDDB4-1E74-E511-80DB-0AA34A9B2388" + }, + "account": { + "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" + } + }, + "id": "78e57644-56e4-4da2-b743-059479f2e80f", + "created": "2015-10-16T15:58:18.000Z", + "topic": "bank_transfer_created", + "resourceId": "47CFDDB4-1E74-E511-80DB-0AA34A9B2388" + }, + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/events/f8e70f48-b7ff-47d0-9d3d-62a099363a76" + }, + "resource": { + "href": "https://api-sandbox.dwolla.com/transfers/48CFDDB4-1E74-E511-80DB-0AA34A9B2388" + }, + "account": { + "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" + } + }, + "id": "f8e70f48-b7ff-47d0-9d3d-62a099363a76", + "created": "2015-10-16T15:58:15.000Z", + "topic": "transfer_created", + "resourceId": "48CFDDB4-1E74-E511-80DB-0AA34A9B2388" + }, + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/events/9f0167e0-dce6-4a1a-ad26-30015d6f1cc1" + }, + "resource": { + "href": "https://api-sandbox.dwolla.com/transfers/08A166BC-1B74-E511-80DB-0AA34A9B2388" + }, + "account": { + "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" + } + }, + "id": "9f0167e0-dce6-4a1a-ad26-30015d6f1cc1", + "created": "2015-10-16T15:37:03.000Z", + "topic": "bank_transfer_created", + "resourceId": "08A166BC-1B74-E511-80DB-0AA34A9B2388" + } + ] + }, + "total": 3 + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla.get("events").then((res) => res.body.total); // => 3 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + events = app_token.get('events') + events.body['total'] # => 3 + - lang: php + source: | + events(); + $events->total; # => 3 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + events = app_token.get "events" + events.total # => 3 + parameters: + - name: limit + in: query + description: How many results to return + required: false + schema: + type: integer + - name: offset + in: query + description: How many results to skip + required: false + schema: + type: integer + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Events' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /events/{id}: + get: + tags: + - events + summary: Retrieve event + description: Returns detailed information for a specific event representing a state change that occurred on a resource in your Dwolla application. Includes the event topic, timestamp, resource links, and correlation ID if applicable. + operationId: getEvent + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095" + }, + "resource": { + "href": "https://api-sandbox.dwolla.com/transfers/09A166BC-1B74-E511-80DB-0AA34A9B2388" + }, + "account": { + "href": "https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b" + }, + "customer": { + "href": "https://api-sandbox.dwolla.com/customers/07d59716-ef22-4fe6-98e8-f3190233dfb8" + } + }, + "id": "81f6e13c-557c-4449-9331-da5c65e61095", + "created": "2015-10-16T15:37:02.000Z", + "topic": "customer_transfer_created", + "resourceId": "09A166BC-1B74-E511-80DB-0AA34A9B2388" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var eventUrl = + "https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095"; + + dwolla.get(eventUrl).then((res) => res.body.topic); // => 'customer_transfer_created' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + event_url = 'https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095' + + event = app_token.get(event_url) + event.body['topic'] # => 'customer_transfer_created' + - lang: php + source: | + id($eventUrl); + $event->topic; # => "customer_transfer_created" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + event_url = 'https://api-sandbox.dwolla.com/events/81f6e13c-557c-4449-9331-da5c65e61095' + + event = app_token.get event_url + event.topic # => "customer_transfer_created" + parameters: + - name: id + in: path + description: ID of application event to get + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Event' + '404': + description: not found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /webhook-subscriptions: + get: + tags: + - webhook subscriptions + summary: List webhook subscriptions + description: Retrieve all webhook subscriptions that belong to an application including their configuration details and status. Returns subscription details including webhook endpoints, status, creation dates, and links to associated webhooks with total count. Essential for webhook management and monitoring subscription health. + operationId: listWebhookSubscriptions + x-speakeasy-group: webhookSubscriptions + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/webhook-subscriptions + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + dwolla.get("webhook-subscriptions").then((res) => res.body.total); // => 1 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_subscriptions = app_token.get('webhook-subscriptions') + webhook_subscriptions.body['total'] # => 1 + - lang: php + source: | + _list(); + $retrieved->total; # => 1 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_subscriptions = app_token.get "webhook-subscriptions" + webhook_subscriptions.total # => 1 + parameters: + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions + _embedded: + type: object + properties: + webhook-subscriptions: + type: array + items: + $ref: '#/components/schemas/WebhookSubscription' + total: + type: integer + format: int32 + example: 1 + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - webhook subscriptions + summary: Create a webhook subscription + description: Create a webhook subscription to deliver webhook notifications to a specified URL endpoint for your application. Requires a destination URL where Dwolla will send notifications and a secret key for webhook validation and security. Returns the location of the created subscription resource. Essential for establishing real-time event notifications and automated integrations with Dwolla's payment processing events. + operationId: createWebhookSubscription + x-speakeasy-group: webhookSubscriptions + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/webhook-subscriptions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer 0Sn0W6kzNicvoWhDbQcVSKLRUpGjIdlPSEYyrHqrDDoRnQwE7Q + { + "url": "http://myapplication.com/webhooks", + "secret": "sshhhhhh" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var requestBody = { + url: "http://myawesomeapplication.com/destination", + secret: "your webhook secret", + }; + dwolla + .post("webhook-subscriptions", requestBody) + .then((res) => res.headers.get("location")); // => 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + request_body = { + 'url': 'http://myapplication.com/webhooks', + 'secret': 'sshhhhhh' + } + subscription = app_token.post('webhook-subscriptions', request_body) + subscription.headers['location'] # => 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + - lang: php + source: | + create(array ( + 'url' => 'http://myapplication.com/webhooks', + 'secret' => 'sshhhhhh', + )); + $subscription; # => "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + request_body = { + :url => "http://myawesomeapplication.com/destination", + :secret => "your webhook secret" + } + subscription = app_token.post "webhook-subscriptions", request_body + subscription.response_headers[:location] # => "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216" + parameters: + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to create a webhook subscriptions + content: + application/json: + schema: + required: + - url + - secret + type: object + properties: + url: + type: string + example: http://myapplication.com/webhooks + secret: + type: string + example: sshhhhhh + responses: + '201': + description: create + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: Bad request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InvalidUrlFormatError' + - $ref: '#/components/schemas/SecretTooLongError' + - $ref: '#/components/schemas/MaxSubscriptionsReachedError' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + '429': + description: Too Many Requests + headers: {} + content: + application/vnd.dwolla.v1.hal: + schema: + $ref: '#/components/schemas/TooManyRequestsError' + /webhook-subscriptions/{id}: + get: + tags: + - webhook subscriptions + summary: Retrieve a webhook subscription + description: Retrieve detailed information for a specific webhook subscription by its unique identifier. Returns subscription configuration including URL endpoint, creation date, and links to associated webhooks for comprehensive subscription management. Essential for monitoring webhook subscription status and accessing webhook delivery history. + operationId: getWebhookSubscription + x-speakeasy-group: webhookSubscriptions + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookSubscriptionUrl = + "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216"; + + dwolla.get(webhookSubscriptionUrl).then((res) => res.body.created); // => '2016-04-20T15:49:50.340Z' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + webhook_subscription = app_token.get(webhook_subscription_url) + webhook_subscription.body['created'] # => '2015-10-28T16:20:47+00:00' + - lang: php + source: | + id('https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216'); + + $retrieved->created; # => 2015-10-28T16:20:47+00:00 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + webhook_subscription = app_token.get webhook_subscription_url + webhook_subscription.created # => 2015-10-28T16:20:47+00:00 + parameters: + - name: id + in: path + description: Webhook subscription unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/WebhookSubscription' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - webhook subscriptions + summary: Update a webhook subscription + description: Update a webhook subscription to pause or resume webhook delivery notifications. Allows toggling the paused status to temporarily stop webhook notifications without deleting the subscription. Returns the updated subscription resource with the new paused status. Use this endpoint to manage webhook delivery during maintenance or troubleshooting periods. + operationId: updateWebhookSubscription + x-speakeasy-group: webhookSubscriptions + x-speakeasy-name-override: update + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216 + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer 0Sn0W6kzNicvoWhDbQcVSKLRUpGjIdlPSEYyrHqrDDoRnQwE7Q + { + "paused": true + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookSubscriptionUrl = + "https://api-sandbox.dwolla.com/webhook-subscriptions/692486f8-29f6-4516-a6a5-c69fd2ce854c"; + + var requestBody = { + paused: true, + }; + + dwolla.post(webhookSubscriptionUrl, requestBody).then((res) => res.body.paused); // => 'true' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + request_body = { + 'paused': true + } + + subscription = app_token.post(webhook_subscription_url, request_body) + subscription.body['paused'] # => true + - lang: php + source: | + updateSubscription(array ( + 'paused' => true + ), $webhookSubscriptionUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + request_body = { + :paused => true + } + + subscription = app_token.post "#{webhook_subscription_url}", request_body + parameters: + - name: id + in: path + description: Webhook unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + description: Parameters to update a webhook subscription + content: + application/json: + schema: + required: + - paused + type: object + properties: + paused: + type: boolean + example: true + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/WebhookSubscription' + '400': + description: Bad Request + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + delete: + tags: + - webhook subscriptions + summary: Delete a webhook subscription + description: Delete a webhook subscription to permanently remove webhook notifications for your application. This action stops all future webhook deliveries and cannot be undone. Returns the deleted subscription resource for confirmation. Use this endpoint when webhook notifications are no longer needed or when cleaning up unused subscriptions. + operationId: delete + x-speakeasy-group: webhookSubscriptions + x-codeSamples: + - lang: bash + source: | + DELETE https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookSubscriptionUrl = + "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216"; + + dwolla.delete(webhookSubscriptionUrl); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + app_token.delete(webhook_subscription_url) + - lang: php + source: | + deleteById('https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216'); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + app_token.delete webhook_subscription_url + parameters: + - name: id + in: path + description: Webhook unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/WebhookSubscription' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /webhook-subscriptions/{id}/webhooks: + get: + tags: + - webhook subscriptions + summary: List webhooks for a webhook subscription + description: Retrieve all fired webhooks for a specific webhook subscription with comprehensive filtering and pagination support. Returns webhook delivery history including topics, attempts, request/response details, and delivery status over a rolling 30-day period. Supports filtering by resource ID, date ranges, and pagination parameters for detailed webhook delivery analysis. Critical for debugging webhook delivery issues and monitoring event notification success rates. + operationId: listWebhooks + x-speakeasy-group: webhookSubscriptions.webhooks + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/webhook-subscriptions/10d4133e-b308-4646-b276-40d9d36def1c/webhooks + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookSubscriptionUrl = + "https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216"; + + dwolla.get(`${webhookSubscriptionUrl}/webhooks`).then((res) => res.body.total); // => 5 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + hooks = app_token.get('%s/webhooks' % webhook_subscription_url) + hooks.body['total'] # => 5 + - lang: php + source: | + hooksById('https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216'); + $hooks->total; # => 5 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_subscription_url = 'https://api-sandbox.dwolla.com/webhook-subscriptions/5af4c10a-f6de-4ac8-840d-42cb65454216' + + hooks = app_token.get "#{webhook_subscription_url}/webhooks" + hooks.total # => 5 + parameters: + - name: id + in: path + description: Webhook subscription unique identifier + required: true + schema: + type: string + - name: limit + in: query + description: How many results to return + required: false + schema: + type: string + - name: offset + in: query + description: How many results to skip + required: false + schema: + type: string + - name: startDate + in: query + description: Only include webhooks created after this date. ISO-8601 format `YYYY-MM-DD` + required: false + schema: + type: string + - name: endDate + in: query + description: Only include webhooks created before this date. ISO-8601 format `YYYY-MM-DD` + required: false + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks + first: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks?limit=25&offset=0 + last: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks?limit=25&offset=150 + next: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83/webhooks?limit=25&offset=25 + _embedded: + type: object + properties: + webhooks: + type: array + items: + $ref: '#/components/schemas/Webhook' + total: + type: integer + format: int32 + example: 1 + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /webhooks/{id}: + get: + tags: + - webhooks + summary: Retrieve a webhook + description: Retrieve detailed information for a specific webhook by its unique identifier including delivery attempts and response data. Returns webhook details with topic, account information, delivery attempts containing request/response history, and links to subscription and retry resources. Essential for debugging webhook delivery issues, analyzing response data, and monitoring notification processing status. + operationId: getWebhook + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8 + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookUrl = + "https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8"; + + dwolla.get(webhookUrl).then((res) => res.body.topic); // => 'transfer_created' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' + + webhook = app_token.get(webhook_url) + webhook.body['topic'] # => 'transfer_created' + - lang: php + source: | + id($webhookUrl); + $webhook->topic; # => "transfer_created" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' + + webhook = app_token.get webhook_url + webhook.topic # => "transfer_created" + parameters: + - name: id + in: path + description: Webhook unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Webhook' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /webhooks/{id}/retries: + get: + tags: + - webhooks + summary: List retries for a webhook + description: Retrieve all retry attempts for a specific webhook including timestamps and delivery details. Returns a list of retry attempts with unique identifiers, timestamps, and links to the parent webhook with total count. Essential for tracking webhook delivery failures, analyzing retry patterns, and debugging webhook notification issues to ensure reliable event processing. + operationId: listWebhookRetries + x-speakeasy-group: webhooks.retries + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookUrl = + "https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8"; + + dwolla.get(`${webhookUrl}/retries`).then((res) => res.body.total); // => 1 + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' + + retries = app_token.get('%s/retries' % webhook_url) + retries.body['total'] # => 1 + - lang: php + source: | + retriesById($webhookUrl); + $retries->total; # => 1 + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' + + retries = app_token.get "#{webhook_url}/retries" + retries.total # => 1 + parameters: + - name: id + in: path + description: Webhook unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/WebhookRetries' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - webhooks + summary: Retry a webhook + description: Retry a webhook by its unique identifier to redeliver the notification to your endpoint. Creates a new retry attempt and returns the location of the new webhook resource. Essential for recovering from webhook delivery failures and ensuring reliable event notification processing in your application. + operationId: retryWebhook + x-speakeasy-name-override: retry + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var webhookUrl = + "https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8"; + + dwolla.post(`${webhookUrl}/retries`); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' + + app_token.post('%s/retries' % webhook_url) + - lang: php + source: | + retryWebhook($webhookUrl); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + webhook_url = 'https://api-sandbox.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8' + + app_token.post "#{webhook_url}/retries" + parameters: + - name: id + in: path + description: Webhook unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /sandbox-simulations: + post: + tags: + - sandbox simulations + summary: Sandbox simulations (bank transfers, VAN transfers, or customer verification directives) + description: | + Sandbox-only endpoint with three modes: + + **Simulate bank transfer processing** — Omit the body or send an empty JSON object. Processes or fails + the last 500 bank transfers on the authorized application or Sandbox account (and initiated micro-deposits). + If webhooks are configured, events are delivered. If a bank-to-bank transaction involves two users, + call this twice to process debit and credit sides. Returns **200** with a HAL document including `total`. + + **Simulate VAN (virtual) transfers** — Send a JSON body with `type` set to `virtual` and a `transfers` + array (up to 10 items). External transfers are created and processed immediately. Returns **202 Accepted**. + + **Simulate verification directives** — For a business Verified Customer in **`retry`** or **`document`** + status, send `type`: `customer-verification`, `_links.customer.href` pointing at that customer, and + `errorCode` set to one of: `PersonalIDRequired`, `POBoxNotAllowed`, `AddressNotAssociatedWithBusiness`, + `EINDocumentRequired`. Returns **200** with HAL `_links.self` and `errorCode`. Then **GET** the Customer; + the same code appears in `_embedded.errors` for end-to-end testing. + operationId: simulateBankTransferProcessing + x-speakeasy-name-override: simulate + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/sandbox-simulations + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer {Your access token} + parameters: + - $ref: '#/components/parameters/Accept' + requestBody: + required: false + description: | + Optional. For bank transfer processing, omit the body or send `{}`. For VAN simulation, send `type`: `virtual` and a `transfers` array. For verification + directives, send `type`: `customer-verification`, `_links.customer`, and `errorCode` (see schema). + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/SandboxSimulationRequest' + responses: + '200': + description: | + Success. **Bank transfer processing** returns HAL with `total`. **Customer verification directives** + return HAL `_links.self` and `errorCode` (retrieve the Customer for `_embedded.errors`). + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/SandboxSimulationBankProcessingResponse' + - $ref: '#/components/schemas/SandboxSimulationCustomerVerificationResponse' + examples: + bankTransferProcessing: + summary: Bank transfer processing + value: + _links: + self: + href: https://api-sandbox.dwolla.com/sandbox-simulations + type: application/vnd.dwolla.v1.hal+json + resource-type: sandbox-simulation + total: 8 + customerVerificationDirective: + summary: Customer verification directive simulation + value: + _links: + self: + href: https://api-sandbox.dwolla.com/sandbox-simulations + type: application/vnd.dwolla.v1.hal+json + resource-type: sandbox-simulation + errorCode: AddressNotAssociatedWithBusiness + '202': + description: | + Accepted. Virtual (VAN) transfer simulation: requested transfers were accepted for immediate + processing in Sandbox. + '400': + description: | + Bad Request. + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '401': + description: unauthorized + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidAccessToken + message: + type: string + example: Invalid access token. + '403': + description: forbidden + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to simulate transfer processing. + /exchange-partners: + get: + tags: + - exchanges + summary: List exchange partners + description: Returns a list of all supported exchange partners. Each partner includes a unique ID, name, and status indicating whether they are active or inactive. + operationId: listExchangePartners + x-speakeasy-group: exchangePartners + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api.dwolla.com/exchange-partners + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api.dwolla.com/exchange-partners", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange-partner" + } + }, + "_embedded": { + "exchange-partners": [ + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/exchange-partners/9b55a4b3-34ae-4607-b2d1-622f1eed77f9", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange-partner" + } + }, + "id": "9b55a4b3-34ae-4607-b2d1-622f1eed77f9", + "name": "Finicity", + "status": "active" + }, + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange-partner" + } + }, + "id": "292317ec-e252-47d8-93c3-2d128e037aa4", + "name": "MX", + "status": "active" + } + ] + }, + "total": 2 + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + token.get("exchange-partners").then((res) => res.body._embedded["exchange-partners"][0].id); // => '9b55a4b3-34ae-4607-b2d1-622f1eed77f9' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + exchange_partners = app_token.get('exchange-partners') + exchange_partners.body['_embedded']['exchange-partners'][0]['id'] # => '9b55a4b3-34ae-4607-b2d1-622f1eed77f9' + - lang: php + source: | + getExchangePartners(); + $exchangePartners->_embedded->{"exchange-partners"}[0]->id; # => "9b55a4b3-34ae-4607-b2d1-622f1eed77f9" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + exchange_partners = app_token.get "exchange-partners" + exchange_partners._embedded['exchange-partners'][0].id # => "9b55a4b3-34ae-4607-b2d1-622f1eed77f9" + parameters: + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ExchangePartners' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + /exchange-partners/{id}: + get: + tags: + - exchanges + summary: Retrieve exchange partner + description: Returns details for a specific open banking provider that integrates with Dwolla. Includes partner name, status, and creation date. Use this to verify partner availability before creating exchanges and funding sources. + operationId: getExchangePartner + x-speakeasy-group: exchangePartners + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange-partner" + }, + "funding-source": { + "href": "https://api.dwolla.com/funding-sources", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "funding-source" + } + }, + "id": "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", + "name": "MX", + "status": "active", + "created": "2022-08-30T19:31:59.106Z" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var exchangePartnerUrl = "https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a"; + + dwolla.get(exchangePartnerUrl).then((res) => res.body.id); // => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + exchange_partner_url = 'https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + + exchange_partner = app_token.get(exchange_partner_url) + exchange_partner.body['id'] # => 'e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + - lang: php + source: | + id($exchangePartnerUrl); + $exchangePartner->id; # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + exchange_partner_url = 'https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + + exchange_partner = app_token.get exchange_partner_url + exchange_partner.id # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" + parameters: + - name: id + in: path + description: Exchange Partner resource unique identifier. + required: true + schema: + type: string + example: 292317ec-e252-47d8-93c3-2d128e037aa4 + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ExchangePartner' + '404': + description: Not Found + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /exchanges: + get: + tags: + - exchanges + summary: List exchanges for an account + description: Returns all exchanges for your Dwolla account. Exchanges represent connections between external bank accounts and your account through open banking partners. Includes exchange status, creation date, and associated partner information. + operationId: listAccountExchanges + x-speakeasy-group: accounts.exchanges + x-speakeasy-name-override: list + parameters: + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Exchanges' + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + post: + tags: + - exchanges + summary: Create an exchange for an account + description: | + Create an exchange for an account. The request body will vary based on the exchange partner. + For Finicity, the request body will include finicity-specific fields. + For MX Secure Exchange, the request body will include a token. + For Flinks Secure Exchange, the request body will include a token. + For Plaid Secure Exchange, the request body will include a token. + operationId: createAccountExchange + x-speakeasy-group: accounts.exchanges + x-speakeasy-name-override: create + requestBody: + required: true + description: Parameters for creating an exchange + content: + application/json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateFinicitySecureExchange' + - $ref: '#/components/schemas/CreateTokenBasedExchange' + responses: + '201': + description: Created + headers: + Location: + $ref: '#/components/headers/Location' + example: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + '400': + description: Bad Request + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InvalidExchangeToken' + - $ref: '#/components/schemas/InvalidExchange' + '401': + description: Invalid Scope + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidExchange + message: + type: string + example: The exchange is no longer active. + '403': + description: Forbidden + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /exchanges/{id}: + get: + tags: + - exchanges + summary: Retrieve exchange resource + description: Returns details for a specific exchange connection between Dwolla and an open banking partner for a customer's bank account. Includes exchange status, creation date, and links to the associated customer and exchange partner. + operationId: getExchange + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange" + }, + "exchange-partner": { + "href": "https://api.dwolla.com/exchange-partners/9b55a4b3-34ae-4607-b2d1-622f1eed77f9", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange-partner" + } + }, + "id": "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a", + "status": "active", + "created": "2022-10-21T21:41:03.283Z" + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var exchangeUrl = "https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a"; + + token.get(exchangeUrl).then((res) => res.body.id); // => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + exchange_url = 'https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + + exchange = app_token.get(exchange_url) + exchange.body['id'] # => 'e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + - lang: php + source: | + getExchange($exchangeUrl); + $exchange->id; # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + exchange_url = 'https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + + exchange = app_token.get exchange_url + exchange.id # => "e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a" + parameters: + - name: id + in: path + description: Exchange resource unique identifier. + required: true + schema: + type: string + example: e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Exchange' + '401': + description: Invalid Scope + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidScope + message: + type: string + example: The scopes for retrieving an exchange resource is not enabled for this application. Reach out to Dwolla for more information. + '404': + description: Not Found + headers: {} + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: The requested resource was not found. Check Exchange ID. + /customers/{id}/exchanges: + get: + tags: + - exchanges + summary: List exchanges for a customer + description: Returns all exchanges for a specific customer. Exchanges represent connections between the customer's external bank accounts and open banking partners. Includes exchange status, creation date, and links to associated funding sources and partners. + operationId: listCustomerExchanges + x-speakeasy-group: customers.exchanges + x-speakeasy-name-override: list + x-codeSamples: + - lang: bash + source: | + GET https://api-sandbox.dwolla.com/customers/9fc74373-a5c7-40e4-aa59-d5f4c86a24ea/exchanges + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + ... + + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/exchanges", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange" + } + }, + "_embedded": { + "exchanges": [ + { + "_links": { + "self": { + "href": "https://api-sandbox.dwolla.com/exchanges/92822961-3a7f-42c0-b0cc-7ffef05717fa", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange" + }, + "exchange-partner": { + "href": "https://api-sandbox.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "exchange-partner" + }, + "funding-sources": { + "href": "https://api-sandbox.dwolla.com/funding-sources", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "funding-source" + }, + "customer": { + "href": "https://api-sandbox.dwolla.com/customers/9fc74373-a5c7-40e4-aa59-d5f4c86a24ea", + "type": "application/vnd.dwolla.v1.hal+json", + "resource-type": "customer" + } + }, + "id": "92822961-3a7f-42c0-b0cc-7ffef05717fa", + "status": "active", + "created": "2022-10-19T17:44:44.864Z" + } + ] + }, + "total": 1 + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2"; + + token.get(`${customerUrl}/exchanges`).then((res) => res.body._embedded["exchanges"][0].id); // => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + exchanges = app_token.get('%s/exchanges' % customer_url) + exchanges.body['_embedded']['exchanges'][0]['id'] # => '56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc' + - lang: php + source: | + getCustomerExchanges($customerUrl); + $exchanges->_embedded->{"exchanges"}[0]->id; # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2' + + exchanges = app_token.get "#{customer_url}/exchanges" + exchanges._embedded['exchanges'][0].id # => "56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc" + parameters: + - name: id + in: path + description: The ID of the Customer to list exchanges for + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/Exchanges' + '404': + description: Not Found + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Customer ID not found. Check Customer ID. + post: + tags: + - exchanges + summary: Create an exchange for a customer + description: Creates an exchange connection between a customer and Dwolla. Request body varies by partner (Plaid, MX, Flinks, Finicity, Checkout.com). For bank accounts, use Plaid, MX, Flinks, or Finicity to establish secure access to the customer's bank account data. For debit cards (Push to Card), use Checkout.com and pass the payment ID from Checkout.com Flow. + operationId: createCustomerExchange + x-speakeasy-group: customers.exchanges + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchanges + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "exchange-partner": { + "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + } + }, + "token": "somePlaidProcessorToken" + } + + HTTP/1.1 201 Created + Location: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = "https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980"; + var requestBody = { + _links: { + "exchange-partner": { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", + }, + }, + token: "somePlaidProcessorToken", + }; + + dwolla.post(`${customerUrl}/exchanges`, requestBody).then((res) => res.headers.get("location")); // => 'https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980' + request_body = { + '_links': { + 'exchange-partner': { + 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' + } + }, + 'token': 'somePlaidProcessorToken' + } + + exchange = app_token.post('%s/exchanges' % customer_url, request_body) + exchange.headers['location'] # => 'https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' + - lang: php + source: | + createCustomerExchange(new CreateExchangeRequest([ + "_links" => [ + "exchange-partner" => [ + "href" => "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + ] + ], + "token" => "somePlaidProcessorToken" + ]), $customerUrl); + + $exchange; # => https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980' + request_body = { + _links: { + 'exchange-partner': { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + } + }, + token: 'somePlaidProcessorToken' + } + + exchange = app_token.post "#{customer_url}/exchanges", request_body + exchange.response_headers[:location] # => "https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d" + parameters: + - name: id + in: path + description: The ID of the customer to create an exchange for + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateFinicitySecureExchange' + - $ref: '#/components/schemas/CreateTokenBasedExchange' + - $ref: '#/components/schemas/CreateMXOpenBankingExchange' + - $ref: '#/components/schemas/CreatePlaidOpenBankingExchange' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + example: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d + '400': + description: Bad Request + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/InvalidExchangeToken' + - $ref: '#/components/schemas/InvalidExchange' + '401': + description: Unauthorized + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - type: object + properties: + code: + type: string + example: InvalidExchangeToken + message: + type: string + example: The exchange token is not valid to perform this operation. Either the token is expired or invalid, or the products permissions to the token are invalid or expired. + - type: object + properties: + code: + type: string + example: InvalidScope + message: + type: string + example: The scopes for creating an exchange resource for a customer is not enabled for this application. Reach out to Dwolla for more information. + '404': + description: Not Found + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /customers/{id}/exchange-sessions: + post: + tags: + - exchange sessions + summary: Create customer exchange session + description: | + Creates an exchange session for a customer. Use cases include: + - **Plaid / MX**: Instant bank account verification (open banking). For faster verification as compared to traditional micro-deposits. + - **Checkout.com**: Debit card capture for Push to Card. Create a session, then retrieve it to get `externalProviderSessionData` (payment session) for the Checkout.com Flow component. + operationId: createCustomerExchangeSession + x-speakeasy-group: customers.exchangeSessions + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + # Plaid Web Example + POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "exchange-partner": { + "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + } + } + } + + # Plaid Android Example + POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "exchange-partner": { + "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + }, + "redirect-url": { + "href": "com.example.app123" + } + } + } + + # Plaid iOS Example + POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "exchange-partner": { + "href": "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + }, + "redirect-url": { + "href": "https://example.com/app123" + } + } + } + + # MX Example + POST https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "exchange-partner": { + "href": "https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744" + } + } + } + + # Checkout.com (Push to Card / debit card) Example + POST https://api-sandbox.dwolla.com/customers/bb0e1dc7-f2ea-4cca-b053-4049d49a1c0d/exchange-sessions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer your_dwolla_access_token + + { + "_links": { + "exchange-partner": { + "href": "https://api-sandbox.dwolla.com/exchange-partners/d652517d-9c02-4ea4-87af-2977e6cf3850" + } + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + // Plaid Web Example + var customerUrl = + "https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980"; + var requestBodyPlaidWeb = { + _links: { + "exchange-partner": { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", + }, + }, + }; + dwolla + .post(`${customerUrl}/exchange-sessions`, requestBodyPlaidWeb) + .then((res) => res.headers.get("location")); + // Plaid Android Example + var requestBodyPlaidAndroid = { + _links: { + "exchange-partner": { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", + }, + "redirect-url": { + href: "com.example.app123", + }, + }, + }; + dwolla + .post(`${customerUrl}/exchange-sessions`, requestBodyPlaidAndroid) + .then((res) => res.headers.get("location")); + // Plaid iOS Example + var requestBodyPlaidIOS = { + _links: { + "exchange-partner": { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef", + }, + "redirect-url": { + href: "https://example.com/app123", + }, + }, + }; + dwolla + .post(`${customerUrl}/exchange-sessions`, requestBodyPlaidIOS) + .then((res) => res.headers.get("location")); + // MX Example + var requestBodyMX = { + _links: { + "exchange-partner": { + href: "https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744", + }, + }, + }; + dwolla + .post(`${customerUrl}/exchange-sessions`, requestBodyMX) + .then((res) => res.headers.get("location")); + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + # Plaid Web Example + customer_url = 'https://api.dwolla.com/customer/74a207b2-b7b7-4efa-8bf8-582148e7b980' + request_body_plaid_web = { + '_links': { + 'exchange-partner': { + 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' + } + } + } + exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_plaid_web) + exchange.headers['location'] + # Plaid Android Example + request_body_plaid_android = { + '_links': { + 'exchange-partner': { + 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' + }, + 'redirect-url': { + 'href': 'com.example.app123' + } + } + } + exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_plaid_android) + exchange.headers['location'] + # Plaid iOS Example + request_body_plaid_ios = { + '_links': { + 'exchange-partner': { + 'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef' + }, + 'redirect-url': { + 'href': 'https://example.com/app123' + } + } + } + exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_plaid_ios) + exchange.headers['location'] + # MX Example + request_body_mx = { + '_links': { + 'exchange-partner': { + 'href': 'https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744' + } + } + } + exchange = app_token.post('%s/exchange-sessions' % customer_url, request_body_mx) + exchange.headers['location'] + - lang: php + source: | + /** + * No example for this language yet. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + # Plaid Web Example + customer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980' + request_body_plaid_web = { + _links: { + 'exchange-partner': { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + } + } + } + exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_plaid_web + exchange.response_headers[:location] + # Plaid Android Example + request_body_plaid_android = { + _links: { + 'exchange-partner': { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + }, + 'redirect-url': { + href: "com.example.app123" + } + } + } + exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_plaid_android + exchange.response_headers[:location] + # Plaid iOS Example + request_body_plaid_ios = { + _links: { + 'exchange-partner': { + href: "https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef" + }, + 'redirect-url': { + href: "https://example.com/app123" + } + } + } + exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_plaid_ios + exchange.response_headers[:location] + # MX Example + request_body_mx = { + _links: { + 'exchange-partner': { + href: "https://api.dwolla.com/exchange-partners/2164407f-33c3-4555-a6a1-40d5e9e58744" + } + } + } + exchange = app_token.post "#{customer_url}/exchange-sessions", request_body_mx + exchange.response_headers[:location] + parameters: + - name: id + in: path + description: Customer's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + description: Parameters for creating an exchange session + required: true + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateCustomerExchangeSessionWithRedirect' + - $ref: '#/components/schemas/CreateCustomerExchangeSessionForWeb' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: validation error + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: /_links/exchange-partner/href is invalid + - type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: /_links/redirect-url/href is invalid + - type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: The provided redirect URL must exactly match one of the configured URLs for the account + '401': + description: unauthorized + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: InvalidScope + message: + type: string + example: Missing or invalid scopes for requested endpoint + '403': + description: forbidden + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - type: object + required: + - code + - message + properties: + code: + type: string + example: forbidden + message: + type: string + example: The exchange partner specified does not support this product + - type: object + required: + - code + - message + properties: + code: + type: string + example: forbidden + message: + type: string + example: Exchange sessions with this exchange partner are not enabled for your account + '404': + description: Not Found + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/NotFoundError' + /exchange-sessions/{id}: + get: + tags: + - exchange sessions + summary: Retrieve exchange session + description: | + Returns details of a previously created exchange session. Response varies by partner: + - **MX**: `_links.external-provider-session.href` (redirect URL for verification). + - **Plaid**: `externalProviderSessionToken` (token to initialize Plaid Link). + - **Checkout.com**: `externalProviderSessionData` with `id`, `payment_session_secret`, and `payment_session_token` to initialize the Checkout.com Flow component for debit card capture (Push to Card). + operationId: retrieveCustomerExchangeSession + x-speakeasy-group: exchangeSessions + x-speakeasy-name-override: get + x-codeSamples: + - lang: bash + source: | + GET https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var exchangeSessionUrl = + "https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a"; + + dwolla + .get(exchangeSessionUrl) + .then((res) => res.body._links["external-provider-session"].href); // MX => redirect URL + // For Plaid: .then((res) => res.body.externalProviderSessionToken) + // For Checkout.com (Push to Card): .then((res) => res.body.externalProviderSessionData) // => { id, payment_session_secret, payment_session_token } + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + exchange_session_url = 'https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + + exchange_session = app_token.get(exchange_session_url) + exchange_session.body['_links']['external-provider-session']['href'] # MX => redirect URL + # For Plaid: exchange_session.body['externalProviderSessionToken'] + # For Checkout.com: exchange_session.body['externalProviderSessionData'] # => { id, payment_session_secret, payment_session_token } + - lang: php + source: | + /** + * No example for this language yet. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + exchange_session_url = 'https://api.dwolla.com/exchange-sessions/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a' + + exchange_session = app_token.get exchange_session_url + exchange_session['_links']['external-provider-session']['href'] # MX => redirect URL + # For Plaid: exchange_session['externalProviderSessionToken'] + # For Checkout.com: exchange_session['externalProviderSessionData'] # => { id, payment_session_secret, payment_session_token } + parameters: + - name: id + in: path + description: Exchange session's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ExchangeSession' + '403': + description: forbidden + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to retrieve exchange session. + '404': + description: not found + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: notFound + message: + type: string + example: Exchange session not found. + /exchanges/{id}/exchange-sessions: + post: + tags: + - exchange sessions + summary: Create re-authentication exchange session + description: Creates a re-authentication exchange session to refresh a user's bank account connection when their existing authorization is no longer valid. Required when receiving an UpdateCredentials error during bank balance checks or when user re-authentication is needed. + operationId: createReAuthExchangeSession + x-speakeasy-group: exchanges.exchangeSessions + x-speakeasy-name-override: createReAuth + x-codeSamples: + - lang: bash + source: | + POST https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980/exchange-sessions + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + + { + "_links": { + "redirect-url": { + "href": "https://www.yourdomain.com/iav-callback" + } + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var exchangeUrl = + "https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980"; + var requestBody = { + _links: { + "redirect-url": { + href: "https://www.yourdomain.com/iav-callback", + }, + }, + }; + + dwolla + .post(`${exchangeUrl}/exchange-sessions`, requestBody) + .then((res) => res.headers.get("location")); // => 'https://api.dwolla.com/exchange-sessions/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + exchange_url = 'https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980' + request_body = { + '_links': { + 'redirect-url': { + 'href': 'https://www.yourdomain.com/iav-callback' + } + } + } + + reauthExchange = app_token.post('%s/exchange-sessions' % exchange_url, request_body) + reauthExchange.headers['location'] # => 'https://api.dwolla.com/exchange-sessions/fcd15e5f-8d13-4570-a9b7-7fb49e55941d' + - lang: php + source: | + /** + * No example for this language yet. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + exchange_url = 'https://api.dwolla.com/exchanges/74a207b2-b7b7-4efa-8bf8-582148e7b980' + request_body = { + _links: { + 'redirect-url': { + href: "https://www.yourdomain.com/iav-callback" + } + } + } + + reauthExchange = app_token.post "#{exchange_url}/exchange-sessions", request_body + reauthExchange.response_headers[:location] # => "https://api.dwolla.com/exchange-sessions/fcd15e5f-8d13-4570-a9b7-7fb49e55941d" + parameters: + - name: id + in: path + description: Exchange's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + requestBody: + required: false + description: | + Request body containing the redirect URL. + Required for: + - Plaid mobile sessions + Not required for: + - Plaid web sessions + content: + application/vnd.dwolla.v1.hal+json: + schema: + oneOf: + - $ref: '#/components/schemas/CreateReAuthExchangeSessionForWeb' + - $ref: '#/components/schemas/CreateReAuthExchangeSessionWithRedirect' + responses: + '201': + description: created + headers: + Location: + $ref: '#/components/headers/Location' + '400': + description: validation error + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Invalid request parameters + '403': + description: forbidden + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: forbidden + message: + type: string + example: Not authorized to create re-authentication exchange session. + /customers/{id}/available-exchange-connections: + get: + tags: + - exchange sessions + summary: List available exchange connections + description: Returns available exchange connections for a customer's bank accounts authorized through MX Connect. Each connection includes an account name and availableConnectionToken required to create exchanges and funding sources for transfers. + operationId: listAvailableExchangeConnections + x-speakeasy-group: customers + x-speakeasy-name-override: listAvailableConnections + x-codeSamples: + - lang: bash + source: | + GET https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694/available-exchange-connections + Accept: application/vnd.dwolla.v1.hal+json + Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var customerUrl = + "https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694"; + + dwolla + .get(`${customerUrl}/available-exchange-connections`) + .then( + (res) => + res.body._embedded["available-exchange-connections"][0] + .availableConnectionToken + ); // => 'eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0=' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + customer_url = 'https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694' + + available_exchange_connection = app_token.get('%s/available-exchange-connections' % customer_url) + available_exchange_connection.body['_embedded']['available-exchange-connections'][0]['availableConnectionToken'] # => 'eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0=' + - lang: php + source: | + /** + * No example for this language yet. + **/ + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + customer_url = 'https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694' + + available_exchange_connections = app_token.get "#{customer_url}/available-exchange-connections" + available_exchange_connections._embedded['available-exchange-connections'][0].availableConnectionToken # => "eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0=" + parameters: + - name: id + in: path + description: Customer's unique identifier + required: true + schema: + type: string + - $ref: '#/components/parameters/Accept' + responses: + '200': + description: successful operation + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/AvailableExchangeConnections' + '404': + description: not found + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: The requested resource was not found. Check Customer ID. + /client-tokens: + post: + tags: + - client tokens + summary: Create a client token + description: Create a client token for secure authentication within Dwolla Drop-in components. Requires a granular permission action and a Customer link to define what operations the end user can perform within the component. Returns a short-lived token for configuring client-side Drop-in components including customer creation, verification, funding source management, and payment processing. Essential for implementing secure, embeddable UI components without exposing application credentials to the frontend. + operationId: createClientToken + x-speakeasy-group: clientTokens + x-speakeasy-name-override: create + x-codeSamples: + - lang: bash + source: | + POST https://api-sandbox.dwolla.com/client-tokens + Accept: application/vnd.dwolla.v1.hal+json + Content-Type: application/json + Authorization: Bearer {{token}} + { + "action": "customer.update", + "_links": { + "customer": { + "href": "https://api-sandbox.dwolla.com/customers/{{customerId}}" + } + } + } + - lang: javascript + source: | + // Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node + var requestBody = { + _links: { + customer: { + href: "https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4", + }, + }, + action: "customer.update", + }; + + dwolla.post("/client-tokens", requestBody).then((res) => res.body.token); // => '4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY' + - lang: python + source: | + # Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python + request_body = { + '_links': { + 'customer': { + 'href': 'https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4' + } + }, + 'action': 'customer.update' + } + + client_token = app_token.post('client-tokens', request_body) + client_token.body['token'] # => '4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY' + - lang: php + source: | + + array ( + 'customer' => + array ( + 'href' => 'https://api-sandbox.dwolla.com/customers/8779a1f7-7a98-4a86-921e-83539f6c895e', + ), + ), + 'action' => 'customer.update' + ); + $clientTokensApi = new DwollaSwagger\TokensApi($apiClient); + $clientToken = $clientTokensApi->clientTokens($request_body); + ?> + - lang: ruby + source: | + # Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby + request_body = { + :_links => { + :customer => { + :href => "https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4" + } + }, + :action => "customer.update" + } + + client_token = app_token.post "client-tokens", request_body + client_token.token # => "4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY" + parameters: + - $ref: '#/components/parameters/Accept' + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - action + - _links + properties: + action: + type: string + description: A granular permission for the Customer performing an action within a drop-in component + example: customer.update + _links: + type: object + required: + - customer + properties: + customer: + type: object + required: + - href + properties: + href: + type: string + format: uri + description: Link to the Customer performing the action + example: https://api-sandbox.dwolla.com/customers/707177c3-bf15-4e7e-b37c-55c3898d9bf4 + responses: + '200': + description: Client token created successfully + content: + application/vnd.dwolla.v1.hal+json: + schema: + type: object + required: + - token + properties: + token: + type: string + description: The client token that can be used with drop-in components + example: 4adF858jPeQ9RnojMHdqSD2KwsvmhO7Ti7cI5woOiBGCpH5krY + '400': + description: Bad Request + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/BadRequestError' + '403': + description: Forbidden + content: + application/vnd.dwolla.v1.hal+json: + schema: + $ref: '#/components/schemas/ForbiddenError' +components: + securitySchemes: + clientCredentials: + type: oauth2 + flows: + clientCredentials: + tokenUrl: /token + x-speakeasy-token-endpoint-authentication: client_secret_basic + scopes: {} + parameters: + Accept: + name: Accept + in: header + required: true + description: The media type of the response. Must be application/vnd.dwolla.v1.hal+json + schema: + type: string + enum: + - application/vnd.dwolla.v1.hal+json + default: application/vnd.dwolla.v1.hal+json + schemas: + HalLink: + title: HalLink + type: object + properties: + href: + type: string + example: https://api.dwolla.com + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: resource-type + Root: + title: Root + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + Account: + title: Account + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 2e21f010-3023-4891-aced-ed726d7cd5e1 + name: + type: string + example: Jane Doe's Business + timezoneOffset: + type: number + example: -6 + type: + type: string + example: Commercial + NotFoundError: + title: NotFoundError + description: Error response schema for 404 NotFound + type: object + required: + - code + - message + properties: + code: + type: string + example: NotFound + message: + type: string + example: The requested resource was not found. + CreateAccountFundingSource: + title: CreateAccountFundingSource + type: object + properties: + _links: + type: object + properties: + exchange: + type: object + properties: + href: + type: string + name: + type: string + bankAccountType: + type: string + enum: + - checking + - savings + accountNumber: + type: string + routingNumber: + type: string + channels: + type: array + items: + type: string + required: + - name + - bankAccountType + - accountNumber + - routingNumber + BadRequestSchema: + title: BadRequestSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + DuplicateResourceSchema: + title: DuplicateResourceSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: DuplicateResource + message: + type: string + example: 'Bank already exists: id=df8392e5-4c06-42ed-b247-c098ed6f5a11' + _links: + type: object + properties: + about: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/df8392e5-4c06-42ed-b247-c098ed6f5a11 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: funding-source + FundingSource: + title: FundingSource + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + status: + type: string + example: unverified + type: + type: string + example: bank + bankAccountType: + type: string + example: checking + name: + type: string + example: My bank + created: + type: string + format: date-time + example: '2022-07-23T00:18:21.419Z' + removed: + type: boolean + example: true + channels: + type: array + description: Payment processing channels supported by this funding source + items: + type: string + enum: + - ach + - real-time-payments + - wire + - external + example: ach + bankName: + type: string + example: SANDBOX TEST BANK + fingerprint: + type: string + example: 5012989b55af15400e8102f95d2ec5e7ce3aef45c01613280d80a236dd8d6c + bankUsageType: + type: string + description: The usage type of the bank account. Indicates if this is a settlement account for card network processors. + enum: + - card-network + example: card-network + cardDetails: + type: object + description: Card-specific details. Only present when type is 'card'. + properties: + brand: + type: string + description: The card brand/network (e.g., Visa, Mastercard, American Express) + example: Visa + lastFour: + type: string + description: The last four digits of the card number + example: '1234' + expirationMonth: + type: integer + description: The card expiration month (1-12) + example: 12 + minimum: 1 + maximum: 12 + expirationYear: + type: integer + description: The card expiration year (4-digit year) + example: 2026 + nameOnCard: + type: string + description: The cardholder name as it appears on the card + example: John Doe + bin: + type: string + description: Bank Identification Number (BIN) - the first 6-8 digits of the card number + example: '40247644' + billingAddress: + type: object + description: The billing address associated with the card + properties: + address1: + type: string + description: First line of the street address + example: 552 test + address2: + type: string + description: Second line of the street address (optional) + example: Apt 4B + address3: + type: string + description: Third line of the street address (optional) + example: Unit 101 + city: + type: string + description: City name + example: Des Moines + stateProvinceRegion: + type: string + description: Two-letter state, province, or region code + example: IA + country: + type: string + description: Two-letter country code (ISO 3166-1 alpha-2) + example: US + postalCode: + type: string + description: Postal code or ZIP code + example: '50310' + FundingSources: + title: FundingSources + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + funding-sources: + type: array + items: + $ref: '#/components/schemas/FundingSource' + total: + type: integer + format: int32 + example: 3 + Transfer: + title: Transfer + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 15c6bcce-46f7-e811-8112-e8dd3bececa8 + status: + type: string + example: pending + amount: + type: object + properties: + value: + type: string + example: '42.00' + currency: + type: string + example: USD + created: + type: string + format: date-time + example: '2018-12-03T22:00:22.970Z' + clearing: + type: object + properties: + source: + type: string + example: standard + destination: + type: string + example: same-day + metadata: + type: object + properties: + paymentId: + type: string + example: '12345678' + note: + type: string + example: Payment for completed work Dec. 1 + achDetails: + type: object + description: ACH-specific details for the transfer. Present when transfer was processed via ACH network. + properties: + source: + type: object + description: Information sent to the source/originating bank account along with the transfer + properties: + addenda: + type: object + description: Contains addenda information for the transfer + properties: + values: + type: array + items: + type: string + example: ABC123_AddendaValue + description: An array containing a single string addenda value + beneficiaryName: + type: string + description: Beneficiary of the transaction's name. In general, should match the user onboarded to the Platform's name + example: John Doe + 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 + companyId: + type: string + description: Numeric identifier of originator + example: '1234567890' + companyName: + type: string + description: Name of the originator + example: Acme Corporation + effectiveDate: + type: string + format: date + description: The date when the ACH transaction becomes effective, formatted as YYYY-MM-DD. This is typically the settlement date for the transaction + example: '2021-12-01' + postingData: + type: string + description: Suggested memo line format for bank statements, structured as companyName:companyDiscretionaryData:beneficiaryName + example: Acme Corporation:Payment Reference:Jane Smith + routingNumber: + type: string + description: Routing number of Originating Depository Financial Institution (ODFI). Identifies the financial institution that originated the ACH transaction + example: '222222226' + traceId: + type: string + description: A unique identifier for tracing the ACH transaction through the banking network. Used for transaction tracking and reconciliation purposes + example: '222222225926346' + rtpDetails: + type: object + description: Real-Time Payments (RTP) network specific details. Present when transfer was processed via RTP network. + properties: + destination: + type: object + description: RTP destination details with network identifiers + properties: + remittanceData: + type: string + description: Remittance information included in the transfer request + example: ABC_123 Remittance Data + networkId: + type: string + description: Unique identifier for the transfer within the RTP network + example: 20210617021214273T1BG27487110796028 + endToEndReferenceId: + type: string + description: End-to-end reference identifier for the RTP transfer + example: E2E-RTP-20210617-001 + fedNowDetails: + type: object + description: FedNow Service network specific details. Present when transfer was processed via FedNow network. + properties: + destination: + type: object + description: FedNow destination details with network identifiers + properties: + remittanceData: + type: string + description: Remittance information included in the transfer request + example: ABC_123 Remittance Data + networkId: + type: string + description: Unique identifier for the transfer within the FedNow network + example: 20240115123456789FEDNOW123456 + endToEndReferenceId: + type: string + description: End-to-end reference identifier for the FedNow transfer + example: E2E-FEDNOW-20240115-001 + correlationId: + type: string + example: 8a2cdc8d-629d-4a24-98ac-40b735229fe2 + processingChannel: + type: object + properties: + destination: + type: string + enum: + - real-time-payments + - fed-now + description: The payment network used to process the transfer + example: real-time-payments + Transfers: + title: Transfers + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + transfers: + type: array + items: + $ref: '#/components/schemas/Transfer' + total: + type: integer + example: 100 + TransferAmount: + title: TransferAmount + type: object + required: + - value + - currency + properties: + value: + type: string + example: '5.00' + currency: + type: string + example: USD + MassPayment: + title: MassPayment + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 11ac4051-7b76-44fc-87ab-ae23012393f0 + status: + type: string + example: complete + created: + type: string + format: date-time + example: '2022-01-20T17:41:41.000Z' + metaData: + type: object + total: + $ref: '#/components/schemas/TransferAmount' + totalFees: + $ref: '#/components/schemas/TransferAmount' + correlationId: + type: string + example: CID-8a2cdc8d-629d-4a24-98ac-40b735229fe2 + MassPayments: + title: MassPayments + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + mass-payments: + type: array + items: + $ref: '#/components/schemas/MassPayment' + total: + type: integer + example: 100 + BaseCustomer: + title: BaseCustomer + description: Base schema containing common fields for all customer types + type: object + required: + - _links + - id + - firstName + - lastName + - email + - created + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: c41125c5-99c4-4303-a9f6-d066d28a61e3 + firstName: + type: string + example: Jane + lastName: + type: string + example: Doe + email: + type: string + example: janedoe@mail.com + correlationId: + type: string + example: CID-abe2bb3d-d2ff-433b-95a3-0debd960ed25 + created: + type: string + format: date-time + example: '2022-10-07T16:46:13.023Z' + UnverifiedCustomer: + title: UnverifiedCustomer + description: Unverified customer - basic customer type with no KYC verification + allOf: + - $ref: '#/components/schemas/BaseCustomer' + - type: object + required: + - type + - status + properties: + type: + type: string + enum: + - unverified + example: unverified + status: + type: string + enum: + - unverified + - suspended + - deactivated + example: unverified + businessName: + type: string + example: Jane Corp llc + ReceiveOnlyCustomer: + title: ReceiveOnlyCustomer + description: Receive-only user - can only receive funds, not send + allOf: + - $ref: '#/components/schemas/BaseCustomer' + - type: object + required: + - type + - status + properties: + type: + type: string + enum: + - receive-only + example: receive-only + status: + type: string + enum: + - unverified + - suspended + - deactivated + example: unverified + businessName: + type: string + example: Jane Corp llc + VerifiedPersonalCustomer: + title: VerifiedPersonalCustomer + description: Verified personal customer - fully KYC verified individual with send and receive capabilities + allOf: + - $ref: '#/components/schemas/BaseCustomer' + - type: object + required: + - type + - status + - address1 + - city + - state + - postalCode + properties: + type: + type: string + enum: + - personal + example: personal + status: + type: string + enum: + - verified + - suspended + - deactivated + - document + - retry + - kba + example: verified + address1: + type: string + example: 123 Main Street + address2: + type: string + example: Ste 123 + city: + type: string + example: Des Moines + state: + type: string + example: IA + postalCode: + type: string + example: '50309' + VerifiedSolePropCustomer: + title: VerifiedSolePropCustomer + description: Verified sole proprietorship customer - distinguished from VerifiedBusinessCustomer by businessType=soleProprietorship + allOf: + - $ref: '#/components/schemas/BaseCustomer' + - type: object + required: + - type + - status + - address1 + - city + - state + - postalCode + - businessName + - businessType + - businessClassification + properties: + type: + type: string + enum: + - business + example: business + status: + type: string + enum: + - verified + - suspended + - deactivated + - document + - retry + example: verified + address1: + type: string + example: 123 Main Street + address2: + type: string + example: Ste 123 + city: + type: string + example: Des Moines + state: + type: string + example: IA + postalCode: + type: string + example: '50309' + businessName: + type: string + example: Jane Corp + businessType: + type: string + enum: + - soleProprietorship + example: soleProprietorship + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + VerifiedBusinessCustomer: + title: VerifiedBusinessCustomer + description: Verified business customer (LLC, Corporation, Partnership) - distinguished from VerifiedSolePropCustomer by presence of a controller object + allOf: + - $ref: '#/components/schemas/BaseCustomer' + - type: object + required: + - type + - status + - address1 + - city + - state + - postalCode + - businessName + - businessType + - businessClassification + - controller + properties: + type: + type: string + enum: + - business + example: business + status: + type: string + enum: + - verified + - suspended + - deactivated + - document + - retry + example: verified + address1: + type: string + example: 123 Main Street + address2: + type: string + example: Ste 123 + city: + type: string + example: Des Moines + state: + type: string + example: IA + postalCode: + type: string + example: '50309' + phone: + type: string + example: '555555555' + website: + type: string + example: https://www.dwolla.com + businessName: + type: string + example: Jane Corp + doingBusinessAs: + type: string + example: Jane's Coffee and Sweets + businessType: + type: string + enum: + - llc + - corporation + - partnership + example: llc + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + controller: + type: object + required: + - firstName + - lastName + - title + - address + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Controller + title: + type: string + example: CEO + address: + type: object + properties: + address1: + type: string + example: 462 Main Street + address2: + type: string + example: Suite 123 + address3: + type: string + example: Unit 123 + city: + type: string + example: Des Moines + postalCode: + type: string + example: '50309' + country: + type: string + example: USA + stateProvinceRegion: + type: string + example: IA + Customers: + title: Customers + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + customers: + type: array + items: + oneOf: + - $ref: '#/components/schemas/UnverifiedCustomer' + - $ref: '#/components/schemas/ReceiveOnlyCustomer' + - $ref: '#/components/schemas/VerifiedPersonalCustomer' + - $ref: '#/components/schemas/VerifiedSolePropCustomer' + - $ref: '#/components/schemas/VerifiedBusinessCustomer' + total: + type: integer + example: 2 + ForbiddenError: + title: ForbiddenError + description: Error response schema for 403 Forbidden + type: object + required: + - code + - message + properties: + code: + type: string + example: Forbidden + message: + type: string + example: The supplied credentials are not authorized for this resource. + CreateReceiveOnlyUser: + title: CreateReceiveOnlyUser + description: Create a Receive Only User + type: object + required: + - firstName + - lastName + - email + - type + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + type: + type: string + const: receive-only + ipAddress: + type: string + example: 143.156.7.8 + phone: + type: string + example: '5555555555' + correlationId: + type: string + example: fc451a7a-ae30-4404-aB95-e3553fcd733 + businessName: + type: string + example: Jane Corp llc + CreateUnverifiedCustomer: + title: CreateUnverifiedCustomer + description: Create an Unverified Customer + type: object + required: + - firstName + - lastName + - email + - type + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + type: + type: string + const: unverified + ipAddress: + type: string + example: 143.156.7.8 + phone: + type: string + example: '5555555555' + correlationId: + type: string + example: fc451a7a-ae30-4404-aB95-e3553fcd733 + businessName: + type: string + example: Jane Corp llc + CreateVerifiedPersonalCustomer: + title: CreateVerifiedPersonalCustomer + description: Create a Verified Personal customer + type: object + required: + - firstName + - lastName + - email + - address1 + - city + - state + - postalCode + - dateOfBirth + - type + - ssn + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + ipAddress: + type: string + example: 143.156.7.8 + phone: + type: string + example: '5555555555' + correlationId: + type: string + example: fc451a7a-ae30-4404-aB95-e3553fcd733 + type: + type: string + const: personal + address1: + type: string + example: 99-99 33rd St + address2: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + ssn: + type: string + example: '1234' + dateOfBirth: + type: string + example: '1980-09-12' + CreateVerifiedSolePropCustomer: + title: CreateVerifiedSolePropCustomer + description: Create a Verified Business customer (Sole Proprietorship) + type: object + required: + - firstName + - lastName + - email + - address1 + - city + - state + - postalCode + - dateOfBirth + - type + - ssn + - businessType + - businessName + - businessClassification + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Doe + email: + type: string + example: johndoe@email.com + ipAddress: + type: string + example: 143.156.7.8 + phone: + type: string + example: '5555555555' + correlationId: + type: string + example: fc451a7a-ae30-4404-aB95-e3553fcd733 + type: + type: string + const: business + address1: + type: string + example: 99-99 33rd St + address2: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + ssn: + type: string + example: '1234' + dateOfBirth: + type: string + example: '1980-09-12' + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessName: + type: string + example: Jane Corp + doingBusinessAs: + type: string + example: Jane's Electronics + ein: + type: string + example: 00-0000000 + website: + type: string + example: https://www.domain.com + businessType: + type: string + const: soleProprietorship + InternationalAddress: + title: InternationalAddress + type: object + required: + - address1 + - city + - country + - stateProvinceRegion + properties: + address1: + type: string + example: 462 Main Street + address2: + type: string + example: Suite 123 + address3: + type: string + example: Unit 123 + city: + type: string + example: Des Moines + postalCode: + type: string + example: '50309' + country: + type: string + example: USA + stateProvinceRegion: + type: string + example: IA + CreateVerifiedBusinessCustomerWithController: + title: CreateVerifiedBusinessCustomerWithController + description: Create a Verified Business customer with a US controller + type: object + required: + - firstName + - lastName + - email + - address1 + - city + - state + - postalCode + - type + - businessType + - controller + - businessName + - businessClassification + - ein + properties: + firstName: + type: string + example: Jane + lastName: + type: string + example: Business + email: + type: string + example: jane.business@email.com + ipAddress: + type: string + example: 143.156.7.8 + phone: + type: string + example: '5555555555' + correlationId: + type: string + example: fc451a7a-ae30-4404-aB95-e3553fcd733 + type: + type: string + const: business + address1: + type: string + example: 99-99 33rd St + address2: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessName: + type: string + example: Jane Corp + doingBusinessAs: + type: string + example: Jane's Electronics + ein: + type: string + example: 00-0000000 + website: + type: string + example: https://www.domain.com + controller: + type: object + required: + - firstName + - lastName + - title + - dateOfBirth + - address + - ssn + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Controller + title: + type: string + example: CEO + dateOfBirth: + type: string + example: '1980-01-31' + address: + $ref: '#/components/schemas/InternationalAddress' + ssn: + type: string + example: '1234' + businessType: + type: string + enum: + - llc + - corporation + - partnership + example: llc + Passport: + title: Passport + type: object + required: + - number + - country + properties: + number: + type: string + country: + type: string + CreateVerifiedBusinessCustomerWithInternationalController: + title: CreateVerifiedBusinessCustomerWithInternationalController + description: Create a Verified Business customer with an international (non US) controller + type: object + required: + - firstName + - lastName + - email + - address1 + - city + - state + - postalCode + - type + - businessType + - controller + - businessName + - businessClassification + - ein + properties: + firstName: + type: string + example: Jane + lastName: + type: string + example: Business + email: + type: string + example: jane.business@email.com + ipAddress: + type: string + example: 143.156.7.8 + phone: + type: string + example: '5555555555' + correlationId: + type: string + example: fc451a7a-ae30-4404-aB95-e3553fcd733 + type: + type: string + const: business + address1: + type: string + example: 99-99 33rd St + address2: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessName: + type: string + example: Jane Corp + doingBusinessAs: + type: string + example: Jane's Electronics + ein: + type: string + example: 00-0000000 + website: + type: string + example: https://www.domain.com + controller: + type: object + required: + - firstName + - lastName + - title + - dateOfBirth + - address + - passport + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Controller + title: + type: string + example: CEO + dateOfBirth: + type: string + example: '1980-01-31' + address: + $ref: '#/components/schemas/InternationalAddress' + passport: + $ref: '#/components/schemas/Passport' + businessType: + type: string + enum: + - llc + - corporation + - partnership + example: llc + BadRequestError: + title: BadRequestError + description: Error response schema for 400 Bad Request + type: object + required: + - code + - message + properties: + code: + type: string + example: BadRequest + message: + type: string + example: The request body contains bad syntax or is incomplete. + DeactivateCustomer: + title: DeactivateCustomer + description: Deactivate a Customer + type: object + required: + - status + properties: + status: + type: string + example: deactivated + ReactivateCustomer: + title: ReactivateCustomer + description: Reactivate a Customer + type: object + required: + - status + properties: + status: + type: string + example: reactivated + SuspendCustomer: + title: SuspendCustomer + description: Suspend a Customer + type: object + required: + - status + properties: + status: + type: string + example: suspended + UpdateUnverifiedAndReceiveOnly: + title: UpdateUnverifiedAndReceiveOnly + description: Update Unverified Customer or Receive Only User Information + type: object + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Doe + email: + type: string + example: accountAdmin@email.com + businessName: + type: string + example: Jane Corp + UpdateVerifiedPersonal: + title: UpdateVerifiedPersonal + description: Update Verified Personal Customer Information + type: object + properties: + email: + type: string + example: accountAdmin@email.com + ipAddress: + type: string + example: 143.156.7.8 + address1: + type: string + example: 123 Main Street + address2: + type: string + example: XYZ Suite + city: + type: string + example: Des Moines + state: + type: string + example: IA + postalCode: + type: string + example: '50309' + phone: + type: string + example: '5555555555' + UpdateVerifiedBusiness: + title: UpdateVerifiedBusiness + description: Update Verified Business Customer Information (both Sole Proprietorship and Non-Sole Proprietorship) + allOf: + - $ref: '#/components/schemas/UpdateVerifiedPersonal' + - type: object + properties: + doingBusinessAs: + type: string + example: Jane's Electronics + website: + type: string + example: https://www.domain.com + UpgradeToUnverified: + title: UpgradeToUnverified + description: Upgrade Receive Only User to Unverified Customer + type: object + required: + - type + properties: + type: + type: string + example: unverified + UpgradeToVerifiedPersonal: + title: UpgradeToVerifiedPersonal + description: Upgrade Unverified Customer to Verified Personal Customer + type: object + required: + - firstName + - lastName + - email + - address1 + - city + - state + - postalCode + - dateOfBirth + - type + - ssn + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Doe + email: + type: string + example: johndoe@email.net + ipAddress: + type: string + example: 10.10.10.10 + type: + type: string + example: personal + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + dateOfBirth: + type: string + example: '1970-01-01' + ssn: + type: string + example: '1234' + UpgradeToVerifiedBusiness: + title: UpgradeToVerifiedBusiness + description: Upgrade Unverified Customer to Verified Business Customer + type: object + required: + - firstName + - lastName + - email + - type + - address1 + - city + - state + - postalCode + - controller + - businessClassification + - businessType + - businessName + - ein + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + ipAddress: + type: string + example: 143.156.7.8 + type: + type: string + example: business + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + controller: + type: object + required: + - firstName + - lastName + - title + - dateOfBirth + - address + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Controller + title: + type: string + example: CEO + ssn: + type: string + example: '6789' + dateOfBirth: + type: string + example: '1980-01-31' + address: + type: object + required: + - address1 + - city + - stateProvinceRegion + - postalCode + - country + properties: + address1: + type: string + example: 1749 18th st + address2: + type: string + example: apt 12 + city: + type: string + example: Des Moines + stateProvinceRegion: + type: string + example: IA + postalCode: + type: string + example: '50266' + country: + type: string + example: US + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessType: + type: string + example: llc + businessName: + type: string + example: Jane Corp + ein: + type: string + example: 00-0000000 + UpgradeToVerifiedSoleProp: + title: UpgradeToVerifiedSoleProp + description: Upgrade Unverified Customer to Verified Business Customer (Sole Proprietorship) + type: object + required: + - firstName + - lastName + - email + - type + - dateOfBirth + - ssn + - address1 + - city + - state + - postalCode + - businessClassification + - businessType + - businessName + - ein + properties: + firstName: + type: string + example: Business + lastName: + type: string + example: Owner + email: + type: string + example: solePropBusiness@email.com + ipAddress: + type: string + example: 143.156.7.8 + type: + type: string + example: business + dateOfBirth: + type: string + example: '1980-01-31' + ssn: + type: string + example: '6789' + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessType: + type: string + example: soleProprietorship + businessName: + type: string + example: Jane Corp + ein: + type: string + example: 00-0000000 + RetryVerifiedPersonal: + title: RetryVerifiedPersonal + description: Retry Verification for Verified Personal Customer + type: object + required: + - firstName + - lastName + - email + - address1 + - city + - state + - postalCode + - dateOfBirth + - type + - ssn + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Doe + email: + type: string + example: johndoe@email.net + ipAddress: + type: string + example: 10.10.10.10 + type: + type: string + example: personal + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + dateOfBirth: + type: string + example: '1970-01-01' + ssn: + type: string + example: '1234' + RetryVerifiedBusinessNoController: + title: RetryVerifiedBusinessNoController + description: Retry Verification for Verified Business Customer where only Business Details need to be retried + type: object + required: + - firstName + - lastName + - email + - type + - address1 + - city + - state + - postalCode + - businessClassification + - businessType + - businessName + - ein + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + ipAddress: + type: string + example: 143.156.7.8 + type: + type: string + example: business + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessType: + type: string + example: llc + businessName: + type: string + example: Jane Corp + ein: + type: string + example: 00-0000000 + RetryVerifiedBusinessWithController: + title: RetryVerifiedBusinessWithController + description: Retry Verification for Verified Business Customer where Business Details as well as Controller Details need to be retried + type: object + required: + - firstName + - lastName + - email + - type + - address1 + - city + - state + - postalCode + - controller + - businessClassification + - businessType + - businessName + - ein + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + ipAddress: + type: string + example: 143.156.7.8 + type: + type: string + example: business + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + controller: + type: object + required: + - firstName + - lastName + - title + - ssn + - dateOfBirth + - address + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Controller + title: + type: string + example: CEO + ssn: + type: string + example: '123456789' + dateOfBirth: + type: string + example: '1980-01-31' + address: + type: object + required: + - address1 + - city + - stateProvinceRegion + - postalCode + - country + properties: + address1: + type: string + example: 1749 18th st + address2: + type: string + example: apt 12 + city: + type: string + example: Des Moines + stateProvinceRegion: + type: string + example: IA + postalCode: + type: string + example: '50266' + country: + type: string + example: US + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessType: + type: string + example: llc + businessName: + type: string + example: Jane Corp + ein: + type: string + example: 00-0000000 + RetryVerifiedBusinessWithInternationalController: + title: RetryVerifiedBusinessWithInternationalController + description: Retry Verification for Verified Business Customer where Business Details as well as International Controller Details need to be retried + type: object + required: + - firstName + - lastName + - email + - type + - address1 + - city + - state + - postalCode + - controller + - businessClassification + - businessType + - businessName + - ein + properties: + firstName: + type: string + example: Account + lastName: + type: string + example: Admin + email: + type: string + example: accountAdmin@email.com + ipAddress: + type: string + example: 143.156.7.8 + type: + type: string + example: business + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + controller: + type: object + required: + - firstName + - lastName + - title + - dateOfBirth + - address + - passport + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Controller + title: + type: string + example: CEO + dateOfBirth: + type: string + example: '1980-01-31' + address: + type: object + required: + - address1 + - city + - country + - stateProvinceRegion + properties: + address1: + type: string + example: 462 Main Street + address2: + type: string + example: Suite 123 + address3: + type: string + example: Unit 123 + city: + type: string + example: Des Moines + postalCode: + type: string + example: '50309' + country: + type: string + example: USA + stateProvinceRegion: + type: string + example: IA + passport: + type: object + required: + - number + - country + properties: + number: + type: string + country: + type: string + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessType: + type: string + example: llc + businessName: + type: string + example: Jane Corp + ein: + type: string + example: 00-0000000 + RetryVerifiedSoleProp: + title: RetryVerifiedSoleProp + description: Retry Verification for Verified Business Customer (Sole Proprietorship) + type: object + required: + - firstName + - lastName + - email + - type + - dateOfBirth + - ssn + - address1 + - city + - state + - postalCode + - businessClassification + - businessType + - businessName + - ein + properties: + firstName: + type: string + example: Business + lastName: + type: string + example: Owner + email: + type: string + example: solePropBusiness@email.com + ipAddress: + type: string + example: 143.156.7.8 + type: + type: string + example: business + dateOfBirth: + type: string + example: '1980-01-31' + ssn: + type: string + example: '6789' + address1: + type: string + example: 99-99 33rd St + city: + type: string + example: Some City + state: + type: string + example: NY + postalCode: + type: string + example: '11101' + businessClassification: + type: string + example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 + businessType: + type: string + example: soleProprietorship + businessName: + type: string + example: Jane Corp + ein: + type: string + example: 00-0000000 + BusinessClassification: + title: BusinessClassification + type: object + properties: + _links: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + industry-classifications: + type: array + items: + type: object + properties: + id: + type: string + example: 9ed3f66b-7d6f-11e3-95ac-5404a6144203 + name: + type: string + example: Wineries + id: + type: string + example: 9ed3f669-7d6f-11e3-b545-5404a6144203 + name: + type: string + example: Food retail and service + BusinessClassifications: + title: BusinessClassifications + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + business-classifications: + type: array + items: + $ref: '#/components/schemas/BusinessClassification' + total: + type: integer + format: int32 + example: 3 + BeneficialOwner: + title: BeneficialOwner + description: Request body model for a Beneficial Owner + type: object + required: + - _links + - id + - firstName + - lastName + - address + - verificationStatus + - created + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + firstName: + type: string + example: John + lastName: + type: string + example: Doe + address: + $ref: '#/components/schemas/InternationalAddress' + verificationStatus: + type: string + enum: + - verified + - document + - incomplete + example: verified + created: + type: string + format: date-time + example: '2022-07-23T00:18:21.419Z' + BeneficialOwners: + title: BeneficialOwners + description: Request model for list beneficial owners + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + beneficial-owners: + type: array + items: + $ref: '#/components/schemas/BeneficialOwner' + CreateUSBeneficialOwner: + title: CreateUSBeneficialOwner + description: Create a US Beneficial Owner (identified by SSN). For US-based beneficial owners only. Use SSN for identity verification instead of passport. + required: + - firstName + - lastName + - dateOfBirth + - address + - ssn + type: object + properties: + firstName: + type: string + example: John + lastName: + type: string + example: Doe + dateOfBirth: + type: string + example: '1980-01-31' + address: + $ref: '#/components/schemas/InternationalAddress' + ssn: + type: string + example: '123456789' + CreateInternationalBeneficialOwner: + title: CreateInternationalBeneficialOwner + description: Create an International Beneficial Owner (identified by Passport). For non-US beneficial owners who don't have a US SSN. Requires passport information for identity verification. + required: + - firstName + - lastName + - dateOfBirth + - address + - passport + type: object + properties: + firstName: + type: string + example: Jane + lastName: + type: string + example: Smith + dateOfBirth: + type: string + example: '1985-03-15' + address: + $ref: '#/components/schemas/InternationalAddress' + passport: + $ref: '#/components/schemas/Passport' + ValidationErrorSchema: + title: ValidationErrorSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + BeneficialOwnership: + title: BeneficialOwnership + type: object + required: + - _links + - status + properties: + _links: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + status: + type: string + enum: + - uncertified + - certified + - recertify + example: uncertified + Document: + title: Document + description: Identity verification document for a customer or beneficial owner + type: object + required: + - _links + - id + - status + - documentVerificationStatus + - type + - created + properties: + _links: + type: object + properties: + self: + $ref: '#/components/schemas/HalLink' + id: + type: string + description: Unique identifier for the document + example: 56502f7a-fa59-4a2f-8579-0f8bc9d7b9cc + status: + type: string + description: Current status of the document upload + enum: + - pending + - reviewed + example: reviewed + type: + type: string + description: Type of identity document uploaded + enum: + - passport + - license + - idCard + - other + example: passport + created: + type: string + format: date-time + description: ISO-8601 timestamp when the document was uploaded + example: '2015-09-29T21:42:16.000Z' + documentVerificationStatus: + type: string + description: Verification status of the document after review + enum: + - pending + - accepted + - rejected + example: rejected + failureReason: + type: string + description: Primary reason why document verification failed (if rejected) + example: ScanDobMismatch + allFailureReasons: + type: array + description: Complete list of all failure reasons if document verification was rejected + items: + type: object + required: + - reason + - description + properties: + reason: + type: string + description: Failure reason code + example: ScanDobMismatch + description: + type: string + description: Human-readable explanation of the failure reason + example: Scan DOB does not match DOB on account + Documents: + title: Documents + type: object + required: + - _links + - _embedded + - total + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + required: + - documents + properties: + documents: + type: array + items: + $ref: '#/components/schemas/Document' + total: + type: integer + example: 2 + MaximumNumberOfResourcesSchema: + title: MaximumNumberOfResourcesSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: maximumNumberOfResources + message: + type: string + example: Max of four files upload allowed. Please wait for Dwolla to manually check the documents. + InvalidFileTypeSchema: + title: InvalidFileTypeSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: invalidFileType + message: + type: string + example: 'File types supported: Personal IDs - .jpg, .jpeg or .png. Business Documents - .jpg, .jpeg, .png, or .pdf.' + InvalidResourceStateSchema: + title: InvalidResourceStateSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: invalidResourceState + message: + type: string + example: Resource cannot be modified. Document creation not allowed for already verified Customers or non-verified Customer types. + NotAuthorizedSchema: + title: NotAuthorizedSchema + type: object + required: + - code + - message + properties: + code: + type: string + example: notAuthorized + message: + type: string + example: Not authorized to create documents. + InvalidKbaSessionError: + title: InvalidKbaSessionError + type: object + required: + - code + - message + properties: + code: + type: string + example: InvalidResourceState + message: + type: string + example: The kba session is no longer valid. + ExpiredKbaSessionError: + title: ExpiredKbaSessionError + type: object + required: + - code + - message + properties: + code: + type: string + example: InvalidResourceState + message: + type: string + example: The kba session has expired. + CreateCustomerBankFundingSourceWithAccountNumbers: + title: CreateCustomerBankFundingSourceWithAccountNumbers + type: object + description: Schema for creating a basic bank funding source using routing and account numbers. This is the traditional method of adding a bank account. + required: + - routingNumber + - accountNumber + - bankAccountType + - name + properties: + routingNumber: + type: string + description: A bank routing number that identifies a bank or credit union in the U.S. + example: '222222226' + accountNumber: + type: string + description: The bank account number + example: '123456789' + bankAccountType: + type: string + enum: + - checking + - savings + - general-ledger + - loan + description: Type of bank account + example: checking + name: + type: string + description: Arbitrary nickname for the funding source. Must be 50 characters or less. + example: Jane Doe's Checking + verified: + type: boolean + description: Use when creating an unverified bank account. + enum: + - false + example: false + channels: + type: array + items: + type: string + enum: + - wire + description: An array containing a list of processing channels. ACH is the default processing channel for bank transfers. + _links: + type: object + properties: + on-demand-authorization: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 + CreateCustomerBankFundingSourceWithPlaid: + title: CreateCustomerBankFundingSourceWithPlaid + type: object + description: Schema for creating a bank funding source using a Plaid processor token. + required: + - plaidToken + - bankAccountType + - name + properties: + plaidToken: + type: string + description: A processor token obtained from Plaid for adding and verifying a bank + example: processor-sandbox-plaidauth-123456 + bankAccountType: + type: string + enum: + - checking + - savings + description: Type of bank account + example: checking + name: + type: string + description: Arbitrary nickname for the funding source. Must be 50 characters or less. + example: Jane Doe's Checking + channels: + type: array + items: + type: string + enum: + - wire + description: An array containing a list of processing channels. ACH is the default processing channel for bank transfers. + _links: + type: object + properties: + on-demand-authorization: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 + CreateCustomerExchangeFundingSource: + title: CreateCustomerExchangeFundingSource + type: object + description: Schema for creating a funding source using an exchange resource. This method is used when the bank account information is obtained via Instant Account Verification (IAV) through an exchange partner (like Plaid, MX, or Finicity). + required: + - _links + - bankAccountType + - name + properties: + _links: + type: object + required: + - exchange + properties: + exchange: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api-sandbox.dwolla.com/exchanges/6bc9109a-04fd-49b6-ace6-ca06fd282d65 + on-demand-authorization: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api-sandbox.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 + bankAccountType: + type: string + enum: + - checking + - savings + description: Type of bank account + example: checking + name: + type: string + description: Arbitrary nickname for the funding source. Must be 50 characters or less. + example: Jane Doe's Checking + CreateCustomerVirtualAccountFundingSource: + title: CreateCustomerVirtualAccountFundingSource + type: object + description: Schema for creating a Virtual Account Number (VAN) . VANs are unique account numbers for receiving external transactions into a Dwolla Balance. + required: + - name + - type + - bankAccountType + properties: + name: + type: string + description: Arbitrary nickname for the funding source. Must be 50 characters or less. + example: My First VAN + type: + type: string + enum: + - virtual + description: Type of funding source. Must be set to "virtual" for VAN creation. + example: virtual + bankAccountType: + type: string + enum: + - checking + description: Type of bank account. Must be "checking" for Virtual Account Numbers. + example: checking + CreateCustomerCardFundingSourceWithExchange: + title: CreateCustomerCardFundingSourceWithExchange + type: object + description: Schema for creating a debit card funding source using an Exchange. Used for Push to Card. + required: + - _links + - name + - cardDetails + properties: + _links: + type: object + required: + - exchange + properties: + exchange: + type: object + required: + - href + properties: + href: + type: string + format: uri + description: URL of the Exchange resource created with a card token + example: https://api-sandbox.dwolla.com/exchanges/d46b028c-244b-4054-b19b-72f09cd1dc04 + name: + type: string + description: Arbitrary nickname for the debit card funding source. Must be 50 characters or less. + example: My Visa Debit Card + cardDetails: + type: object + required: + - firstName + - lastName + - billingAddress + properties: + firstName: + type: string + description: Cardholder first name + example: Jane + lastName: + type: string + description: Cardholder last name + example: Doe + billingAddress: + type: object + description: The billing address associated with the card + required: + - address1 + - city + - stateProvinceRegion + - country + - postalCode + properties: + address1: + type: string + description: First line of the street address. Must be 50 characters or less. + example: 123 Main St + address2: + type: string + description: Second line of the street address (optional). Must be 100 characters or less. + example: Apt 4B + address3: + type: string + description: Third line of the street address (optional). Must be 100 characters or less. + example: Unit 101 + city: + type: string + description: City name. Must be 50 characters or less. + example: Dallas + stateProvinceRegion: + type: string + description: Two-letter state, province, or region code. + example: TX + country: + type: string + description: Two-letter country code (ISO 3166-1 alpha-2) + example: US + postalCode: + type: string + description: Postal code or ZIP code + example: '76034' + CreateCustomerFundingSource: + title: Create Customer Funding Source + description: | + Parameters for creating customer funding sources using different methods: + - Bank Account: Traditional method using routing/account numbers + - Exchange: Using IAV through exchange partners (Plaid, MX, etc.) + - Virtual Account: Creating Virtual Account Numbers (VANs) + - Card: Creating debit card funding sources using tokenized card data + oneOf: + - $ref: '#/components/schemas/CreateCustomerBankFundingSourceWithAccountNumbers' + - $ref: '#/components/schemas/CreateCustomerBankFundingSourceWithPlaid' + - $ref: '#/components/schemas/CreateCustomerExchangeFundingSource' + - $ref: '#/components/schemas/CreateCustomerVirtualAccountFundingSource' + - $ref: '#/components/schemas/CreateCustomerCardFundingSourceWithExchange' + InactiveExchangeError: + title: InactiveExchangeError + type: object + required: + - code + - message + properties: + code: + type: string + example: InactiveExchange + message: + type: string + example: The Exchange was removed or disabled. + InvalidExchangeTokenError: + title: InvalidExchangeTokenError + type: object + required: + - code + - message + properties: + code: + type: string + example: InvalidExchangeToken + message: + type: string + example: The exchange token is not valid to perform this operation. + DuplicateFundingSourceError: + title: DuplicateFundingSourceError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Duplicate funding source or validation error. Authorization already associated to a funding source. + UnsupportedCardCountryError: + title: UnsupportedCardCountryError + type: object + description: Error returned when attempting to create a debit card funding source from an unsupported country + required: + - code + - message + - _embedded + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + required: + - errors + properties: + errors: + type: array + items: + type: object + required: + - code + - message + - path + properties: + code: + type: string + example: Invalid + message: + type: string + example: The card's country is not supported. + path: + type: string + example: /token + _links: + type: object + example: {} + InvalidTokenError: + title: InvalidTokenError + type: object + description: Error returned when creating an Exchange with an invalid token, or when the card data is invalid + required: + - code + - message + - _embedded + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + required: + - errors + properties: + errors: + type: array + items: + type: object + required: + - code + - message + - path + properties: + code: + type: string + example: Invalid + message: + type: string + example: The card data is invalid. + path: + type: string + example: /token + _links: + type: object + example: {} + MaximumCardsExceededError: + title: MaximumCardsExceededError + type: object + description: Error returned when a customer has exceeded the maximum number of debit card funding sources + required: + - code + - message + - _embedded + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + required: + - errors + properties: + errors: + type: array + items: + type: object + required: + - code + - message + - path + properties: + code: + type: string + example: Invalid + message: + type: string + example: The maximum number of cards has been exceeded. + path: + type: string + example: /_links/exchange + CardMissingRequiredFieldsError: + title: CardMissingRequiredFieldsError + type: object + description: Error returned when required fields are missing when creating an Exchange or a debit card funding source + required: + - code + - message + - _embedded + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + required: + - errors + properties: + errors: + type: array + items: + type: object + required: + - code + - message + - path + properties: + code: + type: string + example: Required + message: + type: string + example: Token is required. + path: + type: string + example: /token + UpdateUnverifiedBank: + title: UpdateUnverifiedBank + description: Request body for updating information of an unverified bank funding source + type: object + required: + - name + properties: + routingNumber: + type: string + example: '222222226' + accountNumber: + type: string + example: '123456789' + bankAccountType: + type: string + example: checking + name: + type: string + example: Jane Doe’s Checking + UpdateVerifiedBank: + title: UpdateVerifiedBank + description: Request body for updating information of a Verified bank funding source + type: object + required: + - name + properties: + name: + type: string + example: Jane Doe’s Checking + RemoveBank: + title: RemoveBank + description: Request body for removing a bank funding source + type: object + required: + - removed + properties: + removed: + type: boolean + example: true + VerifyMicroDeposits: + title: VerifyMicroDeposits + description: Request body for verifying micro-deposits + type: object + required: + - amount1 + - amount2 + properties: + amount1: + type: object + required: + - value + - currency + properties: + value: + type: string + example: '0.02' + currency: + type: string + example: USD + amount2: + type: object + required: + - value + - currency + properties: + value: + type: string + example: '0.03' + currency: + type: string + example: USD + OnDemandAuthorization: + title: OnDemandAuthorization + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/on-demand-authorizations/30e7c028-0bdf-e511-80de-0aa34a9b2388 + bodyText: + type: string + example: I agree that future payments to Company ABC inc. will be processed by the Dwolla payment system from the selected account above. In order to cancel this authorization, I will change my payment settings within my Company ABC inc. account. + buttonText: + type: string + example: Agree & Continue + SourceNotFoundError: + title: SourceNotFoundError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Funding source not found. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + ReceiverNotFoundError: + title: ReceiverNotFoundError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Receiver not found. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidSourceFundingSourceError: + title: InvalidSourceFundingSourceError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid funding source. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + SenderRestrictedError: + title: SenderRestrictedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Sender restricted. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + ReceiverRestrictedError: + title: ReceiverRestrictedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Receiver restricted. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidMetadataError: + title: InvalidMetadataError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid metadata. + path: + type: string + example: /metadata + _links: + type: object + example: {} + OperationBlockedError: + title: OperationBlockedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Receiver cannot receive from sender. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidAmountLimitError: + title: InvalidAmountLimitError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid amount. The supplied amount is greater than your transaction limit. + path: + type: string + example: /amount/value + _links: + type: object + example: {} + CannotParseAmountError: + title: CannotParseAmountError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Invalid amount. The supplied amount must be a positive number. + path: + type: string + example: /amount/value + _links: + type: object + example: {} + InsufficientFundsError: + title: InsufficientFundsError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InsufficientFunds + message: + type: string + example: Insufficient funds. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + FacilitatorFeeAccountNotFoundError: + title: FacilitatorFeeAccountNotFoundError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Facilitator fee account not found. + path: + type: string + example: '' + _links: + type: object + example: {} + FacilitatorFeeSumTooLargeError: + title: FacilitatorFeeSumTooLargeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Facilitator fee sum too large. + path: + type: string + example: '' + _links: + type: object + example: {} + FacilitatorFeeBelowMinimumError: + title: FacilitatorFeeBelowMinimumError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Facilitator fee below minimum. + path: + type: string + example: '' + _links: + type: object + example: {} + HighRiskError: + title: HighRiskError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Due to account restrictions, we are unable to process this transaction. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + IncompatibleHoldingsError: + title: IncompatibleHoldingsError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Receiver cannot receive from sender. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + DirectAccountWithoutBankError: + title: DirectAccountWithoutBankError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: RequiresFundingSource + message: + type: string + example: Receiver requires funding source. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + SourceSameAsDestinationError: + title: SourceSameAsDestinationError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Receiver cannot be the owner of the source funding source. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidFacilitatorError: + title: InvalidFacilitatorError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Account cannot facilitate this transaction. + path: + type: string + example: '' + _links: + type: object + example: {} + InvalidFacilitatorFeeCollectFromError: + title: InvalidFacilitatorFeeCollectFromError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Unable to charge fee to specified destination. + path: + type: string + example: /fees/_links/charge-to/href + _links: + type: object + example: {} + InvalidFacilitatorFeeCollectFromCombinationError: + title: InvalidFacilitatorFeeCollectFromCombinationError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Currently, all fees must be paid by same destination." + path: + type: string + example: /fees/_links/charge-to/href + _links: + type: object + example: {} + InvalidDestinationFundingSourceError: + title: InvalidDestinationFundingSourceError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid destination funding source. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidOrRemovedCardDestinationError: + title: InvalidOrRemovedCardDestinationError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Destination funding source is either removed or does not exist. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidFacilitatorFeeAmountError: + title: InvalidFacilitatorFeeAmountError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid facilitator fee amount. + path: + type: string + example: /fees/_links/charge-to/href + _links: + type: object + example: {} + WeeklyReceiveLimitReachedError: + title: WeeklyReceiveLimitReachedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Destination customer has reached its weekly receive limit. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidDestinationClearingTypeError: + title: InvalidDestinationClearingTypeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Destination clearing type is currently not enabled. + path: + type: string + example: /clearing/destination + _links: + type: object + example: {} + InvalidAmountForDestinationClearingTypeError: + title: InvalidAmountForDestinationClearingTypeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Amount is above the allowed threshold for the specified destination clearing type. + path: + type: string + example: /amount/value + _links: + type: object + example: {} + InvalidCorrelationIdError: + title: InvalidCorrelationIdError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Correlation id must be at least one character and up to 255 characters when supplied. + path: + type: string + example: /correlationId + _links: + type: object + example: {} + SourceAddendaMaxLengthError: + title: SourceAddendaMaxLengthError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Ach addenda entries can be up to 80 characters when supplied. + path: + type: string + example: /achDetails/source/addenda/values + _links: + type: object + example: {} + DestinationAddendaMaxLengthError: + title: DestinationAddendaMaxLengthError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Ach addenda entries can be up to 80 characters when supplied. + path: + type: string + example: /achDetails/destination/addenda/values + _links: + type: object + example: {} + AchAddendaEntriesNotEnabledForAccountError: + title: AchAddendaEntriesNotEnabledForAccountError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Supplying ach addenda entries is currently not enabled. + path: + type: string + example: '' + _links: + type: object + example: {} + PointOfSaleAddendaEntriesNotEnabledForAccountError: + title: PointOfSaleAddendaEntriesNotEnabledForAccountError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Supplying point of sale addenda entries is currently not enabled. + path: + type: string + example: '' + _links: + type: object + example: {} + IncompatibleAddendaEntriesError: + title: IncompatibleAddendaEntriesError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Addenda must not include both 'values' and 'pointOfSale addenda + path: + type: string + example: /achDetails/source/addenda/pointOfSale + _links: + type: object + example: {} + InvalidPointOfSaleAddendaIdentificationCodeError: + title: InvalidPointOfSaleAddendaIdentificationCodeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Identification code on a Point of Sale addenda entry is required and can be up to 6 characters. + path: + type: string + example: /achDetails/source/addenda/pointOfSale/identificationCode + _links: + type: object + example: {} + InvalidPointOfSaleAddendaSerialNumberError: + title: InvalidPointOfSaleAddendaSerialNumberError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Serial number on a Point of Sale addenda entry is required and can be up to 6 characters. + path: + type: string + example: /achDetails/source/addenda/pointOfSale/serialNumber + _links: + type: object + example: {} + InvalidPointOfSaleAddendaDateError: + title: InvalidPointOfSaleAddendaDateError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: 'Date on a Point of Sale addenda entry is required and should be ISO-8601 format: YYYY-MM-DD.' + path: + type: string + example: /achDetails/source/addenda/pointOfSale/date + _links: + type: object + example: {} + InvalidPointOfSaleAddendaAddressError: + title: InvalidPointOfSaleAddendaAddressError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Address on a Point of Sale addenda entry is required and can be up to 27 characters. + path: + type: string + example: /achDetails/source/addenda/pointOfSale/address + _links: + type: object + example: {} + InvalidPointOfSaleAddendaCityError: + title: InvalidPointOfSaleAddendaCityError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: City on a Point of Sale addenda entry is required and can be up to 15 characters. + path: + type: string + example: /achDetails/source/addenda/pointOfSale/city + _links: + type: object + example: {} + InvalidPointOfSaleAddendaStateError: + title: InvalidPointOfSaleAddendaStateError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: State on a Point of Sale addenda entry is required and should be a valid 2-letter abbreviation. + path: + type: string + example: /achDetails/source/addenda/pointOfSale/state + _links: + type: object + example: {} + TransferExpiredForFeeError: + title: TransferExpiredForFeeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Return fees can only be charged within 45 days of the original transfer's settlement date. + path: + type: string + example: /_links/failed-transfer/href + _links: + type: object + example: {} + InvalidFeeOdfiError: + title: InvalidFeeOdfiError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Transfer ineligible. + path: + type: string + example: /_links/failed-transfer/href + _links: + type: object + example: {} + InvalidSourceBankAccountTypeError: + title: InvalidBankAccountTypeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid bank account type + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + InvalidDestinationBankAccountTypeError: + title: InvalidDestinationBankAccountTypeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid bank account type + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + IncompatibleSourceAndDestinationTypesError: + title: IncompatibleSourceAndDestinationTypesError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Card type funding sources can only accept payments directly from a balance + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + SourceNotCardNetworkSettlementError: + title: SourceNotCardNetworkSettlementError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Source funding source does not support card payouts. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + CardSourceNotAllowedError: + title: CardSourceNotAllowedError + description: Error returned when attempting to use a debit card funding source as the transfer source + type: object + required: + - code + - message + - _embedded + additionalProperties: false + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + required: + - errors + properties: + errors: + type: array + items: + type: object + required: + - code + - message + - path + properties: + code: + type: string + enum: + - NotAllowed + example: NotAllowed + message: + type: string + enum: + - Cards cannot be used as a source for transfers. + example: Cards cannot be used as a source for transfers. + path: + type: string + enum: + - /_links/source/href + example: /_links/source/href + _links: + type: object + example: {} + IncompatibleSourceForRtpDestinationError: + title: IncompatibleSourceForRtpDestinationError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Transfers using the Real Time Payments processing channel must be funded by a balance + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + InvalidAmountForDestinationProcessingChannelError: + title: InvalidAmountForDestinationProcessingChannelError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Amount is greater than the allowed threshold for the specified destination processing channel. + path: + type: string + example: /amount/value + _links: + type: object + example: {} + RtpFacilitatorFeeNotSupportedError: + title: RtpFacilitatorFeeNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Real Time Payments does not currently support facilitator fees + path: + type: string + example: '' + _links: + type: object + example: {} + RtpUnverifiedSenderNotSupportedError: + title: RtpUnverifiedSenderNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Real Time Payments does not currently support unverified senders + path: + type: string + example: '' + _links: + type: object + example: {} + RtpPersonalToPersonalNotSupportedError: + title: RtpPersonalToPersonalNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Real Time Payments does not currently support transfers between personal accounts + path: + type: string + example: '' + _links: + type: object + example: {} + DestinationProcessingChannelNotSupportedError: + title: DestinationProcessingChannelNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Destination funding source does not support processing channel + path: + type: string + example: /processingChannel/destination + _links: + type: object + example: {} + DestinationRemittanceDataMaxLengthError: + title: DestinationRemittanceDataMaxLengthError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Remittance data entries can be up to 140 characters when supplied. + path: + type: string + example: /rtpDetails/destination/remittanceData + _links: + type: object + example: {} + WithdrawInvalidAmountError: + title: WithdrawInvalidAmountError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Invalid amount. + path: + type: string + example: /amount/value + _links: + type: object + example: {} + WithdrawInvalidFundingSourceError: + title: WithdrawInvalidFundingSourceError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Destination funding source is either removed or does not exist. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + WithdrawAccountRestrictedError: + title: WithdrawAccountRestrictedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Account or customer restricted. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + WithdrawInvalidAmountForClearingTypeError: + title: WithdrawInvalidAmountForClearingTypeError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Amount is above the allowed threshold for the specified clearing type. + path: + type: string + example: /amount/value + _links: + type: object + example: {} + WithdrawInvalidWireBeneficiaryLocalityError: + title: WithdrawInvalidWireBeneficiaryLocalityError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Beneficiary locality must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. + path: + type: string + example: /wireInstructions/beneficiaryLocality + _links: + type: object + example: {} + WithdrawInvalidWireBeneficiaryRegionError: + title: WithdrawInvalidWireBeneficiaryRegionError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Beneficiary region must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. + path: + type: string + example: /wireInstructions/beneficiaryRegion + _links: + type: object + example: {} + WithdrawInvalidWireBeneficiaryCountryError: + title: WithdrawInvalidWireBeneficiaryCountryError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Beneficiary country must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. + path: + type: string + example: /wireInstructions/beneficiaryCountry + _links: + type: object + example: {} + WithdrawInvalidWireOriginatorToBeneficiaryError: + title: WithdrawInvalidWireOriginatorToBeneficiaryError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Originator to beneficiary items must not exceed 35 characters and contain only alphanumeric, white space, '.' or '#' characters. + path: + type: string + example: /wireInstructions/originatorToBeneficiary + _links: + type: object + example: {} + WithdrawProcessingChannelNotSupportedError: + title: WithdrawProcessingChannelNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Unsupported processing channel. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + WithdrawRtpUnverifiedSenderNotSupportedError: + title: WithdrawRtpUnverifiedSenderNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Real Time Payments does not currently support unverified senders + path: + type: string + example: '' + _links: + type: object + example: {} + WithdrawRtpPersonalWithdrawalNotSupportedError: + title: WithdrawRtpPersonalWithdrawalNotSupportedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Real Time Payments withdrawal from a personal account is currently not supported + path: + type: string + example: '' + _links: + type: object + example: {} + DepositAccountRestrictedError: + title: DepositAccountRestrictedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Account is restricted. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + WireInvalidImadError: + title: WireInvalidImadError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Missing or invalid IMAD. + path: + type: string + example: /imad + _links: + type: object + example: {} + WireAccountRestrictedError: + title: WireAccountRestrictedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Restricted + message: + type: string + example: Account or customer restricted. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + WireNotEnabledError: + title: WireNotEnabledError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Wire transfers are currently not enabled. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + WireAccountNotFoundError: + title: WireAccountNotFoundError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotFound + message: + type: string + example: Account or customer invalid. + path: + type: string + example: /_links/destination/href + _links: + type: object + example: {} + PrefundingSourceNotAllowedError: + title: PrefundingSourceNotAllowedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Only the prefunding account owner is able to prefund the account. + path: + type: string + example: /_links/source/href + _links: + type: object + example: {} + InvalidAttemptToFacilitateFundsError: + title: InvalidAttemptToFacilitateFundsError + type: object + required: + - code + - message + properties: + code: + type: string + example: Forbidden + message: + type: string + example: 'Invalid Funds Flow: this operation requires the funds flow ''Facilitate'' to be enabled' + InvalidAttemptToPayInFundsError: + title: InvalidAttemptToPayInFundsError + type: object + required: + - code + - message + properties: + code: + type: string + example: Forbidden + message: + type: string + example: 'Invalid Funds Flow: this operation requires the funds flow ''Receive'' to be enabled' + InvalidAttemptToPayOutFundsError: + title: InvalidAttemptToPayOutFundsError + type: object + required: + - code + - message + properties: + code: + type: string + example: Forbidden + message: + type: string + example: 'Invalid Funds Flow: this operation requires the funds flow ''Send'' to be enabled' + RtpAccountSettingNotEnabledError: + title: RtpAccountSettingNotEnabledError + type: object + required: + - code + - message + properties: + code: + type: string + example: Forbidden + message: + type: string + example: Real Time Payments not enabled for this account + TooManyRequestsErrorError: + title: TooManyRequestsErrorError + type: object + required: + - code + - message + properties: + code: + type: string + example: TooManyRequests + message: + type: string + example: Concurrent transfers with the given funding source are not supported. Please wait a short period of time before re-attempting the request. + StatusInvalidError: + title: StatusInvalidError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: Invalid + message: + type: string + example: Status invalid. + path: + type: string + example: /status + _links: + type: object + example: {} + StatusNotAllowedError: + title: StatusNotAllowedError + type: object + required: + - code + - message + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: NotAllowed + message: + type: string + example: Status not allowed. + path: + type: string + example: /status + _links: + type: object + example: {} + MassPaymentItem: + title: MassPaymentItem + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/mass-payment-items/c1c7d293-63ec-e511-80df-0aa34a9b2388 + mass-payment: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/mass-payments/eb467252-808c-4bc0-b86f-a5cd01454563 + destination: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/funding-sources/b442c936-1f87-465d-a4e2-a982164b26bd + transfer: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/transfers/fa3999db-41ed-e511-80df-0aa34a9b2388 + id: + type: string + example: 2f845bc9-41ed-e511-80df-0aa34a9b2388 + status: + type: string + example: success + amount: + type: object + properties: + value: + type: string + example: '1.00' + currency: + type: string + example: USD + metadata: + type: object + properties: + item1: + type: string + example: item1 + processingChannel: + type: object + properties: + destination: + type: string + example: real-time-payments + Label: + title: Label + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 7e042ffe-e25e-40d2-b86e-748b98845ecc + created: + type: string + format: date-time + example: '2022-05-15T22:19:09.635Z' + amount: + type: object + properties: + value: + type: string + example: '10.00' + currency: + type: string + example: USD + Labels: + title: Labels + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + labels: + type: array + items: + $ref: '#/components/schemas/Label' + total: + type: integer + example: 100 + LabelLedgerEntry: + title: LabelLedgerEntry + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 32d68709-62dd-43d6-a6df-562f4baec526 + amount: + type: object + properties: + value: + type: string + example: '-5.00' + currency: + type: string + example: USD + created: + type: string + format: date-time + example: '2019-05-16T01:54:58.062Z' + LabelLedgerEntries: + title: LabelLedgerEntries + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + ledger-entries: + type: array + items: + $ref: '#/components/schemas/LabelLedgerEntry' + total: + type: integer + example: 100 + Event: + title: Event + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: 81f6e13c-557c-4449-9331-da5c65e61095 + created: + type: string + format: date-time + example: '2015-10-16T15:37:02.000Z' + topic: + type: string + example: customer_transfer_created + resourceId: + type: string + example: 09A166BC-1B74-E511-80DB-0AA34A9B2388 + Events: + title: Events + type: object + properties: + _links: + type: object + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + events: + type: array + items: + $ref: '#/components/schemas/Event' + total: + type: integer + format: int32 + example: 3 + WebhookSubscription: + title: WebhookSubscription + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/077dfffb-4852-412f-96b6-0fe668066589 + webhooks: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/077dfffb-4852-412f-96b6-0fe668066589/webhooks + id: + type: string + example: 077dfffb-4852-412f-96b6-0fe668066589 + url: + type: string + example: http://myapplication.com/webhooks + paused: + type: boolean + example: true + created: + type: string + format: date-time + example: '2022-10-28T16:20:47+00:00' + InvalidUrlFormatError: + title: InvalidUrlFormatError + type: object + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Url must be a valid url. + path: + type: string + example: /url + _links: + type: object + example: {} + SecretTooLongError: + title: SecretTooLongError + type: object + properties: + code: + type: string + example: ValidationError + message: + type: string + example: Validation error(s) present. See embedded errors list for more details. + _embedded: + type: object + properties: + errors: + type: array + items: + type: object + properties: + code: + type: string + example: InvalidFormat + message: + type: string + example: Secret must be 128 or fewer characters. + path: + type: string + example: /secret + _links: + type: object + example: {} + MaxSubscriptionsReachedError: + title: MaxSubscriptionsReachedError + type: object + properties: + code: + type: string + example: MaxNumberOfResources + message: + type: string + example: The maximum number of subscriptions has been reached. + TooManyRequestsError: + title: TooManyRequestsError + type: object + properties: + code: + type: string + example: Too Many Requests + message: + type: string + example: Please wait a short period of time before re-attempting the request. + Webhook: + title: Webhook + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8 + subscription: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhook-subscriptions/a0943041-7a5c-4e8f-92de-b55711ef3a83 + retry: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries + event: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/events/03c7e14c-7f15-44a2-bcf7-83f2f7e95d50 + id: + type: string + example: 9ece9660-aa34-41eb-80d7-0125d53b45e8 + topic: + type: string + example: transfer_created + accountId: + type: string + example: ca32853c-48fa-40be-ae75-77b37504581b + eventId: + type: string + example: 03c7e14c-7f15-44a2-bcf7-83f2f7e95d50 + subscriptionId: + type: string + example: a0943041-7a5c-4e8f-92de-b55711ef3a83 + attempts: + type: array + items: + type: object + properties: + id: + type: string + example: d4d16621-c6b0-40cb-8dc3-0469fa9dc4e8 + request: + type: object + properties: + timestamp: + type: string + format: date-time + example: '2022-10-27T17:07:34.304Z' + url: + type: string + example: https://myapp.runscope.net + headers: + type: array + items: + type: object + properties: + name: + type: string + example: X-Dwolla-Topic + value: + type: string + example: transfer_created + body: + type: string + example: id:03c7e14c-7f15-44a2-bcf7-83f2f7e95d50resourceId:81BA6F36-CD7C-E511-80DB-0AA34A9B2388topic:transfer_createdtimestamp:2022-10-27T17:07:34.207Z_links:self:href:https://api.dwolla.com/events/03c7e14c-7f15-44a2-bcf7-83f2f7e95d50account:href:https://api.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581bresource:href:https://api.dwolla.com/transfers/81BA6F36-CD7C-E511-80DB-0AA34A9B2388 + response: + type: object + properties: + timestamp: + type: string + format: date-time + example: '2022-10-27T17:07:34.308Z' + headers: + type: array + items: + type: object + properties: + name: + type: string + example: Date + value: + type: string + example: Tue 27 Oct 2022 17:07:34 GMT + statusCode: + type: integer + format: int32 + example: 200 + body: + type: string + example: body:id:03c7e14c-7f15-44a2-bcf7-83f2f7e95d50resourceId:81BA6F36-CD7C-E511-80DB-0AA34A9B2388topic:transfer_createdtimestamp:2022-10-27T17:07:34.207Z_links:self:href:https://api.dwolla.com/events/03c7e14c-7f15-44a2-bcf7-83f2f7e95d50account:href:https://api.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581bresource:href:https://api.dwolla.com/transfers/81BA6F36-CD7C-E511-80DB-0AA34A9B2388files:[]form:fragment:headers:Connection:[close]Content-Length:[453]Content-Type:[application/json; charset=UTF-8]Host:[myapp.runscope.net]User-Agent:[dwolla-webhooks/1.0]X-Dwolla-Topic:[transfer_created]X-Request-Signature:[bd93780bd7e1ad77ab821094aaa0f9e3dece5ee3]host:myapp.runscope.netmethod:POSTparams:path:/region:us5runscope_host:prod078.runscope.inscheme:httpssource:capturesource_ip:52.24.10.184timestamp:1.4459656543078682e+09url:https://myapp.runscope.net/ + WebhookRetries: + title: WebhookRetries + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries + _embedded: + type: object + properties: + retries: + type: array + items: + type: object + properties: + _links: + type: object + properties: + self: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8/retries/5aa27a0f-cf99-418d-a3ee-67c0ff99a494 + webhook: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/webhooks/9ece9660-aa34-41eb-80d7-0125d53b45e8 + id: + type: string + example: 5aa27a0f-cf99-418d-a3ee-67c0ff99a494 + timestamp: + type: string + format: date-time + example: '2022-11-02T17:43:26.000Z' + total: + type: integer + format: int32 + example: 1 + SandboxSimulationVirtualTransferItem: + title: SandboxSimulationVirtualTransferItem + description: One simulated external (VAN) transfer in a sandbox-simulations request. + type: object + required: + - _link + - amount + properties: + _link: + type: object + description: Link wrapper for the destination funding source (Dwolla HAL-style single link). + required: + - destination + properties: + destination: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api-sandbox.dwolla.com/funding-sources/5880e310-675a-4ce3-87d9-a475cc565e09 + amount: + $ref: '#/components/schemas/TransferAmount' + SandboxSimulationVirtualAccountTransfersRequest: + title: SandboxSimulationVirtualAccountTransfersRequest + description: | + Simulate Virtual Account Number (VAN) / external transfers in Sandbox. Up to 10 transfers per request; + transfers are created and processed immediately. Successful response is 202 Accepted. + type: object + required: + - type + - transfers + properties: + type: + type: string + const: virtual + description: Must be set to virtual for VAN transfer simulation. + transfers: + type: array + description: Transfers to simulate (max 10 per request). + minItems: 1 + maxItems: 10 + items: + $ref: '#/components/schemas/SandboxSimulationVirtualTransferItem' + SandboxSimulationCustomerVerificationRequest: + title: SandboxSimulationCustomerVerificationRequest + description: | + Simulate a verification directive for a business Verified Customer in Sandbox. The customer must be in + `retry` or `document` status. After a successful call, retrieve the Customer resource; the given `errorCode` + appears under `_embedded.errors`. See Dwolla documentation for verification directive meanings. + type: object + required: + - type + - _links + - errorCode + properties: + type: + type: string + const: customer-verification + description: Must be set to customer-verification for verification directive simulation. + _links: + type: object + required: + - customer + properties: + customer: + type: object + required: + - href + properties: + href: + type: string + format: uri + description: URL of the Sandbox customer to attach the simulated directive to. + example: https://api-sandbox.dwolla.com/customers/00000000-0000-0000-0000-000000000000 + errorCode: + type: string + description: Verification directive to simulate for the linked customer. + enum: + - PersonalIDRequired + - POBoxNotAllowed + - AddressNotAssociatedWithBusiness + - EINDocumentRequired + example: AddressNotAssociatedWithBusiness + SandboxSimulationBankProcessingRequest: + title: SandboxSimulationBankProcessingRequest + description: | + Omit the request body or send an empty JSON object (`{}`). Triggers processing (or failure) for the last + 500 bank transfers on the authorized application or Sandbox account, and initiated micro-deposits. + Successful response is 200 with a HAL body including total. + type: object + additionalProperties: false + SandboxSimulationRequest: + title: SandboxSimulationRequest + description: | + Bank transfer processing (omit body or `{}`), VAN transfer simulation (`type` virtual + transfers), or + verification directive simulation (`type` customer-verification, customer link, and errorCode). Typed bodies + are mutually exclusive; use only an omitted body or `{}` for bank processing. + oneOf: + - $ref: '#/components/schemas/SandboxSimulationVirtualAccountTransfersRequest' + - $ref: '#/components/schemas/SandboxSimulationCustomerVerificationRequest' + - $ref: '#/components/schemas/SandboxSimulationBankProcessingRequest' + SandboxSimulationBankProcessingResponse: + title: SandboxSimulationBankProcessingResponse + description: Response when simulating bank transfer processing (200 OK). + type: object + required: + - _links + - total + properties: + total: + type: integer + format: int32 + example: 8 + description: Count of bank transfers (and related items) affected by the simulation run. + _links: + type: object + required: + - self + properties: + self: + $ref: '#/components/schemas/HalLink' + SandboxSimulationCustomerVerificationResponse: + title: SandboxSimulationCustomerVerificationResponse + description: | + Response when simulating customer verification directives (200 OK). Echoes the simulated `errorCode`; + retrieve the Customer resource to inspect `_embedded.errors`. + type: object + required: + - _links + - errorCode + properties: + _links: + type: object + required: + - self + properties: + self: + $ref: '#/components/schemas/HalLink' + errorCode: + type: string + description: Verification directive that was simulated. + enum: + - PersonalIDRequired + - POBoxNotAllowed + - AddressNotAssociatedWithBusiness + - EINDocumentRequired + example: AddressNotAssociatedWithBusiness + ExchangePartner: + title: ExchangePartner + type: object + required: + - _links + - id + - name + - status + - created + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + name: + type: string + enum: + - MX + - Plaid + - Flinks + - Finicity + - Checkout.com + example: Plaid + status: + type: string + enum: + - active + example: active + created: + type: string + format: date-time + example: '2022-07-23T00:18:21.419Z' + ExchangePartners: + title: ExchangePartners + type: object + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + properties: + exchange-partners: + type: array + items: + $ref: '#/components/schemas/ExchangePartner' + total: + type: integer + format: int32 + example: 3 + Exchange: + title: Exchange + type: object + required: + - _links + - id + - status + - created + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + id: + type: string + example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e + status: + type: string + enum: + - active + - deactivated + - removed + example: active + created: + type: string + format: date-time + example: '2022-07-23T00:18:21.419Z' + Exchanges: + title: Exchanges + type: object + required: + - _links + - _embedded + - total + properties: + _links: + additionalProperties: + $ref: '#/components/schemas/HalLink' + _embedded: + type: object + required: + - exchanges + properties: + exchanges: + type: array + items: + $ref: '#/components/schemas/Exchange' + total: + type: integer + format: int32 + example: 3 + CreateFinicitySecureExchange: + title: CreateFinicitySecureExchange + type: object + required: + - _links + - finicity + properties: + _links: + type: object + properties: + exchange-partner: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 + finicity: + type: object + properties: + profile: + type: integer + format: int32 + example: 3 + version: + type: string + example: '1' + receiptId: + type: string + example: cr_4N47ou7SlppuIxq0ZUtACh10vYcloY + receiptVersion: + type: string + example: '1' + customerId: + type: string + example: '5454874858510164117' + partnerId: + type: integer + format: int64 + example: 2445583946651 + products: + type: array + items: + type: object + properties: + product: + type: string + example: moneyTransferDetails + accountId: + type: string + example: '1015199035827334916' + accessPeriod: + type: object + properties: + type: + type: string + example: timeframe + startTime: + type: string + format: date + example: '2022-07-06' + endTime: + type: string + format: date-time + example: '2022-08-16T06:06:20Z' + timestamp: + type: string + format: date-time + example: '2022-07-11T06:06:23Z' + CreateTokenBasedExchange: + title: CreateTokenBasedExchange + description: Create an exchange using a token. Supports MX, Plaid, and Flinks secure exchange flows, and Checkout.com for Push to Card (debit card). + type: object + required: + - _links + - token + properties: + _links: + type: object + required: + - exchange-partner + properties: + exchange-partner: + type: object + properties: + href: + type: string + example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 + token: + type: string + description: Connection or processor token from the exchange partner (e.g., Plaid, MX, Flinks), or payment ID (pay_xxx) from Checkout.com Flow for Push to Card + example: sandbox-token-abc123 + InvalidExchangeToken: + title: InvalidExchangeToken + type: object + required: + - code + - message + properties: + code: + type: string + example: InvalidExchangeToken + message: + type: string + example: Exchange token is expired. + InvalidExchange: + title: InvalidExchange + type: object + required: + - code + - message + properties: + code: + type: string + example: InvalidExchange + message: + type: string + example: The exchange is no longer active. + CreateMXOpenBankingExchange: + title: CreateMXOpenBankingExchange + type: object + required: + - _links + - mx + properties: + _links: + type: object + required: + - exchange-partner + properties: + exchange-partner: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22 + mx: + type: object + required: + - availableConnectionToken + properties: + availableConnectionToken: + type: string + description: The MX connection token for the available connection + example: eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0= + CreatePlaidOpenBankingExchange: + title: CreatePlaidOpenBankingExchange + type: object + required: + - _links + - plaid + properties: + _links: + type: object + required: + - exchange-partner + properties: + exchange-partner: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef + plaid: + type: object + required: + - publicToken + properties: + publicToken: + type: string + description: The Plaid public token for the connection + example: public-production-d5456acb-01d5-4932-9783-e4c883cf1c0c + CreateCustomerExchangeSessionWithRedirect: + title: CreateCustomerExchangeSessionWithRedirect + description: Create exchange session with redirect URL (required for mobile sessions with Plaid) + type: object + required: + - _links + properties: + _links: + type: object + required: + - exchange-partner + - redirect-url + properties: + exchange-partner: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 + redirect-url: + type: object + required: + - href + properties: + href: + type: string + format: uri + description: | + Required for Plaid mobile sessions. + For Android: use app URI scheme (e.g., com.example.app123) + For iOS: use HTTPS URL (e.g., https://example.com/app123) + example: https://example.com/app123 + CreateCustomerExchangeSessionForWeb: + title: CreateCustomerExchangeSessionForWeb + description: Create exchange session for web (MX and Plaid web sessions where redirect-url is not required) + type: object + required: + - _links + properties: + _links: + type: object + required: + - exchange-partner + properties: + exchange-partner: + type: object + required: + - href + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 + ExchangeSession: + title: ExchangeSession + description: | + Details of a previously created exchange session. Response shape varies by exchange partner. + - **MX**: includes `_links.external-provider-session.href` (redirect URL). + - **Plaid**: includes `externalProviderSessionToken` (Link initialization token). + - **Checkout.com**: includes `externalProviderSessionData` (payment session for Flow/debit card capture). + type: object + required: + - created + - _links + properties: + created: + type: string + format: date-time + example: '2024-03-25T17:13:38.430Z' + _links: + type: object + required: + - self + - exchange-partner + properties: + self: + type: object + required: + - href + - type + - resource-type + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/exchange-sessions/9b7fb629-0fad-44f4-8c5e-44c25a0bfa8e + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: exchange-sessions + exchange-partner: + type: object + required: + - href + - type + - resource-type + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: exchange-partner + external-provider-session: + type: object + required: + - href + - type + - resource-type + properties: + href: + type: string + format: uri + description: | + Present for MX exchange sessions. + Contains the URL to redirect the user to complete the authorization process. + example: https://www.mx.com/connect/lAfkc7m897s3t1ks9mmwyj4ry7Zq0xql4grzAg1kz77x7c9jrwls1t22w6xt8d2lsxx9zpqv30js3wswfdwcrpAsqgbAfkqwpksp7c2chsx167xy90Asfc67dkj9y48y8p142xw3yp4x5l9t9gkk6m3yk5vwsvyq2qq7w9trszxwdl14lmkg7l6949bn5n41chdkbnxycy40n9b6fkbdwl6qt5wl107k1x8srvlkpz325p412x9tkyA5clf39109lsfrgz2lkgsvntqf7l0zzwb5hl658gdjbxwhb52krwybnbdAqfq69cdy54l05jkvfwyf01q89x48jtgtx290lzjdfcty1lwb8d648wns/eyJ1aV9tZXNzYWdlX3ZlcnNpb24iOjQsInVpX21lc3NhZ2Vfd2Vidmlld191cmxfc2NoZW1lIjoibXgiLCJtb2RlIjoidmVyaWZpY2F0aW9uIn0%3D + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: text/html + externalProviderSessionToken: + type: string + description: | + Present for Plaid exchange sessions. + Contains the token to initialize the Plaid Link flow. + example: link-production-b41e8ed3-0874-4c64-b07d-a77088979d5f + externalProviderSessionData: + type: object + description: | + Present for Checkout.com exchange sessions (Push to Card / debit card flow). + Use these fields to initialize the Checkout.com Flow component for card capture. + properties: + id: + type: string + description: Checkout.com payment session ID (e.g. ps_xxx). + example: ps_39vhHjFxZuJRKOw5Hexbnv39fC7 + payment_session_secret: + type: string + description: Checkout.com payment session secret. + example: pss_2400dd88-171d-4a9c-bebf-e06b56d59bb6 + payment_session_token: + type: string + description: Checkout.com payment session token (base64) for Flow initialization. + example: YmFzZTY0:eyJpZCI6InBzXzM5dmhIakZ4WnVKUktPdzVIZXhibnYzOWZDNyIs... + CreateReAuthExchangeSessionForWeb: + title: CreateReAuthExchangeSessionForWeb + description: Create re-auth exchange session for web (Plaid web sessions where request body is optional) + type: object + properties: {} + CreateReAuthExchangeSessionWithRedirect: + title: CreateReAuthExchangeSessionWithRedirect + description: Create re-auth exchange session with redirect URL (required for mobile sessions with Plaid) + type: object + required: + - _links + properties: + _links: + type: object + required: + - redirect-url + properties: + redirect-url: + type: object + required: + - href + properties: + href: + type: string + format: uri + description: | + Required for Plaid mobile sessions. + For Android: use app URI scheme (e.g., com.example.app123) + For iOS: use HTTPS URL (e.g., https://example.com/app123) + example: https://example.com/app123 + AvailableExchangeConnections: + type: object + required: + - _links + - _embedded + properties: + _links: + type: object + required: + - self + - customers + properties: + self: + type: object + required: + - href + - type + - resource-type + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694/available-exchange-connections + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: customer + customers: + type: object + required: + - href + - type + - resource-type + properties: + href: + type: string + format: uri + example: https://api.dwolla.com/customers/1b54c81a-261f-4779-bb57-9405e6e00694 + type: + type: string + example: application/vnd.dwolla.v1.hal+json + resource-type: + type: string + example: customer + _embedded: + type: object + required: + - available-exchange-connections + properties: + available-exchange-connections: + type: array + items: + type: object + required: + - availableConnectionToken + - name + properties: + availableConnectionToken: + type: string + description: Token representing the external bank account that can be used to create a funding source + example: eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0= + name: + type: string + description: Name of the external bank account + example: XYZ Checking + headers: + Location: + description: The location of the created resource + schema: + type: string diff --git a/openapi.yml b/openapi.yml index 165b661..09823a7 100644 --- a/openapi.yml +++ b/openapi.yml @@ -4366,7 +4366,7 @@ paths: tags: - transfers summary: Initiate a transfer - description: Initiate a transfer between funding sources from a Dwolla Account or API Customer resource. Supports ACH, Instant Payments (RTP/FedNow), Push-to-Debit Card, and wire transfers with optional expedited clearing, facilitator fees, metadata, and correlation IDs for enhanced traceability. Includes idempotency key support to prevent duplicate transfers and extensive customization options for addenda records and processing channels. Returns the location of the created transfer resource for tracking and management. + description: Initiate a transfer between funding sources from a Dwolla Account or API Customer resource. Supports ACH, Instant Payments (RTP/FedNow), Push-to-Debit Card, and wire transfers with optional expedited clearing, facilitator fees, metadata, and correlation IDs for enhanced traceability. Includes idempotency key support to prevent duplicate transfers and extensive customization options for addenda records, optional ACH Company Entry Description (CED) on bank statements, and processing channels. Returns the location of the created transfer resource for tracking and management. operationId: initiateTransfer x-speakeasy-name-override: create x-codeSamples: @@ -4742,6 +4742,21 @@ paths: source: type: object properties: + companyEntryDescription: + type: string + x-internal: true + description: | + Optional custom Company Entry Description (CED) for the source ACH entry, up to 10 characters. Appears on the bank statement to briefly describe the transaction purpose. Values are not limited to the examples below. + maxLength: 10 + example: PURCHASE + examples: + - PURCHASE + - INVOICE + - LOANPYMT + - REFUND + - PAYROLL + - DEPOSIT + - GIFTCARD addenda: type: object properties: @@ -4752,6 +4767,21 @@ paths: destination: type: object properties: + companyEntryDescription: + type: string + x-internal: true + description: | + Optional custom Company Entry Description (CED) for the destination ACH entry, up to 10 characters. Appears on the bank statement to briefly describe the transaction purpose. Values are not limited to the examples below. + maxLength: 10 + example: PAYROLL + examples: + - PURCHASE + - INVOICE + - LOANPYMT + - REFUND + - PAYROLL + - DEPOSIT + - GIFTCARD addenda: type: object properties: @@ -10464,9 +10494,11 @@ components: example: John Doe companyEntryDescription: type: string - description: Describes the purpose of the transaction - example: PAYMENT - enum: + x-internal: true + description: | + Describes the purpose of the transaction as shown on the bank statement (typically up to 10 characters). Values are not limited to the examples below. + example: PURCHASE + examples: - REVERSAL - RECLAIM - NO CHECK @@ -10521,9 +10553,11 @@ components: example: Jane Smith companyEntryDescription: type: string - description: Describes the purpose of the transaction - example: PAYMENT - enum: + x-internal: true + description: | + Describes the purpose of the transaction as shown on the bank statement (typically up to 10 characters). Values are not limited to the examples below. + example: PURCHASE + examples: - REVERSAL - RECLAIM - NO CHECK diff --git a/redocly.yaml b/redocly.yaml index 03984fa..be3b369 100644 --- a/redocly.yaml +++ b/redocly.yaml @@ -4,3 +4,11 @@ extends: rules: security-defined: off +apis: + full: + root: specs/spec.yml + public: + root: specs/spec.yml + decorators: + remove-x-internal: on + diff --git a/specs/resources/transfers/initiateTransfer.yml b/specs/resources/transfers/initiateTransfer.yml index b671a12..9ea4d87 100644 --- a/specs/resources/transfers/initiateTransfer.yml +++ b/specs/resources/transfers/initiateTransfer.yml @@ -2,7 +2,7 @@ post: tags: - transfers summary: Initiate a transfer - description: Initiate a transfer between funding sources from a Dwolla Account or API Customer resource. Supports ACH, Instant Payments (RTP/FedNow), Push-to-Debit Card, and wire transfers with optional expedited clearing, facilitator fees, metadata, and correlation IDs for enhanced traceability. Includes idempotency key support to prevent duplicate transfers and extensive customization options for addenda records and processing channels. Returns the location of the created transfer resource for tracking and management. + description: Initiate a transfer between funding sources from a Dwolla Account or API Customer resource. Supports ACH, Instant Payments (RTP/FedNow), Push-to-Debit Card, and wire transfers with optional expedited clearing, facilitator fees, metadata, and correlation IDs for enhanced traceability. Includes idempotency key support to prevent duplicate transfers and extensive customization options for addenda records, optional ACH Company Entry Description (CED) on bank statements, and processing channels. Returns the location of the created transfer resource for tracking and management. operationId: initiateTransfer x-speakeasy-name-override: create x-codeSamples: @@ -378,6 +378,23 @@ post: source: type: object properties: + companyEntryDescription: + type: string + x-internal: true + description: > + Optional custom Company Entry Description (CED) for the source ACH entry, up to 10 characters. + Appears on the bank statement to briefly describe the transaction purpose. + Values are not limited to the examples below. + maxLength: 10 + example: PURCHASE + examples: + - PURCHASE + - INVOICE + - LOANPYMT + - REFUND + - PAYROLL + - DEPOSIT + - GIFTCARD addenda: type: object properties: @@ -388,6 +405,23 @@ post: destination: type: object properties: + companyEntryDescription: + type: string + x-internal: true + description: > + Optional custom Company Entry Description (CED) for the destination ACH entry, up to 10 characters. + Appears on the bank statement to briefly describe the transaction purpose. + Values are not limited to the examples below. + maxLength: 10 + example: PAYROLL + examples: + - PURCHASE + - INVOICE + - LOANPYMT + - REFUND + - PAYROLL + - DEPOSIT + - GIFTCARD addenda: type: object properties: diff --git a/specs/schemas/transfers/Transfer.yml b/specs/schemas/transfers/Transfer.yml index d16a9f1..e9a7b8a 100644 --- a/specs/schemas/transfers/Transfer.yml +++ b/specs/schemas/transfers/Transfer.yml @@ -67,9 +67,12 @@ Transfer: example: "John Doe" companyEntryDescription: type: string - description: "Describes the purpose of the transaction" - example: "PAYMENT" - enum: + x-internal: true + description: > + Describes the purpose of the transaction as shown on the bank statement (typically up to 10 characters). + Values are not limited to the examples below. + example: "PURCHASE" + examples: - REVERSAL - RECLAIM - NO CHECK @@ -124,9 +127,12 @@ Transfer: example: "Jane Smith" companyEntryDescription: type: string - description: "Describes the purpose of the transaction" - example: "PAYMENT" - enum: + x-internal: true + description: > + Describes the purpose of the transaction as shown on the bank statement (typically up to 10 characters). + Values are not limited to the examples below. + example: "PURCHASE" + examples: - REVERSAL - RECLAIM - NO CHECK