From 3b594a20f4c9fc87309f7e9912208ecfaec1d091 Mon Sep 17 00:00:00 2001 From: Shreya Thapa Date: Mon, 17 Nov 2025 09:02:57 -0600 Subject: [PATCH 1/3] Customer creation schema enhancments --- .../customers/createListCustomers.yml | 6 ++ .../customers/retrieveUpdateCustomer.yml | 6 +- specs/schemas/customers/CreateCustomer.yml | 4 + specs/schemas/customers/Customer.yml | 102 +++++++++++++----- specs/schemas/customers/Customers.yml | 2 +- specs/schemas/customers/UpdateCustomer.yml | 10 ++ 6 files changed, 102 insertions(+), 28 deletions(-) diff --git a/specs/resources/customers/createListCustomers.yml b/specs/resources/customers/createListCustomers.yml index 7985a87..82db376 100644 --- a/specs/resources/customers/createListCustomers.yml +++ b/specs/resources/customers/createListCustomers.yml @@ -68,6 +68,12 @@ post: - $ref: '../../schemas/customers/CreateCustomer.yml#/CreateVerifiedSolePropCustomer' - $ref: '../../schemas/customers/CreateCustomer.yml#/CreateVerifiedBusinessCustomerWithController' - $ref: '../../schemas/customers/CreateCustomer.yml#/CreateVerifiedBusinessCustomerWithInternationalController' + discriminator: + propertyName: type + mapping: + receive-only: '../../schemas/customers/CreateCustomer.yml#/CreateReceiveOnlyUser' + unverified: '../../schemas/customers/CreateCustomer.yml#/CreateUnverifiedCustomer' + personal: '../../schemas/customers/CreateCustomer.yml#/CreateVerifiedPersonalCustomer' responses: '201': description: successful operation diff --git a/specs/resources/customers/retrieveUpdateCustomer.yml b/specs/resources/customers/retrieveUpdateCustomer.yml index 5b72a06..8966eda 100644 --- a/specs/resources/customers/retrieveUpdateCustomer.yml +++ b/specs/resources/customers/retrieveUpdateCustomer.yml @@ -50,9 +50,8 @@ get: schema: oneOf: - $ref: '../../schemas/customers/Customer.yml#/UnverifiedCustomer' - - $ref: '../../schemas/customers/Customer.yml#/UnverifiedBusinessCustomer' + - $ref: '../../schemas/customers/Customer.yml#/ReceiveOnlyCustomer' - $ref: '../../schemas/customers/Customer.yml#/VerifiedPersonalCustomer' - - $ref: '../../schemas/customers/Customer.yml#/VerifiedSolePropCustomer' - $ref: '../../schemas/customers/Customer.yml#/VerifiedBusinessCustomer' '403': description: forbidden @@ -160,6 +159,7 @@ post: - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpdateUnverifiedAndReceiveOnly' - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpdateVerifiedPersonal' - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpdateVerifiedBusiness' + - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpgradeToUnverified' - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpgradeToVerifiedPersonal' - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpgradeToVerifiedBusiness' - $ref: '../../schemas/customers/UpdateCustomer.yml#/UpgradeToVerifiedSoleProp' @@ -177,7 +177,7 @@ post: schema: oneOf: - $ref: '../../schemas/customers/Customer.yml#/UnverifiedCustomer' - - $ref: '../../schemas/customers/Customer.yml#/UnverifiedBusinessCustomer' + - $ref: '../../schemas/customers/Customer.yml#/ReceiveOnlyCustomer' - $ref: '../../schemas/customers/Customer.yml#/VerifiedPersonalCustomer' - $ref: '../../schemas/customers/Customer.yml#/VerifiedSolePropCustomer' - $ref: '../../schemas/customers/Customer.yml#/VerifiedBusinessCustomer' diff --git a/specs/schemas/customers/CreateCustomer.yml b/specs/schemas/customers/CreateCustomer.yml index 8708c8a..df51f6c 100644 --- a/specs/schemas/customers/CreateCustomer.yml +++ b/specs/schemas/customers/CreateCustomer.yml @@ -40,6 +40,7 @@ CreateUnverifiedCustomer: - firstName - lastName - email + - type properties: firstName: type: string @@ -50,6 +51,9 @@ CreateUnverifiedCustomer: email: type: string example: accountAdmin@email.com + type: + type: string + const: unverified ipAddress: type: string example: 143.156.7.8 diff --git a/specs/schemas/customers/Customer.yml b/specs/schemas/customers/Customer.yml index ebb6af9..3ed5739 100644 --- a/specs/schemas/customers/Customer.yml +++ b/specs/schemas/customers/Customer.yml @@ -1,7 +1,14 @@ -UnverifiedCustomer: - title: UnverifiedCustomer - description: Shared models between all Customer types +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: @@ -18,12 +25,6 @@ UnverifiedCustomer: email: type: string example: janedoe@mail.com - type: - type: string - example: unverified - status: - type: string - example: unverified correlationId: type: string example: 'CID-abe2bb3d-d2ff-433b-95a3-0debd960ed25' @@ -31,53 +32,69 @@ UnverifiedCustomer: type: string format: date-time example: '2022-10-07T16:46:13.023Z' -UnverifiedBusinessCustomer: - title: UnverifiedBusinessCustomer +UnverifiedCustomer: + title: UnverifiedCustomer + description: Unverified customer - basic customer type with no KYC verification allOf: - - $ref: '#/UnverifiedCustomer' + - $ref: '#/BaseCustomer' - type: object + required: + - type + - status properties: type: type: string - example: receive-only + 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: '#/UnverifiedCustomer' + - $ref: '#/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 -ReceiveOnlyBusinessCustomer: - title: ReceiveOnlyBusinessCustomer - allOf: - - $ref: '#/ReceiveOnlyCustomer' - - type: object - properties: 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: '#/UnverifiedCustomer' + - $ref: '#/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 @@ -96,15 +113,28 @@ VerifiedPersonalCustomer: example: '50309' VerifiedSolePropCustomer: title: VerifiedSolePropCustomer + description: Verified sole proprietorship customer - distinguished from VerifiedBusinessCustomer by businessType=soleProprietorship allOf: - - $ref: '#/UnverifiedCustomer' + - $ref: '#/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 @@ -126,21 +156,36 @@ VerifiedSolePropCustomer: 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: '#/UnverifiedCustomer' + - $ref: '#/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 @@ -171,12 +216,21 @@ VerifiedBusinessCustomer: 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 @@ -210,4 +264,4 @@ VerifiedBusinessCustomer: example: USA stateProvinceRegion: type: string - example: 'IA' + example: 'IA' \ No newline at end of file diff --git a/specs/schemas/customers/Customers.yml b/specs/schemas/customers/Customers.yml index daf6fbc..316ef59 100644 --- a/specs/schemas/customers/Customers.yml +++ b/specs/schemas/customers/Customers.yml @@ -13,7 +13,7 @@ Customers: items: oneOf: - $ref: './Customer.yml#/UnverifiedCustomer' - - $ref: './Customer.yml#/UnverifiedBusinessCustomer' + - $ref: './Customer.yml#/ReceiveOnlyCustomer' - $ref: './Customer.yml#/VerifiedPersonalCustomer' - $ref: './Customer.yml#/VerifiedSolePropCustomer' - $ref: './Customer.yml#/VerifiedBusinessCustomer' diff --git a/specs/schemas/customers/UpdateCustomer.yml b/specs/schemas/customers/UpdateCustomer.yml index 8ed8239..15270e1 100644 --- a/specs/schemas/customers/UpdateCustomer.yml +++ b/specs/schemas/customers/UpdateCustomer.yml @@ -87,6 +87,16 @@ UpdateVerifiedBusiness: 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 From 08292bcbab6ef928613e903beacfa8bb1cbc958b Mon Sep 17 00:00:00 2001 From: Shreya Thapa Date: Mon, 17 Nov 2025 09:29:43 -0600 Subject: [PATCH 2/3] Document and Beneficial Owner schema enhancements --- .../createListBeneficialOwnerDocuments.yml | 9 ++++++ .../documents/createListCustomerDocuments.yml | 9 ++++++ .../beneficial-owners/BeneficialOwner.yml | 14 ++++++++ .../beneficial-owners/BeneficialOwnership.yml | 7 ++++ .../CreateBeneficialOwner.yml | 11 +++++-- specs/schemas/documents/Document.yml | 32 +++++++++++++++++++ specs/schemas/documents/Documents.yml | 8 ++++- 7 files changed, 87 insertions(+), 3 deletions(-) diff --git a/specs/resources/documents/createListBeneficialOwnerDocuments.yml b/specs/resources/documents/createListBeneficialOwnerDocuments.yml index eebaa73..c340a03 100644 --- a/specs/resources/documents/createListBeneficialOwnerDocuments.yml +++ b/specs/resources/documents/createListBeneficialOwnerDocuments.yml @@ -204,9 +204,18 @@ post: 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 diff --git a/specs/resources/documents/createListCustomerDocuments.yml b/specs/resources/documents/createListCustomerDocuments.yml index e19a3b6..502247b 100644 --- a/specs/resources/documents/createListCustomerDocuments.yml +++ b/specs/resources/documents/createListCustomerDocuments.yml @@ -204,9 +204,18 @@ post: 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 diff --git a/specs/schemas/beneficial-owners/BeneficialOwner.yml b/specs/schemas/beneficial-owners/BeneficialOwner.yml index 2f6b3f1..d235178 100644 --- a/specs/schemas/beneficial-owners/BeneficialOwner.yml +++ b/specs/schemas/beneficial-owners/BeneficialOwner.yml @@ -2,6 +2,14 @@ BeneficialOwner: title: BeneficialOwner description: Request body model for a Beneficial Owner type: object + required: + - _links + - id + - firstName + - lastName + - address + - verificationStatus + - created properties: _links: additionalProperties: @@ -11,12 +19,18 @@ BeneficialOwner: example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e firstName: type: string + example: John lastName: type: string + example: Doe address: $ref: '../../schemas/common.yml#/components/schemas/InternationalAddress' verificationStatus: type: string + enum: + - verified + - document + - incomplete example: verified created: type: string diff --git a/specs/schemas/beneficial-owners/BeneficialOwnership.yml b/specs/schemas/beneficial-owners/BeneficialOwnership.yml index ada6909..776dcb0 100644 --- a/specs/schemas/beneficial-owners/BeneficialOwnership.yml +++ b/specs/schemas/beneficial-owners/BeneficialOwnership.yml @@ -1,6 +1,9 @@ BeneficialOwnership: title: BeneficialOwnership type: object + required: + - _links + - status properties: _links: type: object @@ -9,4 +12,8 @@ BeneficialOwnership: $ref: '../../schemas/common.yml#/components/schemas/HalLink' status: type: string + enum: + - uncertified + - certified + - recertify example: uncertified diff --git a/specs/schemas/beneficial-owners/CreateBeneficialOwner.yml b/specs/schemas/beneficial-owners/CreateBeneficialOwner.yml index c078c73..b738e4b 100644 --- a/specs/schemas/beneficial-owners/CreateBeneficialOwner.yml +++ b/specs/schemas/beneficial-owners/CreateBeneficialOwner.yml @@ -1,6 +1,6 @@ CreateUSBeneficialOwner: title: CreateUSBeneficialOwner - description: Create a US Beneficial Owner (identified by SSN) + 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 @@ -11,17 +11,21 @@ CreateUSBeneficialOwner: properties: firstName: type: string + example: John lastName: type: string + example: Doe dateOfBirth: type: string + example: '1980-01-31' address: $ref: '../common.yml#/components/schemas/InternationalAddress' ssn: type: string + example: '123456789' CreateInternationalBeneficialOwner: title: CreateInternationalBeneficialOwner - description: Create an International Beneficial Owner (identified by Passport) + 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 @@ -32,10 +36,13 @@ CreateInternationalBeneficialOwner: properties: firstName: type: string + example: Jane lastName: type: string + example: Smith dateOfBirth: type: string + example: '1985-03-15' address: $ref: '../common.yml#/components/schemas/InternationalAddress' passport: diff --git a/specs/schemas/documents/Document.yml b/specs/schemas/documents/Document.yml index e4c2526..41e9dea 100644 --- a/specs/schemas/documents/Document.yml +++ b/specs/schemas/documents/Document.yml @@ -1,6 +1,14 @@ 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 @@ -9,31 +17,55 @@ Document: $ref: '../../schemas/common.yml#/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 diff --git a/specs/schemas/documents/Documents.yml b/specs/schemas/documents/Documents.yml index 1f77097..2263ad1 100644 --- a/specs/schemas/documents/Documents.yml +++ b/specs/schemas/documents/Documents.yml @@ -1,6 +1,10 @@ Documents: title: Documents type: object + required: + - _links + - _embedded + - total properties: _links: type: object @@ -8,6 +12,8 @@ Documents: $ref: '../common.yml#/components/schemas/HalLink' _embedded: type: object + required: + - documents properties: documents: type: array @@ -15,4 +21,4 @@ Documents: $ref: './Document.yml#/Document' total: type: integer - example: 100 + example: 2 From 692adfba0b32d9dba88a469e00765448a4633d40 Mon Sep 17 00:00:00 2001 From: Shreya Thapa Date: Mon, 17 Nov 2025 15:09:00 -0600 Subject: [PATCH 3/3] bundle + fix warnings --- openapi.yml | 476 +++++++++++++----- .../listCreateExchangesForAccount.yml | 4 +- .../listCreateExchangesForCustomer.yml | 4 +- specs/resources/kba/verifyRetrieveKba.yml | 24 +- .../labels/createListCustomerLabels.yml | 2 +- specs/schemas/customers/CreateCustomer.yml | 24 +- specs/schemas/customers/UpdateCustomer.yml | 34 +- .../exchange-partners/ExchangePartner.yml | 16 +- .../CreateCustomerExchangeSession.yml | 11 +- .../CreateReAuthExchangeSession.yml | 11 +- .../exchange-sessions/ExchangeSession.yml | 4 +- specs/schemas/exchanges/CreateExchange.yml | 67 +-- specs/schemas/exchanges/Exchange.yml | 11 +- specs/schemas/exchanges/Exchanges.yml | 6 + .../schemas/funding-sources/MicroDeposits.yml | 4 +- .../funding-sources/UpdateFundingSource.yml | 4 +- specs/schemas/labels/Label.yml | 2 +- specs/schemas/labels/LabelLedgerEntry.yml | 2 +- .../schemas/mass-payments/MassPaymentItem.yml | 2 +- 19 files changed, 464 insertions(+), 244 deletions(-) diff --git a/openapi.yml b/openapi.yml index 62dc5b8..b2bad9b 100644 --- a/openapi.yml +++ b/openapi.yml @@ -817,6 +817,12 @@ paths: - $ref: '#/components/schemas/CreateVerifiedSolePropCustomer' - $ref: '#/components/schemas/CreateVerifiedBusinessCustomerWithController' - $ref: '#/components/schemas/CreateVerifiedBusinessCustomerWithInternationalController' + discriminator: + propertyName: type + mapping: + receive-only: '#/components/schemas/CreateReceiveOnlyUser' + unverified: '#/components/schemas/CreateUnverifiedCustomer' + personal: '#/components/schemas/CreateVerifiedPersonalCustomer' responses: '201': description: successful operation @@ -911,9 +917,8 @@ paths: schema: oneOf: - $ref: '#/components/schemas/UnverifiedCustomer' - - $ref: '#/components/schemas/UnverifiedBusinessCustomer' + - $ref: '#/components/schemas/ReceiveOnlyCustomer' - $ref: '#/components/schemas/VerifiedPersonalCustomer' - - $ref: '#/components/schemas/VerifiedSolePropCustomer' - $ref: '#/components/schemas/VerifiedBusinessCustomer' '403': description: forbidden @@ -1021,6 +1026,7 @@ paths: - $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' @@ -1038,7 +1044,7 @@ paths: schema: oneOf: - $ref: '#/components/schemas/UnverifiedCustomer' - - $ref: '#/components/schemas/UnverifiedBusinessCustomer' + - $ref: '#/components/schemas/ReceiveOnlyCustomer' - $ref: '#/components/schemas/VerifiedPersonalCustomer' - $ref: '#/components/schemas/VerifiedSolePropCustomer' - $ref: '#/components/schemas/VerifiedBusinessCustomer' @@ -2158,9 +2164,18 @@ paths: 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 @@ -2424,9 +2439,18 @@ paths: 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 @@ -2703,9 +2727,15 @@ paths: application/vnd.dwolla.v1.hal+json: schema: type: object + required: + - _links + - id + - questions properties: _links: type: object + required: + - answer properties: answer: type: object @@ -2726,10 +2756,14 @@ paths: type: array items: type: object + required: + - id + - text + - answers properties: id: type: string - example: 2355953375 + example: '2355953375' text: type: string example: In what county do you currently live? @@ -2737,10 +2771,13 @@ paths: type: array items: type: object + required: + - id + - text properties: id: type: string - example: 2687969295 + example: '2687969295' text: type: string example: Pulaski @@ -2882,13 +2919,16 @@ paths: type: array items: type: object + required: + - questionId + - answerId properties: questionId: type: string - example: 2355953375 + example: '2355953375' answerId: type: string - example: 2687969335 + example: '2687969335' responses: '200': description: created @@ -6388,7 +6428,7 @@ paths: properties: currency: type: string - example: 12.34 + example: '12.34' value: type: string example: USD @@ -8362,9 +8402,7 @@ paths: schema: oneOf: - $ref: '#/components/schemas/CreateFinicitySecureExchange' - - $ref: '#/components/schemas/CreateMXSecureExchange' - - $ref: '#/components/schemas/CreateFlinksSecureExchange' - - $ref: '#/components/schemas/CreatePlaidSecureExchange' + - $ref: '#/components/schemas/CreateTokenBasedExchange' responses: '201': description: Created @@ -8741,10 +8779,8 @@ paths: schema: oneOf: - $ref: '#/components/schemas/CreateFinicitySecureExchange' - - $ref: '#/components/schemas/CreateMXSecureExchange' + - $ref: '#/components/schemas/CreateTokenBasedExchange' - $ref: '#/components/schemas/CreateMXOpenBankingExchange' - - $ref: '#/components/schemas/CreateFlinksSecureExchange' - - $ref: '#/components/schemas/CreatePlaidSecureExchange' - $ref: '#/components/schemas/CreatePlaidOpenBankingExchange' responses: '201': @@ -10123,10 +10159,17 @@ components: total: type: integer example: 100 - UnverifiedCustomer: - title: UnverifiedCustomer - description: Shared models between all Customer types + 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: @@ -10143,12 +10186,6 @@ components: email: type: string example: janedoe@mail.com - type: - type: string - example: unverified - status: - type: string - example: unverified correlationId: type: string example: CID-abe2bb3d-d2ff-433b-95a3-0debd960ed25 @@ -10156,32 +10193,84 @@ components: type: string format: date-time example: '2022-10-07T16:46:13.023Z' - UnverifiedBusinessCustomer: - title: UnverifiedBusinessCustomer + 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/UnverifiedCustomer' + - $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/UnverifiedCustomer' + - $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 @@ -10200,15 +10289,34 @@ components: example: '50309' VerifiedSolePropCustomer: title: VerifiedSolePropCustomer + description: Verified sole proprietorship customer - distinguished from VerifiedBusinessCustomer by businessType=soleProprietorship allOf: - - $ref: '#/components/schemas/UnverifiedCustomer' + - $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 @@ -10230,21 +10338,43 @@ components: 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/UnverifiedCustomer' + - $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 @@ -10275,12 +10405,21 @@ components: 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 @@ -10330,7 +10469,7 @@ components: items: oneOf: - $ref: '#/components/schemas/UnverifiedCustomer' - - $ref: '#/components/schemas/UnverifiedBusinessCustomer' + - $ref: '#/components/schemas/ReceiveOnlyCustomer' - $ref: '#/components/schemas/VerifiedPersonalCustomer' - $ref: '#/components/schemas/VerifiedSolePropCustomer' - $ref: '#/components/schemas/VerifiedBusinessCustomer' @@ -10375,7 +10514,7 @@ components: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -10390,6 +10529,7 @@ components: - firstName - lastName - email + - type properties: firstName: type: string @@ -10400,12 +10540,15 @@ components: 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 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -10442,7 +10585,7 @@ components: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -10463,10 +10606,10 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' ssn: type: string - example: 1234 + example: '1234' dateOfBirth: type: string example: '1980-09-12' @@ -10503,7 +10646,7 @@ components: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -10524,10 +10667,10 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' ssn: type: string - example: 1234 + example: '1234' dateOfBirth: type: string example: '1980-09-12' @@ -10612,7 +10755,7 @@ components: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -10633,7 +10776,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -10727,7 +10870,7 @@ components: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -10748,7 +10891,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -10886,7 +11029,7 @@ components: example: '50309' phone: type: string - example: 5555555555 + example: '5555555555' UpdateVerifiedBusiness: title: UpdateVerifiedBusiness description: Update Verified Business Customer Information (both Sole Proprietorship and Non-Sole Proprietorship) @@ -10900,6 +11043,16 @@ components: 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 @@ -10942,13 +11095,13 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' dateOfBirth: type: string example: '1970-01-01' ssn: type: string - example: 1234 + example: '1234' UpgradeToVerifiedBusiness: title: UpgradeToVerifiedBusiness description: Upgrade Unverified Customer to Verified Business Customer @@ -10994,7 +11147,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' controller: type: object required: @@ -11015,7 +11168,7 @@ components: example: CEO ssn: type: string - example: 6789 + example: '6789' dateOfBirth: type: string example: '1980-01-31' @@ -11042,7 +11195,7 @@ components: example: IA postalCode: type: string - example: 50266 + example: '50266' country: type: string example: US @@ -11098,7 +11251,7 @@ components: example: '1980-01-31' ssn: type: string - example: 6789 + example: '6789' address1: type: string example: 99-99 33rd St @@ -11110,7 +11263,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -11165,13 +11318,13 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' dateOfBirth: type: string example: '1970-01-01' ssn: type: string - example: 1234 + example: '1234' RetryVerifiedBusinessNoController: title: RetryVerifiedBusinessNoController description: Retry Verification for Verified Business Customer where only Business Details need to be retried @@ -11216,7 +11369,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -11274,7 +11427,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' controller: type: object required: @@ -11296,7 +11449,7 @@ components: example: CEO ssn: type: string - example: 123456789 + example: '123456789' dateOfBirth: type: string example: '1980-01-31' @@ -11323,7 +11476,7 @@ components: example: IA postalCode: type: string - example: 50266 + example: '50266' country: type: string example: US @@ -11384,7 +11537,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' controller: type: object required: @@ -11498,7 +11651,7 @@ components: example: '1980-01-31' ssn: type: string - example: 6789 + example: '6789' address1: type: string example: 99-99 33rd St @@ -11510,7 +11663,7 @@ components: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -11574,6 +11727,14 @@ components: title: BeneficialOwner description: Request body model for a Beneficial Owner type: object + required: + - _links + - id + - firstName + - lastName + - address + - verificationStatus + - created properties: _links: additionalProperties: @@ -11583,12 +11744,18 @@ components: 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 @@ -11612,7 +11779,7 @@ components: $ref: '#/components/schemas/BeneficialOwner' CreateUSBeneficialOwner: title: CreateUSBeneficialOwner - description: Create a US Beneficial Owner (identified by SSN) + 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 @@ -11623,17 +11790,21 @@ components: 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) + 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 @@ -11644,10 +11815,13 @@ components: properties: firstName: type: string + example: Jane lastName: type: string + example: Smith dateOfBirth: type: string + example: '1985-03-15' address: $ref: '#/components/schemas/InternationalAddress' passport: @@ -11677,6 +11851,9 @@ components: BeneficialOwnership: title: BeneficialOwnership type: object + required: + - _links + - status properties: _links: type: object @@ -11685,10 +11862,22 @@ components: $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 @@ -11697,37 +11886,65 @@ components: $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 @@ -11735,6 +11952,8 @@ components: $ref: '#/components/schemas/HalLink' _embedded: type: object + required: + - documents properties: documents: type: array @@ -11742,7 +11961,7 @@ components: $ref: '#/components/schemas/Document' total: type: integer - example: 100 + example: 2 MaximumNumberOfResourcesSchema: title: MaximumNumberOfResourcesSchema type: object @@ -12048,10 +12267,10 @@ components: properties: routingNumber: type: string - example: 222222226 + example: '222222226' accountNumber: type: string - example: 123456789 + example: '123456789' bankAccountType: type: string example: checking @@ -12094,7 +12313,7 @@ components: properties: value: type: string - example: 0.02 + example: '0.02' currency: type: string example: USD @@ -12106,7 +12325,7 @@ components: properties: value: type: string - example: 0.03 + example: '0.03' currency: type: string example: USD @@ -14447,7 +14666,7 @@ components: properties: value: type: string - example: 1 + example: '1.00' currency: type: string example: USD @@ -14482,7 +14701,7 @@ components: properties: value: type: string - example: 10 + example: '10.00' currency: type: string example: USD @@ -14518,7 +14737,7 @@ components: properties: value: type: string - example: -5 + example: '-5.00' currency: type: string example: USD @@ -14849,6 +15068,12 @@ components: ExchangePartner: title: ExchangePartner type: object + required: + - _links + - id + - name + - status + - created properties: _links: additionalProperties: @@ -14858,10 +15083,17 @@ components: example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e name: type: string - example: MX + enum: + - MX + - Plaid + - Flinks + - Finicity + example: Plaid status: type: string - example: unverified + enum: + - active + example: active created: type: string format: date-time @@ -14887,6 +15119,11 @@ components: Exchange: title: Exchange type: object + required: + - _links + - id + - status + - created properties: _links: additionalProperties: @@ -14896,7 +15133,11 @@ components: example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e status: type: string - example: unverified + enum: + - active + - deactivated + - removed + example: active created: type: string format: date-time @@ -14904,12 +15145,18 @@ components: 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 @@ -14922,6 +15169,9 @@ components: CreateFinicitySecureExchange: title: CreateFinicitySecureExchange type: object + required: + - _links + - finicity properties: _links: type: object @@ -14941,16 +15191,16 @@ components: example: 3 version: type: string - example: 1 + example: '1' receiptId: type: string example: cr_4N47ou7SlppuIxq0ZUtACh10vYcloY receiptVersion: type: string - example: 1 + example: '1' customerId: type: string - example: 5454874858510164000 + example: '5454874858510164117' partnerId: type: integer format: int64 @@ -14965,7 +15215,7 @@ components: example: moneyTransferDetails accountId: type: string - example: 1015199035827334900 + example: '1015199035827334916' accessPeriod: type: object properties: @@ -14984,24 +15234,9 @@ components: type: string format: date-time example: '2022-07-11T06:06:23Z' - CreateMXSecureExchange: - title: CreateMXSecureExchange - type: object - properties: - _links: - type: object - properties: - exchange-partner: - type: object - properties: - href: - type: string - example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 - token: - type: string - example: someMXProcessorToken - CreateFlinksSecureExchange: - title: CreateFlinksSecureExchange + CreateTokenBasedExchange: + title: CreateTokenBasedExchange + description: Create an exchange using a token. Supports MX, Plaid, and Flinks secure exchange flows. type: object required: - _links @@ -15011,37 +15246,19 @@ components: type: object required: - exchange-partner - properties: - exchange-partner: - type: object - required: - - href - properties: - href: - type: string - format: uri - example: https://api.dwolla.com/exchange-partners/a0b22a57-68df-4450-b507-47c937e64e89 - token: - type: string - description: The Flinks connection token - example: MTExYTFhMWEtMTExMS0xYWExLTExMTEtMTFhMTExYTExMTFhOjIyMmIyYjFiLTIyMjItMmJiMi0yMjIyLTIyYjIyMmIyMjIyYg== - CreatePlaidSecureExchange: - title: CreatePlaidSecureExchange - type: object - properties: - _links: - type: object properties: exchange-partner: type: object properties: href: type: string - example: https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef + example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 token: type: string - example: somePlaidProcessorToken + description: Connection or processor token from the exchange partner + example: sandbox-token-abc123 InvalidExchangeToken: + title: InvalidExchangeToken type: object required: - code @@ -15054,6 +15271,7 @@ components: type: string example: Exchange token is expired. InvalidExchange: + title: InvalidExchange type: object required: - code @@ -15155,12 +15373,11 @@ components: href: type: string format: uri - description: Required for Plaid mobile sessions - examples: - - description: Plaid Android example - value: com.example.app123 - - description: Plaid iOS example - value: https://example.com/app123 + 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) @@ -15245,9 +15462,7 @@ components: description: | Present for MX exchange sessions. Contains the URL to redirect the user to complete the authorization process. - examples: - - description: MX example - value: https://www.mx.com/connect/lAfkc7m897s3t1ks9mmwyj4ry7Zq0xql4grzAg1kz77x7c9jrwls1t22w6xt8d2lsxx9zpqv30js3wswfdwcrpAsqgbAfkqwpksp7c2chsx167xy90Asfc67dkj9y48y8p142xw3yp4x5l9t9gkk6m3yk5vwsvyq2qq7w9trszxwdl14lmkg7l6949bn5n41chdkbnxycy40n9b6fkbdwl6qt5wl107k1x8srvlkpz325p412x9tkyA5clf39109lsfrgz2lkgsvntqf7l0zzwb5hl658gdjbxwhb52krwybnbdAqfq69cdy54l05jkvfwyf01q89x48jtgtx290lzjdfcty1lwb8d648wns/eyJ1aV9tZXNzYWdlX3ZlcnNpb24iOjQsInVpX21lc3NhZ2Vfd2Vidmlld191cmxfc2NoZW1lIjoibXgiLCJtb2RlIjoidmVyaWZpY2F0aW9uIn0%3D + example: https://www.mx.com/connect/lAfkc7m897s3t1ks9mmwyj4ry7Zq0xql4grzAg1kz77x7c9jrwls1t22w6xt8d2lsxx9zpqv30js3wswfdwcrpAsqgbAfkqwpksp7c2chsx167xy90Asfc67dkj9y48y8p142xw3yp4x5l9t9gkk6m3yk5vwsvyq2qq7w9trszxwdl14lmkg7l6949bn5n41chdkbnxycy40n9b6fkbdwl6qt5wl107k1x8srvlkpz325p412x9tkyA5clf39109lsfrgz2lkgsvntqf7l0zzwb5hl658gdjbxwhb52krwybnbdAqfq69cdy54l05jkvfwyf01q89x48jtgtx290lzjdfcty1lwb8d648wns/eyJ1aV9tZXNzYWdlX3ZlcnNpb24iOjQsInVpX21lc3NhZ2Vfd2Vidmlld191cmxfc2NoZW1lIjoibXgiLCJtb2RlIjoidmVyaWZpY2F0aW9uIn0%3D type: type: string example: application/vnd.dwolla.v1.hal+json @@ -15285,12 +15500,11 @@ components: href: type: string format: uri - description: Required for Plaid mobile sessions - examples: - - description: Plaid Android example - value: com.example.app123 - - description: Plaid iOS example - value: https://example.com/app123 + 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: diff --git a/specs/resources/exchanges/listCreateExchangesForAccount.yml b/specs/resources/exchanges/listCreateExchangesForAccount.yml index 49d115c..c69aca5 100644 --- a/specs/resources/exchanges/listCreateExchangesForAccount.yml +++ b/specs/resources/exchanges/listCreateExchangesForAccount.yml @@ -51,9 +51,7 @@ post: schema: oneOf: - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateFinicitySecureExchange' - - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateMXSecureExchange' - - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateFlinksSecureExchange' - - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreatePlaidSecureExchange' + - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateTokenBasedExchange' responses: '201': description: Created diff --git a/specs/resources/exchanges/listCreateExchangesForCustomer.yml b/specs/resources/exchanges/listCreateExchangesForCustomer.yml index 806bc0d..82bf8fd 100644 --- a/specs/resources/exchanges/listCreateExchangesForCustomer.yml +++ b/specs/resources/exchanges/listCreateExchangesForCustomer.yml @@ -218,10 +218,8 @@ post: schema: oneOf: - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateFinicitySecureExchange' - - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateMXSecureExchange' + - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateTokenBasedExchange' - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateMXOpenBankingExchange' - - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreateFlinksSecureExchange' - - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreatePlaidSecureExchange' - $ref: '../../schemas/exchanges/CreateExchange.yml#/CreatePlaidOpenBankingExchange' responses: '201': diff --git a/specs/resources/kba/verifyRetrieveKba.yml b/specs/resources/kba/verifyRetrieveKba.yml index 221bd75..ac0da3e 100644 --- a/specs/resources/kba/verifyRetrieveKba.yml +++ b/specs/resources/kba/verifyRetrieveKba.yml @@ -59,9 +59,15 @@ get: application/vnd.dwolla.v1.hal+json: schema: type: object + required: + - _links + - id + - questions properties: _links: type: object + required: + - answer properties: answer: type: object @@ -82,10 +88,14 @@ get: type: array items: type: object + required: + - id + - text + - answers properties: id: type: string - example: 2355953375 + example: '2355953375' text: type: string example: In what county do you currently live? @@ -93,10 +103,13 @@ get: type: array items: type: object + required: + - id + - text properties: id: type: string - example: 2687969295 + example: '2687969295' text: type: string example: Pulaski @@ -238,13 +251,16 @@ post: type: array items: type: object + required: + - questionId + - answerId properties: questionId: type: string - example: 2355953375 + example: '2355953375' answerId: type: string - example: 2687969335 + example: '2687969335' responses: '200': description: created diff --git a/specs/resources/labels/createListCustomerLabels.yml b/specs/resources/labels/createListCustomerLabels.yml index 423736b..1f0ea20 100644 --- a/specs/resources/labels/createListCustomerLabels.yml +++ b/specs/resources/labels/createListCustomerLabels.yml @@ -202,7 +202,7 @@ post: properties: currency: type: string - example: 12.34 + example: '12.34' value: type: string example: USD diff --git a/specs/schemas/customers/CreateCustomer.yml b/specs/schemas/customers/CreateCustomer.yml index df51f6c..95ef598 100644 --- a/specs/schemas/customers/CreateCustomer.yml +++ b/specs/schemas/customers/CreateCustomer.yml @@ -25,7 +25,7 @@ CreateReceiveOnlyUser: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -59,7 +59,7 @@ CreateUnverifiedCustomer: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -96,7 +96,7 @@ CreateVerifiedPersonalCustomer: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -117,10 +117,10 @@ CreateVerifiedPersonalCustomer: example: NY postalCode: type: string - example: 11101 + example: '11101' ssn: type: string - example: 1234 + example: '1234' dateOfBirth: type: string example: 1980-09-12 @@ -157,7 +157,7 @@ CreateVerifiedSolePropCustomer: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -178,10 +178,10 @@ CreateVerifiedSolePropCustomer: example: NY postalCode: type: string - example: 11101 + example: '11101' ssn: type: string - example: 1234 + example: '1234' dateOfBirth: type: string example: 1980-09-12 @@ -236,7 +236,7 @@ CreateVerifiedBusinessCustomerWithController: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -257,7 +257,7 @@ CreateVerifiedBusinessCustomerWithController: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -337,7 +337,7 @@ CreateVerifiedBusinessCustomerWithInternationalController: example: 143.156.7.8 phone: type: string - example: 5555555555 + example: '5555555555' correlationId: type: string example: fc451a7a-ae30-4404-aB95-e3553fcd733 @@ -358,7 +358,7 @@ CreateVerifiedBusinessCustomerWithInternationalController: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 diff --git a/specs/schemas/customers/UpdateCustomer.yml b/specs/schemas/customers/UpdateCustomer.yml index 15270e1..0254cee 100644 --- a/specs/schemas/customers/UpdateCustomer.yml +++ b/specs/schemas/customers/UpdateCustomer.yml @@ -73,7 +73,7 @@ UpdateVerifiedPersonal: example: '50309' phone: type: string - example: 5555555555 + example: '5555555555' UpdateVerifiedBusiness: title: UpdateVerifiedBusiness description: Update Verified Business Customer Information (both Sole Proprietorship and Non-Sole Proprietorship) @@ -139,13 +139,13 @@ UpgradeToVerifiedPersonal: example: NY postalCode: type: string - example: 11101 + example: '11101' dateOfBirth: type: string example: 1970-01-01 ssn: type: string - example: 1234 + example: '1234' UpgradeToVerifiedBusiness: title: UpgradeToVerifiedBusiness description: Upgrade Unverified Customer to Verified Business Customer @@ -191,7 +191,7 @@ UpgradeToVerifiedBusiness: example: NY postalCode: type: string - example: 11101 + example: '11101' controller: type: object required: @@ -212,7 +212,7 @@ UpgradeToVerifiedBusiness: example: CEO ssn: type: string - example: 6789 + example: '6789' dateOfBirth: type: string example: 1980-01-31 @@ -239,7 +239,7 @@ UpgradeToVerifiedBusiness: example: IA postalCode: type: string - example: 50266 + example: '50266' country: type: string example: US @@ -295,7 +295,7 @@ UpgradeToVerifiedSoleProp: example: 1980-01-31 ssn: type: string - example: 6789 + example: '6789' address1: type: string example: 99-99 33rd St @@ -307,7 +307,7 @@ UpgradeToVerifiedSoleProp: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -362,13 +362,13 @@ RetryVerifiedPersonal: example: NY postalCode: type: string - example: 11101 + example: '11101' dateOfBirth: type: string example: 1970-01-01 ssn: type: string - example: 1234 + example: '1234' RetryVerifiedBusinessNoController: title: RetryVerifiedBusinessNoController description: Retry Verification for Verified Business Customer where only Business Details need to be retried @@ -413,7 +413,7 @@ RetryVerifiedBusinessNoController: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 @@ -471,7 +471,7 @@ RetryVerifiedBusinessWithController: example: NY postalCode: type: string - example: 11101 + example: '11101' controller: type: object required: @@ -493,7 +493,7 @@ RetryVerifiedBusinessWithController: example: CEO ssn: type: string - example: 123456789 + example: '123456789' dateOfBirth: type: string example: 1980-01-31 @@ -520,7 +520,7 @@ RetryVerifiedBusinessWithController: example: IA postalCode: type: string - example: 50266 + example: '50266' country: type: string example: US @@ -581,7 +581,7 @@ RetryVerifiedBusinessWithInternationalController: example: NY postalCode: type: string - example: 11101 + example: '11101' controller: type: object required: @@ -695,7 +695,7 @@ RetryVerifiedSoleProp: example: 1980-01-31 ssn: type: string - example: 6789 + example: '6789' address1: type: string example: 99-99 33rd St @@ -707,7 +707,7 @@ RetryVerifiedSoleProp: example: NY postalCode: type: string - example: 11101 + example: '11101' businessClassification: type: string example: 9ed3f670-7d6f-11e3-b1ce-5404a6144203 diff --git a/specs/schemas/exchange-partners/ExchangePartner.yml b/specs/schemas/exchange-partners/ExchangePartner.yml index 810d389..8dae584 100644 --- a/specs/schemas/exchange-partners/ExchangePartner.yml +++ b/specs/schemas/exchange-partners/ExchangePartner.yml @@ -1,6 +1,12 @@ ExchangePartner: title: ExchangePartner type: object + required: + - _links + - id + - name + - status + - created properties: _links: additionalProperties: @@ -10,10 +16,16 @@ ExchangePartner: example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e name: type: string - example: MX + enum: + - MX + - Plaid + - Flinks + - Finicity + example: Plaid status: type: string - example: unverified + enum: [active] + example: active created: type: string format: date-time diff --git a/specs/schemas/exchange-sessions/CreateCustomerExchangeSession.yml b/specs/schemas/exchange-sessions/CreateCustomerExchangeSession.yml index 663d988..9b98c4a 100644 --- a/specs/schemas/exchange-sessions/CreateCustomerExchangeSession.yml +++ b/specs/schemas/exchange-sessions/CreateCustomerExchangeSession.yml @@ -28,12 +28,11 @@ CreateCustomerExchangeSessionWithRedirect: href: type: string format: uri - description: Required for Plaid mobile sessions - examples: - - description: Plaid Android example - value: com.example.app123 - - description: Plaid iOS example - value: https://example.com/app123 + 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) diff --git a/specs/schemas/exchange-sessions/CreateReAuthExchangeSession.yml b/specs/schemas/exchange-sessions/CreateReAuthExchangeSession.yml index 49a7cf0..be19cf0 100644 --- a/specs/schemas/exchange-sessions/CreateReAuthExchangeSession.yml +++ b/specs/schemas/exchange-sessions/CreateReAuthExchangeSession.yml @@ -18,12 +18,11 @@ CreateReAuthExchangeSessionWithRedirect: href: type: string format: uri - description: Required for Plaid mobile sessions - examples: - - description: Plaid Android example - value: com.example.app123 - - description: Plaid iOS example - value: https://example.com/app123 + 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' CreateReAuthExchangeSessionForWeb: title: CreateReAuthExchangeSessionForWeb description: Create re-auth exchange session for web (Plaid web sessions where request body is optional) diff --git a/specs/schemas/exchange-sessions/ExchangeSession.yml b/specs/schemas/exchange-sessions/ExchangeSession.yml index ef88014..a2532f1 100644 --- a/specs/schemas/exchange-sessions/ExchangeSession.yml +++ b/specs/schemas/exchange-sessions/ExchangeSession.yml @@ -61,9 +61,7 @@ ExchangeSession: description: | Present for MX exchange sessions. Contains the URL to redirect the user to complete the authorization process. - examples: - - description: MX example - value: https://www.mx.com/connect/lAfkc7m897s3t1ks9mmwyj4ry7Zq0xql4grzAg1kz77x7c9jrwls1t22w6xt8d2lsxx9zpqv30js3wswfdwcrpAsqgbAfkqwpksp7c2chsx167xy90Asfc67dkj9y48y8p142xw3yp4x5l9t9gkk6m3yk5vwsvyq2qq7w9trszxwdl14lmkg7l6949bn5n41chdkbnxycy40n9b6fkbdwl6qt5wl107k1x8srvlkpz325p412x9tkyA5clf39109lsfrgz2lkgsvntqf7l0zzwb5hl658gdjbxwhb52krwybnbdAqfq69cdy54l05jkvfwyf01q89x48jtgtx290lzjdfcty1lwb8d648wns/eyJ1aV9tZXNzYWdlX3ZlcnNpb24iOjQsInVpX21lc3NhZ2Vfd2Vidmlld191cmxfc2NoZW1lIjoibXgiLCJtb2RlIjoidmVyaWZpY2F0aW9uIn0%3D + example: 'https://www.mx.com/connect/lAfkc7m897s3t1ks9mmwyj4ry7Zq0xql4grzAg1kz77x7c9jrwls1t22w6xt8d2lsxx9zpqv30js3wswfdwcrpAsqgbAfkqwpksp7c2chsx167xy90Asfc67dkj9y48y8p142xw3yp4x5l9t9gkk6m3yk5vwsvyq2qq7w9trszxwdl14lmkg7l6949bn5n41chdkbnxycy40n9b6fkbdwl6qt5wl107k1x8srvlkpz325p412x9tkyA5clf39109lsfrgz2lkgsvntqf7l0zzwb5hl658gdjbxwhb52krwybnbdAqfq69cdy54l05jkvfwyf01q89x48jtgtx290lzjdfcty1lwb8d648wns/eyJ1aV9tZXNzYWdlX3ZlcnNpb24iOjQsInVpX21lc3NhZ2Vfd2Vidmlld191cmxfc2NoZW1lIjoibXgiLCJtb2RlIjoidmVyaWZpY2F0aW9uIn0%3D' type: type: string example: application/vnd.dwolla.v1.hal+json diff --git a/specs/schemas/exchanges/CreateExchange.yml b/specs/schemas/exchanges/CreateExchange.yml index aaa55b2..eddeae0 100644 --- a/specs/schemas/exchanges/CreateExchange.yml +++ b/specs/schemas/exchanges/CreateExchange.yml @@ -1,6 +1,9 @@ CreateFinicitySecureExchange: title: CreateFinicitySecureExchange type: object + required: + - _links + - finicity properties: _links: type: object @@ -20,16 +23,16 @@ CreateFinicitySecureExchange: example: 3 version: type: string - example: 1 + example: '1' receiptId: type: string example: cr_4N47ou7SlppuIxq0ZUtACh10vYcloY receiptVersion: type: string - example: 1 + example: '1' customerId: type: string - example: 5454874858510164117 + example: '5454874858510164117' partnerId: type: integer format: int64 @@ -44,7 +47,7 @@ CreateFinicitySecureExchange: example: moneyTransferDetails accountId: type: string - example: 1015199035827334916 + example: '1015199035827334916' accessPeriod: type: object properties: @@ -63,12 +66,18 @@ CreateFinicitySecureExchange: type: string format: date-time example: '2022-07-11T06:06:23Z' -CreateMXSecureExchange: - title: CreateMXSecureExchange +CreateTokenBasedExchange: + title: CreateTokenBasedExchange + description: Create an exchange using a token. Supports MX, Plaid, and Flinks secure exchange flows. type: object + required: + - _links + - token properties: _links: type: object + required: + - exchange-partner properties: exchange-partner: type: object @@ -78,7 +87,8 @@ CreateMXSecureExchange: example: https://api.dwolla.com/exchange-partners/292317ec-e252-47d8-93c3-2d128e037aa4 token: type: string - example: someMXProcessorToken + description: Connection or processor token from the exchange partner + example: sandbox-token-abc123 CreateMXOpenBankingExchange: title: CreateMXOpenBankingExchange type: object @@ -109,47 +119,6 @@ CreateMXOpenBankingExchange: type: string description: The MX connection token for the available connection example: eyJhY2NvdW50SWQiOiJBQ1QtMjAxY2FkM2MtYzc2Yi00N2M1LWI3Y2QtMTkxY2FhNzdlZWM5IiwibWVtYmVySWQiOiJNQlItZGNjZWY0ZWMtOGM4MC00NTlmLTlhMGItMTc1ZTA0OTJmZWIzIn0= -CreateFlinksSecureExchange: - title: CreateFlinksSecureExchange - type: object - required: - - _links - - token - properties: - _links: - type: object - required: - - exchange-partner - properties: - exchange-partner: - type: object - required: - - href - properties: - href: - type: string - format: uri - example: https://api.dwolla.com/exchange-partners/a0b22a57-68df-4450-b507-47c937e64e89 - token: - type: string - description: The Flinks connection token - example: MTExYTFhMWEtMTExMS0xYWExLTExMTEtMTFhMTExYTExMTFhOjIyMmIyYjFiLTIyMjItMmJiMi0yMjIyLTIyYjIyMmIyMjIyYg== -CreatePlaidSecureExchange: - title: CreatePlaidSecureExchange - type: object - properties: - _links: - type: object - properties: - exchange-partner: - type: object - properties: - href: - type: string - example: https://api.dwolla.com/exchange-partners/f53ffb32-c84f-496a-9d9d-acd100d396ef - token: - type: string - example: somePlaidProcessorToken CreatePlaidOpenBankingExchange: title: CreatePlaidOpenBankingExchange type: object @@ -181,6 +150,7 @@ CreatePlaidOpenBankingExchange: description: The Plaid public token for the connection example: public-production-d5456acb-01d5-4932-9783-e4c883cf1c0c InvalidExchangeToken: + title: InvalidExchangeToken type: object required: - code @@ -193,6 +163,7 @@ InvalidExchangeToken: type: string example: Exchange token is expired. InvalidExchange: + title: InvalidExchange type: object required: - code diff --git a/specs/schemas/exchanges/Exchange.yml b/specs/schemas/exchanges/Exchange.yml index 09e9751..428cb4d 100644 --- a/specs/schemas/exchanges/Exchange.yml +++ b/specs/schemas/exchanges/Exchange.yml @@ -1,6 +1,11 @@ Exchange: title: Exchange type: object + required: + - _links + - id + - status + - created properties: _links: additionalProperties: @@ -10,7 +15,11 @@ Exchange: example: d3d6b41e-5567-4bc6-9c6e-0efd0a3e647e status: type: string - example: unverified + enum: + - active + - deactivated + - removed + example: active created: type: string format: date-time diff --git a/specs/schemas/exchanges/Exchanges.yml b/specs/schemas/exchanges/Exchanges.yml index 83a02f4..8a4dda8 100644 --- a/specs/schemas/exchanges/Exchanges.yml +++ b/specs/schemas/exchanges/Exchanges.yml @@ -1,12 +1,18 @@ Exchanges: title: Exchanges type: object + required: + - _links + - _embedded + - total properties: _links: additionalProperties: $ref: '../common.yml#/components/schemas/HalLink' _embedded: type: object + required: + - exchanges properties: exchanges: type: array diff --git a/specs/schemas/funding-sources/MicroDeposits.yml b/specs/schemas/funding-sources/MicroDeposits.yml index 9126911..fadc3a0 100644 --- a/specs/schemas/funding-sources/MicroDeposits.yml +++ b/specs/schemas/funding-sources/MicroDeposits.yml @@ -14,7 +14,7 @@ VerifyMicroDeposits: properties: value: type: string - example: 0.02 + example: '0.02' currency: type: string example: USD @@ -26,7 +26,7 @@ VerifyMicroDeposits: properties: value: type: string - example: 0.03 + example: '0.03' currency: type: string example: USD diff --git a/specs/schemas/funding-sources/UpdateFundingSource.yml b/specs/schemas/funding-sources/UpdateFundingSource.yml index a97665c..44d5bd9 100644 --- a/specs/schemas/funding-sources/UpdateFundingSource.yml +++ b/specs/schemas/funding-sources/UpdateFundingSource.yml @@ -7,10 +7,10 @@ UpdateUnverifiedBank: properties: routingNumber: type: string - example: 222222226 + example: '222222226' accountNumber: type: string - example: 123456789 + example: '123456789' bankAccountType: type: string example: checking diff --git a/specs/schemas/labels/Label.yml b/specs/schemas/labels/Label.yml index 6924a95..c4bf4ab 100644 --- a/specs/schemas/labels/Label.yml +++ b/specs/schemas/labels/Label.yml @@ -17,7 +17,7 @@ Label: properties: value: type: string - example: 10.00 + example: '10.00' currency: type: string example: USD diff --git a/specs/schemas/labels/LabelLedgerEntry.yml b/specs/schemas/labels/LabelLedgerEntry.yml index eb94bce..183d554 100644 --- a/specs/schemas/labels/LabelLedgerEntry.yml +++ b/specs/schemas/labels/LabelLedgerEntry.yml @@ -13,7 +13,7 @@ LabelLedgerEntry: properties: value: type: string - example: -5.00 + example: '-5.00' currency: type: string example: USD diff --git a/specs/schemas/mass-payments/MassPaymentItem.yml b/specs/schemas/mass-payments/MassPaymentItem.yml index 401a23d..f2612b0 100644 --- a/specs/schemas/mass-payments/MassPaymentItem.yml +++ b/specs/schemas/mass-payments/MassPaymentItem.yml @@ -40,7 +40,7 @@ MassPaymentItem: properties: value: type: string - example: 1.00 + example: '1.00' currency: type: string example: USD