Dwolla API

Dwolla API from Dwolla — 59 path(s) described in OpenAPI.

OpenAPI Specification

dwolla-openapi.yml Raw ↑
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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            // This example assumes you've already intialized the client. Reference the SDKs page for more information: https://developers.dwolla.com/sdks-tools
            $tokensApi = new DwollaSwagger\TokensApi($apiClient);
            $appToken = $tokensApi->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
            # => #<DwollaV2::Token client=#<DwollaV2::Client id="..." secret="..." environment=:sandbox> 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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            $rootApi = new DwollaSwagger\RootApi($apiClient);

            $root = $rootApi->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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            $accountUrl = 'https://api-sandbox.dwolla.com/accounts/ca32853c-48fa-40be-ae75-77b37504581b';

            $accountsApi = new DwollaSwagger\AccountsApi($apiClient);

            $account = $accountsApi->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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            $fundingApi = new DwollaSwagger\FundingsourcesApi($apiClient);

            $fundingSource = $fundingApi->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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            $fundingApi = new DwollaSwagger\FundingsourcesApi($apiClient);

            $fundingSources = $fundingApi->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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            $transfersApi = new DwollaSwagger\TransfersApi($apiClient);

            $transfers = $transfersApi->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: |
            <?php
            // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php
            $massPaymentsApi = new DwollaSwagger\MasspaymentsApi($apiClient);

            $massPayments = $massPaymentsApi->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 

# --- truncated at 32 KB (603 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dwolla/refs/heads/main/openapi/dwolla-openapi.yml