{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/dwolla/main/json-schema/dwolla-create-customer-funding-source-schema.json", "title": "Create Customer Funding Source", "description": "Parameters for creating customer funding sources using different methods:\n- Bank Account: Traditional method using routing/account numbers\n- Exchange: Using IAV through exchange partners (Plaid, MX, etc.)\n- Virtual Account: Creating Virtual Account Numbers (VANs)\n- Card: Creating debit card funding sources using tokenized card data\n", "x-generated": "2026-10-12", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/dwolla-funding-sources-api-openapi.yml#/components/schemas/CreateCustomerFundingSource", "oneOf": [ { "$ref": "#/$defs/CreateCustomerBankFundingSourceWithAccountNumbers" }, { "$ref": "#/$defs/CreateCustomerBankFundingSourceWithPlaid" }, { "$ref": "#/$defs/CreateCustomerExchangeFundingSource" }, { "$ref": "#/$defs/CreateCustomerVirtualAccountFundingSource" }, { "$ref": "#/$defs/CreateCustomerCardFundingSourceWithExchange" } ], "$defs": { "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." }, "accountNumber": { "type": "string", "description": "The bank account number" }, "bankAccountType": { "type": "string", "enum": [ "checking", "savings", "general-ledger", "loan" ], "description": "Type of bank account" }, "name": { "type": "string", "description": "Arbitrary nickname for the funding source. Must be 50 characters or less." }, "verified": { "type": "boolean", "description": "Use when creating an unverified bank account.", "enum": [ 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" } } } } } } }, "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" }, "bankAccountType": { "type": "string", "enum": [ "checking", "savings" ], "description": "Type of bank account" }, "name": { "type": "string", "description": "Arbitrary nickname for the funding source. Must be 50 characters or less." }, "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" } } } } } } }, "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" } } } } }, "name": { "type": "string", "description": "Arbitrary nickname for the debit card funding source. Must be 50 characters or less." }, "cardDetails": { "type": "object", "required": [ "firstName", "lastName", "billingAddress" ], "properties": { "firstName": { "type": "string", "description": "Cardholder first name" }, "lastName": { "type": "string", "description": "Cardholder last name" }, "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." }, "address2": { "type": "string", "description": "Second line of the street address (optional). Must be 100 characters or less." }, "address3": { "type": "string", "description": "Third line of the street address (optional). Must be 100 characters or less." }, "city": { "type": "string", "description": "City name. Must be 50 characters or less." }, "stateProvinceRegion": { "type": "string", "description": "Two-letter state, province, or region code." }, "country": { "type": "string", "description": "Two-letter country code (ISO 3166-1 alpha-2)" }, "postalCode": { "type": "string", "description": "Postal code or ZIP code" } } } } } } }, "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" } } }, "on-demand-authorization": { "type": "object", "required": [ "href" ], "properties": { "href": { "type": "string", "format": "uri" } } } } }, "bankAccountType": { "type": "string", "enum": [ "checking", "savings" ], "description": "Type of bank account" }, "name": { "type": "string", "description": "Arbitrary nickname for the funding source. Must be 50 characters or less." } } }, "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." }, "type": { "type": "string", "enum": [ "virtual" ], "description": "Type of funding source. Must be set to \"virtual\" for VAN creation." }, "bankAccountType": { "type": "string", "enum": [ "checking" ], "description": "Type of bank account. Must be \"checking\" for Virtual Account Numbers." } } } } }