Weavr Customer Data & Due Diligence API
Manage customer profile data and KYC/KYB due diligence flows for corporates and consumers.
Manage customer profile data and KYC/KYB due diligence flows for corporates and consumers.
openapi: 3.1.0
info:
version: v3
title: Weavr Multi Product BackOffice Access Token Customer Data & Due Diligence API
x-logo:
url: https://storage.googleapis.com/weavr-cdn/weavr_logo-new.png
backgroundColor: '#FFFFFF'
altText: Weavr
description: 'Weavr Multi Back Office API allows you, as an innovator, to perform various back office operations concerning
identities and their instruments, without requiring the users to be logged in.
A token is to be obtained through the `access_token` method, and this will allow relevant operations
to be performed on behalf of this same identity.
'
contact:
name: Weavr
url: https://weavr.io
servers:
- description: Weavr Sandbox Environment
url: https://sandbox.weavr.io/multi/backoffice
tags:
- name: Customer Data & Due Diligence
description: Manage customer profile data and KYC/KYB due diligence flows for corporates and consumers.
paths:
/corporates:
get:
tags:
- Customer Data & Due Diligence
description: Retrieve the details of the logged-in corporate.
summary: Get a corporate
operationId: corporateGet
x-permissions:
- i:corporates:get
responses:
'200':
$ref: '#/components/responses/CorporateResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
patch:
tags:
- Customer Data & Due Diligence
description: "Update the details of the logged-in corporate identity.\n\nThe following Corporate details are verified during due diligence (KYB) and cannot be updated via the API once the Corporate has been verified:\n - Root User Name\n - Root User Surname\n - Root User Email\n - Root User Mobile Country Code\n - Root User Mobile Number\n - Business Address\n - Date of birth\n\n*If these details need to be changed after due diligence is completed, please contact Customer Support to restart the Due Diligence process.*\n"
summary: Update a corporate
operationId: corporateUpdate
x-permissions:
- i:corporates:update
parameters:
- $ref: '#/components/parameters/idempotency-ref'
requestBody:
$ref: '#/components/requestBodies/CorporateUpdateRequest'
responses:
'200':
$ref: '#/components/responses/CorporateResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/CorporateUpdateConflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
/corporates/kyb:
post:
tags:
- Customer Data & Due Diligence
description: 'Corporates need to complete due diligence (KYB) before they can create instruments and perform transactions.
This operation initiates the due diligence process for the logged-in corporate.
Due Diligence is handled by a KYB provider - you will need to embed the KYB UI Component in your application so that the Corporate will be able to perform the KYB process.
To initialise the KYB UI Component, you need a `reference` that is given you in the response of this operation.
'
summary: Start KYB for a corporate
operationId: corporateKybStart
x-permissions:
- i:corporates:kyb_start
responses:
'200':
description: Success
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
required:
- reference
type: object
properties:
reference:
type: string
pattern: ^[0-9]+$
description: The reference required to initialise the KYB UI Component.
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
description: Conflict
content:
application/json:
schema:
type: object
properties:
errorCode:
type: string
enum:
- KYB_ALREADY_APPROVED
- KYB_PERMANENTLY_REJECTED
- KYB_PENDING_REVIEW
- EMAIL_UNVERIFIED
- MANAGED_ONBOARDING_PENDING
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
get:
tags:
- Customer Data & Due Diligence
description: Returns the KYB status for the logged-in corporate.
summary: Get KYB for a corporate
operationId: corporateKybGet
x-permissions:
- i:corporates:kyb_get
responses:
'200':
$ref: '#/components/responses/CorporateKybGetResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
/consumers:
get:
tags:
- Customer Data & Due Diligence
description: Retrieve the details of the logged-in Consumer.
summary: Get a consumer
operationId: consumerGet
x-permissions:
- i:consumers:get
responses:
'200':
$ref: '#/components/responses/ConsumerResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
patch:
tags:
- Customer Data & Due Diligence
description: "Update the details of the logged-in consumer identity.\n\nIf the Consumer root user has already completed KYC, the following details cannot be updated:\n - name\n - surname\n - email\n - mobile Country Code\n - mobile Number\n - date of Birth\n - address\n"
summary: Update a consumer
operationId: consumerUpdate
x-permissions:
- i:consumers:update
requestBody:
$ref: '#/components/requestBodies/ConsumerUpdateRequest'
responses:
'200':
$ref: '#/components/responses/ConsumerResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/ConsumerUpdateConflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
/consumers/kyc:
post:
tags:
- Customer Data & Due Diligence
description: "Consumers need to complete due diligence (KYC) before they can create instruments and fund transaction.\n\nThis operation initiates the due diligence process for the logged-in consumer. \n\nDue Diligence is handled by a KYC provider, you will need to embed the KYC UI Component in your application to show the KYC screens to your users.\n\nTo initialise the KYC UI Component, you need a `reference` that is given to you in the response of this operation.\n"
summary: Start KYC for a consumer
operationId: consumerKycStart
x-permissions:
- i:consumers:kyc_start
requestBody:
$ref: '#/components/requestBodies/ConsumerKycLevelRequest'
responses:
'200':
$ref: '#/components/responses/ConsumerKycStartResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/ConsumerKycStartConflict'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
get:
tags:
- Customer Data & Due Diligence
description: Returns the KYC status for the logged-in consumer.
summary: Get KYC for a consumer
operationId: consumerKycGet
x-permissions:
- i:consumers:kyc_get
responses:
'200':
$ref: '#/components/responses/ConsumerKycGetResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
default:
$ref: '#/components/responses/Error'
security:
- auth_token: []
api-key: []
components:
requestBodies:
ConsumerKycLevelRequest:
content:
application/json:
schema:
type: object
properties:
kycLevel:
$ref: '#/components/schemas/KycLevel'
description: The KYC level that the consumer will be assigned to, which determines the due diligence details that the user will need to provide.
prefillDetails:
description: List of KYC details to be prefilled for the consumer.
type: array
items:
type: object
properties:
name:
type: string
value:
type: string
ConsumerUpdateRequest:
required: true
content:
application/json:
schema:
type: object
properties:
tag:
$ref: '#/components/schemas/Tag'
name:
maxLength: 20
pattern: ^[^0-9~!@#$%^*()_+={}\|:;,<>/?]*$
type: string
description: The first name of the Consumer root user.
surname:
maxLength: 20
pattern: ^[^0-9~!@#$%^*()_+={}\|:;,<>/?]*$
type: string
description: The last name of the Consumer root user.
email:
$ref: '#/components/schemas/Email'
mobile:
$ref: '#/components/schemas/Mobile'
dateOfBirth:
description: Date of birth of the consumer root user.
$ref: '#/components/schemas/Date'
address:
description: Address of the consumer root user.
$ref: '#/components/schemas/AddressWithCountryRequired'
feeGroup:
type: string
description: The fee group which the consumer will be bound to. Do not specify this if you are not using fee groups.
baseCurrency:
$ref: '#/components/schemas/Currency'
occupation:
$ref: '#/components/schemas/Occupation'
sourceOfFunds:
$ref: '#/components/schemas/ConsumerSourceOfFunds'
sourceOfFundsOther:
deprecated: true
type: string
description: Description of source of funds in case `OTHER` was chosen.
placeOfBirth:
type: string
description: The place of birth of the consumer root user.
nationality:
description: Nationality of the consumer root user, in ISO 3166 alpha-2 format.
$ref: '#/components/schemas/Nationality'
resetMobileCounter:
type: boolean
userTag:
description: The tag to be assigned to the root user.
$ref: '#/components/schemas/Tag'
locale:
$ref: '#/components/schemas/UserLocale'
brand:
$ref: '#/components/schemas/Brand'
CorporateUpdateRequest:
required: true
content:
application/json:
schema:
type: object
properties:
tag:
$ref: '#/components/schemas/Tag'
industry:
$ref: '#/components/schemas/Industry'
sourceOfFunds:
$ref: '#/components/schemas/CorporateSourceOfFunds'
sourceOfFundsOther:
type: string
deprecated: true
description: Description of source of funds in case `OTHER` was chosen.
companyBusinessAddress:
$ref: '#/components/schemas/Address'
feeGroup:
type: string
description: The fee group which the Corporate will be bound to. Do not specify this if you are not using fee groups.
baseCurrency:
$ref: '#/components/schemas/Currency'
name:
maxLength: 20
pattern: ^[^0-9~!@#$%^*()_+={}\|:;,<>/?]*$
type: string
description: The first name of the Corporate root user.
surname:
maxLength: 20
pattern: ^[^0-9~!@#$%^*()_+={}\|:;,<>/?]*$
type: string
description: The last name of the Corporate root user.
email:
$ref: '#/components/schemas/Email'
mobile:
$ref: '#/components/schemas/Mobile'
dateOfBirth:
description: Date of birth of the authorised user.
$ref: '#/components/schemas/Date'
resetMobileCounter:
type: boolean
userTag:
description: The tag to be assigned to the root user.
$ref: '#/components/schemas/Tag'
locale:
$ref: '#/components/schemas/UserLocale'
brand:
$ref: '#/components/schemas/Brand'
responses:
ConsumerUpdateConflict:
description: Conflict
content:
application/json:
schema:
type: object
properties:
errorCode:
type: string
enum:
- FEE_GROUP_INVALID
- COUNTRY_INVALID
- CONSUMER_VERIFIED
- EMAIL_NOT_UNIQUE
- MOBILE_OR_COUNTRY_CODE_INVALID
- COUNTRY_UNSUPPORTED
- MOBILE_NO_CHANGE_LIMIT_EXCEEDED
- TOO_FREQUENT_EMAIL_CHANGES
- EMAIL_DOMAIN_NOT_ALLOWED
- MOBILE_CHANGE_NOT_ALLOWED
- TERMINATION_DATE_IN_PAST
InternalServerError:
description: Internal Server Error - There is a problem with the server. Please try again later.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
BadRequestError:
description: Bad Request Error - Your request is invalid.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
type: object
properties:
message:
maxLength: 255
type: string
description: When present helps to identify and fix the problem.
syntaxErrors:
$ref: '#/components/schemas/SyntaxError'
Error:
description: Error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ConsumerKycStartResponse:
description: Success
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
required:
- reference
- kycLevel
type: object
properties:
reference:
type: string
pattern: ^[0-9]+$
description: The reference used to initialise the KYC UI Component.
kycLevel:
$ref: '#/components/schemas/KycLevel'
description: The KYC level assigned to the consumer.
TooManyRequests:
description: Too many requests.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
x-ratelimit-limit:
$ref: '#/components/headers/x-ratelimit-limit'
x-ratelimit-reset:
$ref: '#/components/headers/x-ratelimit-reset'
ServiceUnavailable:
description: Service Unavailable - The requested service is temporarily unavailable. Please try again later.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
NotFound:
description: Not found - The requested resource couldn't be found.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ConsumerKycStartConflict:
description: Conflict
content:
application/json:
schema:
type: object
properties:
errorCode:
type: string
enum:
- KYC_ALREADY_APPROVED
- KYC_PENDING_REVIEW
- KYC_REJECTED
- EMAIL_UNVERIFIED
Forbidden:
description: Forbidden - Access to the requested resource or action is forbidden.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
type: object
properties:
errorCode:
type: string
enum:
- INSUFFICIENT_PERMISSIONS
CorporateResponse:
description: Success
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
$ref: '#/components/schemas/Corporate'
ConsumerResponse:
description: Success
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
$ref: '#/components/schemas/Consumer'
ConsumerKycGetResponse:
description: Success
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
type: object
required:
- fullDueDiligence
- ongoingFullDueDiligence
properties:
fullDueDiligence:
description: The status of the Due Diligence for the consumer.
$ref: '#/components/schemas/KyiStatus'
kycLevel:
description: The customer's level of due diligence.
$ref: '#/components/schemas/KycLevel'
ongoingFullDueDiligence:
description: The status of the ongoing Due Diligence process for the consumer
$ref: '#/components/schemas/KyiStatus'
ongoingKycLevel:
description: The level of due diligence of the ongoing KYC process.
$ref: '#/components/schemas/KycLevel'
Unauthorized:
description: Unauthorized - Your credentials or access token are invalid.
headers:
request-ref:
$ref: '#/components/headers/request-ref'
CorporateUpdateConflict:
description: Conflict
content:
application/json:
schema:
type: object
properties:
errorCode:
type: string
enum:
- FEE_GROUP_INVALID
- COUNTRY_INVALID
- EMAIL_NOT_UNIQUE
- ROOT_USER_ALREADY_VERIFIED
- COUNTRY_UNSUPPORTED
- MOBILE_OR_COUNTRY_CODE_INVALID
- MOBILE_NO_CHANGE_LIMIT_EXCEEDED
- TOO_FREQUENT_EMAIL_CHANGES
- EMAIL_DOMAIN_NOT_ALLOWED
- MOBILE_CHANGE_NOT_ALLOWED
- UNSUPPORTED_CURRENCY
- TERMINATION_DATE_IN_PAST
CorporateKybGetResponse:
description: Success
headers:
request-ref:
$ref: '#/components/headers/request-ref'
content:
application/json:
schema:
type: object
properties:
kybStatus:
description: The effective due diligence status of the logged-in corporate user.
$ref: '#/components/schemas/KyiStatus'
ongoingKybStatus:
description: The ongoing due diligence status of the logged-in corporate user.
$ref: '#/components/schemas/KyiStatus'
schemas:
Brand:
type: string
pattern: ^[a-zA-Z0-9]+$
description: 'Brand identifier used to determine the set of email and SMS user notification templates. Must be alphanumeric, up to 25 characters, and contain no spaces.
'
maxLength: 25
CorporateRootUser:
required:
- id
- email
- name
- surname
- mobile
- active
- emailVerified
- mobileNumberVerified
- companyPosition
type: object
properties:
id:
$ref: '#/components/schemas/IdentityId'
name:
maxLength: 100
type: string
description: First name of the root user.
surname:
maxLength: 100
type: string
description: Last name of the root user.
email:
$ref: '#/components/schemas/Email'
mobile:
$ref: '#/components/schemas/Mobile'
companyPosition:
$ref: '#/components/schemas/CompanyPosition'
active:
type: boolean
description: The state of the root user. If false, then the user will not be able to log in.
emailVerified:
type: boolean
description: Indicates if the root user's email has been verified.
mobileNumberVerified:
type: boolean
description: Indicates if the root user's mobile number has been verified.
dateOfBirth:
description: Date of birth of the authorised user.
$ref: '#/components/schemas/Date'
tag:
$ref: '#/components/schemas/Tag'
locale:
$ref: '#/components/schemas/UserLocale'
brand:
$ref: '#/components/schemas/Brand'
Date:
required:
- year
- month
- day
type: object
properties:
year:
type: integer
format: int32
maximum: 2100
minimum: 1900
month:
type: integer
format: int32
maximum: 12
minimum: 1
day:
type: integer
format: int32
maximum: 31
minimum: 1
Address:
required:
- addressLine1
- city
- postCode
- country
type: object
properties:
addressLine1:
minLength: 1
maxLength: 150
type: string
description: The first line of the address.
addressLine2:
maxLength: 150
type: string
description: The second line of the address.
city:
maxLength: 50
type: string
description: The city of the address.
postCode:
maxLength: 10
pattern: ^[A-Za-z0-9 -]*$
type: string
description: The post code associated with the address.
state:
maxLength: 50
type: string
description: The state of the address.
country:
maxLength: 2
minLength: 2
pattern: ^[A-Z]+$
type: string
description: The country of the address expressed in ISO 3166 alpha-2 format.
Corporate:
required:
- id
- profileId
- rootUser
- company
- ipAddress
- baseCurrency
- creationTimestamp
type: object
properties:
id:
description: The unique identifier of the Corporate Identity.
$ref: '#/components/schemas/IdentityId'
profileId:
$ref: '#/components/schemas/ProfileId'
tag:
$ref: '#/components/schemas/Tag'
rootUser:
description: The root user of the Corporate Identity.
$ref: '#/components/schemas/CorporateRootUser'
company:
required:
- name
- type
- countryOfRegistration
type: object
properties:
name:
maxLength: 100
type: string
description: The registered name of the company.
type:
$ref: '#/components/schemas/CompanyType'
registrationNumber:
maxLength: 20
minLength: 1
type: string
description: The company registration number.
registeredAddress:
$ref: '#/components/schemas/LegalAddress'
businessAddress:
description: The address where the business is based.
$ref: '#/components/schemas/Address'
countryOfRegistration:
maxLength: 2
minLength: 2
pattern: ^[A-Z]+$
type: string
description: The country of company registration in ISO 3166 alpha-2.
incorporatedOn:
description: The company's date of incorporation
$ref: '#/components/schemas/Date'
industry:
$ref: '#/components/schemas/Industry'
sourceOfFunds:
$ref: '#/components/schemas/CorporateSourceOfFunds'
sourceOfFundsOther:
type: string
description: Description of source of funds in case `OTHER` was chosen.
deprecated: true
acceptedTerms:
type: boolean
description: Must be set to *true* to indicate that the root user has accepted the terms and conditions.
ipAddress:
maxLength: 45
minLength: 5
type: string
description: The IP address of the user doing the registration.
baseCurrency:
$ref: '#/components/schemas/Currency'
feeGroup:
type: string
description: Fee groups allow the possibility to charge different fees to users under the same profile. If fee groups are not required, ignore this field.
creationTimestamp:
type: integer
format: int64
description: The time when the Corporate was created, expressed in Epoch timestamp using millisecond precision.
retailQualifier:
type: string
description: Indicates the type of corporate entity based on its retail status.
enum:
- RETAIL
- NON_RETAIL
- UNKNOWN
SyntaxError:
type: object
description: Is returned as part of an HTTP error response whenever a syntax error is detected. A list of the fields together with their syntax error will be provided.
properties:
invalidFields:
type: array
items:
type: object
properties:
params:
type: array
items:
type: string
fieldName:
type: string
error:
type: string
enum:
- REQUIRED
- HAS_TEXT
- REQUIRES
- SIZE
- RANGE
- IN
- NOT_IN
- REGEX
- EXACTLY
- AT_LEAST
- AT_MOST
- ALL_OR_NONE
UserLocale:
type: string
pattern: ^[a-z]{2}(-[A-Z]{2})?$
description: 'BCP47 locale code (e.g. en, en-US). The locale determines which email and SMS user notification templates are used.
'
maxLength: 5
example: en-GB
AddressWithCountryRequired:
required:
- country
type: object
description: The address, with none of the separate fields being set as required.
properties:
addressLine1:
type: string
description: The first line of the address.
addressLine2:
type: string
description: The second line of the address.
city:
type: string
description: The city of the address.
postCode:
maxLength: 10
pattern: ^[A-Za-z0-9 -]*$
type: string
description: The post code associated with the address.
state:
maxLength: 50
type: string
description: The state of the address.
country:
maxLength: 2
minLength: 2
pattern: ^[A-Z]+$
type: string
description: The country of the address expressed in ISO 3166 alpha-2 format.
KycLevel:
deprecated: true
type: string
description: "The KYC level, which determines what KYC information will be requested from the consumer:\n - KYC_LEVEL_1: The most basic level of KYC required. \n - KYC_LEVEL_2: Full due diligence level 2\n"
enum:
- KYC_LEVEL_1
- KYC_LEVEL_2
CorporateSourceOfFunds:
type: string
description: The corporate's source of funds.
deprecated: true
enum:
- LABOUR_CONTRACT
- CIVIL_CONTRACT
- RENT
- FUNDS_FROM_OTHER_AUXILIARY_SOURCES
- SALE_OF_MOVABLE_ASSETS
- SALE_OF_REAL_ESTATE
- ORDINARY_BUSINESS_ACTIVITY
- DIVIDENDS
- LOAN_FROM_FINANCIAL_INSTITUTIONS_CREDIT_UNIONS
- LOAN_FROM_THIRD_PARTIES
- SALE_OF_COMPANY_SHARES_BUSINESS
- OTHER
- DONATION
- INHERITANCE
- ORIGIN_OF_FUNDS_UNKNOWN
KyiStatus:
type: string
enum:
- NOT_STARTED
- INITIATED
- PENDING_REVIEW
- APPROVED
- REJECTED
ConsumerSourceOfFunds:
deprecated: true
type: string
description: The consumer's source of funds.
enum:
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/weavr/refs/heads/main/openapi/weavr-customer-data-due-diligence-api-openapi.yml