Dwolla Exchanges API

Operations related to Exchanges

Operations 7

GET /exchange-partners List exchange partners #
GET /exchange-partners/{id} Retrieve exchange partner #
GET /exchanges List exchanges for an account #
POST /exchanges Create an exchange for an account #
GET /exchanges/{id} Retrieve exchange resource #
GET /customers/{id}/exchanges List exchanges for a customer #
POST /customers/{id}/exchanges Create an exchange for a customer #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dwolla-exchanges-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dwolla-exchanges-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Dwolla Exchanges API
  version: '2.0'
  contact:
    name: Dwolla Developer Relations Team
    url: https://developers.dwolla.com
    email: api@dwolla.com
  license:
    name: MIT
    url: https://github.com/Dwolla/dwolla-openapi/blob/master/LICENSE
  termsOfService: https://www.dwolla.com/legal/tos/
  description: 'Operations tagged exchanges across 2 of this provider''s published API definitions: dwolla-exchanges-openapi.yml, dwolla-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.dwolla.com
  description: Production server
- url: https://api-sandbox.dwolla.com
  description: Sandbox server
security:
- clientCredentials: []
tags:
- name: exchanges
  description: Operations related to Exchanges
paths:
  /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\nAccept: application/vnd.dwolla.v1.hal+json\nAuthorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY\n\n...\n\n{\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://api.dwolla.com/exchange-partners\",\n            \"type\": \"application/vnd.dwolla.v1.hal+json\",\n            \"resource-type\": \"exchange-partner\"\n        }\n    },\n    \"_embedded\": {\n        \"exchange-partners\": [\n            {\n                \"_links\": {\n                    \"self\": {\n                        \"href\": \"https://api-sandbox.dwolla.com/exchange-partners/9b55a4b3-34ae-4607-b2d1-622f1eed77f9\",\n                        \"type\": \"application/vnd.dwolla.v1.hal+json\",\n                        \"resource-type\": \"exchange-partner\"\n                    }\n                },\n                \"id\": \"9b55a4b3-34ae-4607-b2d1-622f1eed77f9\",\n                \"name\": \"Finicity\",\n                \"status\": \"active\"\n            },\n            {\n                \"_links\": {\n                    \"self\": {\n                        \"href\": \"https://api-sandbox.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4\",\n                        \"type\": \"application/vnd.dwolla.v1.hal+json\",\n                        \"resource-type\": \"exchange-partner\"\n                    }\n                },\n                \"id\": \"292317ec-e252-47d8-93c3-2d128e037aa4\",\n                \"name\": \"MX\",\n                \"status\": \"active\"\n            }\n        ]\n    },\n    \"total\": 2\n}\n"
      - 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: '<?php

          // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php

          $exchangePartnersApi = new ExchangePartnersApi($apiClient);


          $exchangePartners = $exchangePartnersApi->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'
    servers:
    - url: https://api.dwolla.com
      description: Production server
    - url: https://api-sandbox.dwolla.com
      description: Sandbox server
  /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\nAccept: application/vnd.dwolla.v1.hal+json\nAuthorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY\n\n...\n\n{\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a\",\n            \"type\": \"application/vnd.dwolla.v1.hal+json\",\n            \"resource-type\": \"exchange-partner\"\n        },\n        \"funding-source\": {\n            \"href\": \"https://api.dwolla.com/funding-sources\",\n            \"type\": \"application/vnd.dwolla.v1.hal+json\",\n            \"resource-type\": \"funding-source\"\n        }\n    },\n    \"id\": \"e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a\",\n    \"name\": \"MX\",\n    \"status\": \"active\",\n    \"created\": \"2022-08-30T19:31:59.106Z\"\n}\n"
      - 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: '<?php

          // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php

          $exchangePartnersApi = new ExchangepartnersApi($apiClient);

          $exchangePartnerUrl = "https://api.dwolla.com/exchange-partners/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a";


          $exchangePartner = $exchangePartnersApi->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'
    servers:
    - url: https://api.dwolla.com
      description: Production server
    - url: https://api-sandbox.dwolla.com
      description: Sandbox server
  /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'
    servers:
    - url: https://api.dwolla.com
      description: Production server
    - url: https://api-sandbox.dwolla.com
      description: Sandbox server
  /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\nAccept: application/vnd.dwolla.v1.hal+json\nAuthorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY\n\n...\n\n{\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a\",\n            \"type\": \"application/vnd.dwolla.v1.hal+json\",\n            \"resource-type\": \"exchange\"\n        },\n        \"exchange-partner\": {\n            \"href\": \"https://api.dwolla.com/exchange-partners/9b55a4b3-34ae-4607-b2d1-622f1eed77f9\",\n            \"type\": \"application/vnd.dwolla.v1.hal+json\",\n            \"resource-type\": \"exchange-partner\"\n        }\n    },\n    \"id\": \"e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a\",\n    \"status\": \"active\",\n    \"created\": \"2022-10-21T21:41:03.283Z\"\n}\n"
      - 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: '<?php

          // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php

          $exchangesApi = new ExchangesApi($apiClient);


          $exchangeUrl = "https://api.dwolla.com/exchanges/e5e9f2d3-a96c-4abd-a097-8ec7ae28aa8a";

          $exchange = $exchangesApi->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.
    servers:
    - url: https://api.dwolla.com
      description: Production server
    - url: https://api-sandbox.dwolla.com
      description: Sandbox server
  /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\nAccept: application/vnd.dwolla.v1.hal+json\nAuthorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY\n\n...\n\n{\n    \"_links\": {\n        \"self\": {\n            \"href\": \"https://api-sandbox.dwolla.com/exchanges\",\n            \"type\": \"application/vnd.dwolla.v1.hal+json\",\n            \"resource-type\": \"exchange\"\n        }\n    },\n    \"_embedded\": {\n        \"exchanges\": [\n            {\n                \"_links\": {\n                    \"self\": {\n                        \"href\": \"https://api-sandbox.dwolla.com/exchanges/92822961-3a7f-42c0-b0cc-7ffef05717fa\",\n                        \"type\": \"application/vnd.dwolla.v1.hal+json\",\n                        \"resource-type\": \"exchange\"\n                    },\n                    \"exchange-partner\": {\n                        \"href\": \"https://api-sandbox.dwolla.com/exchange-partners/bca8d065-49a5-475b-a6b4-509bc8504d22\",\n                        \"type\": \"application/vnd.dwolla.v1.hal+json\",\n                        \"resource-type\": \"exchange-partner\"\n                    },\n                    \"funding-sources\": {\n                        \"href\": \"https://api-sandbox.dwolla.com/funding-sources\",\n                        \"type\": \"application/vnd.dwolla.v1.hal+json\",\n                        \"resource-type\": \"funding-source\"\n                    },\n                    \"customer\": {\n                        \"href\": \"https://api-sandbox.dwolla.com/customers/9fc74373-a5c7-40e4-aa59-d5f4c86a24ea\",\n                        \"type\": \"application/vnd.dwolla.v1.hal+json\",\n                        \"resource-type\": \"customer\"\n                    }\n                },\n                \"id\": \"92822961-3a7f-42c0-b0cc-7ffef05717fa\",\n                \"status\": \"active\",\n                \"created\": \"2022-10-19T17:44:44.864Z\"\n            }\n        ]\n    },\n    \"total\": 1\n}\n"
      - 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: '<?php

          // Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php

          $exchangesApi = new ExchangesApi($apiClient);

          $customerUrl = "https://api-sandbox.dwolla.com/customers/176878b8-ecdb-469b-a82b-43ba5e8704b2";


          $exchanges = $exchangesApi->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\nAccept: application/vnd.dwolla.v1.hal+json\nContent-Type: application/vnd.dwolla.v1.hal+json\nAuthorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY\n\n{\n    \"_links\": {\n        \"exchange-partner\": {\n            \"href\": \"https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef\"\n        }\n    },\n    \"token\": \"somePlaidProcessorToken\"\n}\n\nHTTP/1.1 201 Created\nLocation: https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d\n"
      - lang: javascript
        source: "// Using dwolla-v2 - https://github.com/Dwolla/dwolla-v2-node\nvar customerUrl = \"https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980\";\nvar requestBody = {\n  _links: {\n    \"exchange-partner\": {\n      href: \"https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef\",\n    },\n  },\n  token: \"somePlaidProcessorToken\",\n};\n\ndwolla.post(`${customerUrl}/exchanges`, requestBody).then((res) => res.headers.get(\"location\")); // => 'https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d'\n"
      - lang: python
        source: "# Using dwollav2 - https://github.com/Dwolla/dwolla-v2-python\ncustomer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980'\nrequest_body = {\n  '_links': {\n    'exchange-partner': {\n      'href': 'https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef'\n    }\n  },\n  'token': 'somePlaidProcessorToken'\n}\n\nexchange = app_token.post('%s/exchanges' % customer_url, request_body)\nexchange.headers['location'] # => 'https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d'\n"
      - lang: php
        source: "<?php\n// Using dwollaswagger - https://github.com/Dwolla/dwolla-swagger-php\n$exchangesApi = new ExchangesApi($apiClient);\n$customerUrl = \"https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980\";\n\n$exchange = $exchangesApi->createCustomerExchange(new CreateExchangeRequest([\n    \"_links\" => [\n        \"exchange-partner\" => [\n            \"href\" => \"https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef\"\n        ]\n    ],\n    \"token\" => \"somePlaidProcessorToken\"\n]), $customerUrl);\n\n$exchange; # => https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d\n?>\n"
      - lang: ruby
        source: "# Using dwolla_v2 - https://github.com/Dwolla/dwolla-v2-ruby\ncustomer_url = 'https://api.dwolla.com/customers/74a207b2-b7b7-4efa-8bf8-582148e7b980'\nrequest_body = {\n  _links: {\n    'exchange-partner': {\n      href: \"https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef\"\n    }\n  },\n  token: 'somePlaidProcessorToken'\n}\n\nexchange = app_token.post \"#{customer_url}/exchanges\", request_body\nexchange.response_headers[:location] # => \"https://api.dwolla.com/exchanges/fcd15e5f-8d13-4570-a9b7-7fb49e55941d\"\n"
      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'
    servers:
    - url: https://api.dwolla.com
      description: Production server
    - url: https://api-sandbox.dwolla.com
      description: Sandbox server
components:
  schemas:
    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=
    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'
    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
    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
    InvalidExchange:
      ti

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