Skip to main content
Glama

Velo Payments API MCP Server

models.py171 kB
# generated by fastapi-codegen: # filename: openapi.yaml # timestamp: 2025-06-29T11:30:52+00:00 from __future__ import annotations from datetime import date, datetime from enum import Enum from typing import Any, Dict, List, Literal, Optional, Union from uuid import UUID from pydantic import AnyUrl, BaseModel, EmailStr, Field, RootModel, conint, constr class AcceptedPaymentV3(BaseModel): amount: int = Field( ..., description='The amount of the payment in minor units', examples=[10000] ) currencyType: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) paymentMemo: Optional[constr(min_length=0, max_length=40)] = Field( None, description='<p>Any value here will override the memo value in the parent payout</p>\n<p>This should be the reference field on the statement seen by the payee (but not via ACH)</p>\n', examples=['INV00112'], ) paymentMetadata: Optional[constr(min_length=0, max_length=512)] = Field( None, description='<p>Metadata about the payment that may be relevant to the specific rails or remote system making the payout</p>\n<p>The structure of the data will be dictated by the requirements of the payment rails</p>\n', examples=['invoiceeId_123|abc001:12345|xyz002:4567'], ) payorPaymentId: constr(min_length=0, max_length=40) = Field( ..., description='A reference identifier for the payor for the given payee payment', examples=['123211321ABSD'], ) railsId: str = Field( ..., description='Indicates the 3rd party system involved in making this payment', examples=['SVB'], ) remoteId: constr(min_length=1, max_length=100) = Field( ..., description='Your identifier for the payee', examples=['remoteId1234'] ) remoteSystemId: Optional[constr(min_length=1, max_length=100)] = Field( None, description='<p>The identifier for the remote payments system if not Velo</p>\n', examples=['OB012'], ) sourceAccountName: str = Field( ..., description='The identifier of the source account to debit the payment from', examples=['Chase Bank Account'], ) class AccessTokenValidationRequest(BaseModel): otp: constr(min_length=6, max_length=64) = Field( ..., description='an OTP either sent via sms or generated by a registered MFA device', examples=['123456'], ) class AllocationType(RootModel[str]): root: str = Field( ..., description='Funding Allocation Type. One of the following values: AUTOMATIC, MANUAL', ) class AuthResponse(BaseModel): access_token: str = Field(..., examples=['IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk']) entityIds: Optional[List[str]] = None expires_in: Optional[float] = Field(None, examples=[1799]) refresh_token: Optional[str] = Field( None, examples=['IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk'] ) scope: Optional[str] = Field(None, examples=['example_scope']) token_type: str = Field(..., examples=['bearer']) class AutoTopUpConfigV2(BaseModel): enabled: bool = Field( ..., description='Is auto top-up enabled? automatically trigger funding to top-up the source account balance when the balance falls below the configured minimum level.', examples=[True], ) minBalance: Optional[int] = Field( None, description='When the payor balance falls below this level then auto top-up will be triggered. Note - This is in minor units.', examples=[10000], ) targetBalance: Optional[int] = Field( None, description='When the payor balance falls below the min balance then auto top-up will request funds bring the balance to this level. Note - this is in minor units.', examples=[300000], ) class AutoTopUpConfigV3(BaseModel): enabled: bool = Field( ..., description='Is auto top-up enabled? automatically trigger funding to top-up the source account balance when the balance falls below the configured minimum level.', examples=[True], ) fundingAccountId: Optional[UUID] = Field( None, description='Id of funding account from which to pull funds when auto top-up is triggered. Note - if this is not set then auto top-up is effectively disabled.', examples=['640ab1bd-8a6a-4603-a83a-1edbc3ed5689'], ) minBalance: Optional[int] = Field( None, description='When the payor balance falls below this level then auto top-up will be triggered. Note - This is in minor units.', examples=[10000], ) targetBalance: Optional[int] = Field( None, description='When the payor balance falls below the min balance then auto top-up will request funds bring the balance to this level. Note - this is in minor units.', examples=[300000], ) class Category(Enum): payment = 'payment' payee = 'payee' debit = 'debit' class ChallengeV3(BaseModel): description: constr(min_length=1, max_length=255) = Field( ..., examples=['challenge description'] ) value: constr(min_length=3, max_length=20) = Field(..., examples=['challenge test']) class ChallengeV4(BaseModel): description: constr(min_length=1, max_length=255) = Field( ..., examples=['challenge description'] ) value: constr(min_length=3, max_length=20) = Field( ..., description='The value that the user will be asked to verify when they onboard', examples=['11984567'], ) class CompanyV3(BaseModel): name: constr(min_length=3, max_length=40) = Field(..., examples=['ABC Group Plc']) operatingName: Optional[constr(min_length=1, max_length=100)] = Field( None, examples=['ABC Co'] ) taxId: Optional[constr(min_length=6, max_length=30)] = Field( None, description='Company Tax Id must be between 6 and 30 characters long', examples=['123123123'], ) class CompanyV4(BaseModel): name: constr(min_length=3, max_length=40) = Field(..., examples=['ABC Group Plc']) operatingName: Optional[constr(min_length=1, max_length=100)] = Field( None, examples=['ABC Co'] ) taxId: Optional[constr(min_length=6, max_length=30)] = Field( None, description='Company Tax Id must be between 6 and 30 characters long', examples=['123123123'], ) class Type(Enum): FBO = 'FBO' WUBS_DECOUPLED = 'WUBS_DECOUPLED' PRIVATE = 'PRIVATE' class CreateFundingAccountRequestV2(BaseModel): accountName: Optional[constr(min_length=1, max_length=22)] = Field( None, description='Required if type is either FBO or PRIVATE' ) accountNumber: Optional[constr(min_length=4, max_length=17)] = Field( None, description='Required if type is either FBO or PRIVATE' ) currency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 4217 currency code, Required if type is either WUBS_DECOUPLED or PRIVATE', examples=['USD'], ) name: constr(min_length=3, max_length=30) payorId: UUID routingNumber: Optional[constr(min_length=6, max_length=9)] = Field( None, description='Required if type is either FBO or PRIVATE' ) type: Type class CreateIndividualV3Name(BaseModel): firstName: constr(min_length=1, max_length=40) = Field(..., examples=['Bob']) lastName: constr(min_length=1, max_length=40) = Field(..., examples=['Smith']) otherNames: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['H'] ) title: Optional[constr(min_length=1, max_length=10)] = Field(None, examples=['Mr']) class CreateIndividualV4(BaseModel): dateOfBirth: date = Field( ..., description='Must not be date in future. Example - 1970-05-20', examples=['1970-05-20'], ) name: CreateIndividualV3Name nationalIdentification: Optional[constr(min_length=6, max_length=30)] = Field( None, examples=['SA211123K'] ) class CreatePayeeAddressV3(BaseModel): city: constr(min_length=2, max_length=50) = Field(..., examples=['Key West']) country: constr(min_length=2, max_length=2) = Field( ..., description='2 letter ISO 3166-1 country code', examples=['US'] ) countyOrProvince: Optional[constr(min_length=2, max_length=50)] = Field( None, examples=['FL'] ) line1: constr(min_length=1, max_length=100) = Field(..., examples=['500 Duval St']) line2: Optional[constr(min_length=0, max_length=100)] = None line3: Optional[constr(min_length=0, max_length=100)] = None line4: Optional[constr(min_length=0, max_length=100)] = None zipOrPostcode: Optional[constr(min_length=2, max_length=60)] = Field( None, examples=['33945'] ) class CreatePayeeAddressV4(BaseModel): city: constr(min_length=2, max_length=50) = Field(..., examples=['Key West']) country: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) countyOrProvince: Optional[constr(min_length=2, max_length=50)] = Field( None, examples=['FL'] ) line1: constr(min_length=1, max_length=100) = Field(..., examples=['500 Duval St']) line2: Optional[constr(min_length=0, max_length=100)] = None line3: Optional[constr(min_length=0, max_length=100)] = None line4: Optional[constr(min_length=0, max_length=100)] = None zipOrPostcode: Optional[constr(min_length=2, max_length=60)] = Field( None, examples=['33945'] ) class CreatePayeesCSVResponseV3RejectedCsvRows(BaseModel): lineNumber: Optional[int] = Field(None, examples=[3]) message: Optional[str] = Field(None, examples=['rejected message 1']) rejectedContent: Optional[str] = Field( None, examples=['unable,to,process,csv,line'] ) class CreatePayeesCSVResponseV4(BaseModel): batchId: Optional[UUID] = Field( None, examples=['cb6ff8c6-85e9-45a6-b7d9-d05305db67f3'] ) rejectedCsvRows: Optional[List[CreatePayeesCSVResponseV3RejectedCsvRows]] = None class CreatePaymentChannelV3(BaseModel): accountName: str = Field(..., examples=['My account']) accountNumber: Optional[constr(min_length=6, max_length=17)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXXX5678'], ) countryCode: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) currency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) iban: Optional[constr(pattern=r'^[A-Za-z0-9]+$', min_length=15, max_length=34)] = ( Field( None, description='Must match the regular expression ```^[A-Za-z0-9]+$```.', examples=['XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1234'], title='IBAN - International Bank Account Number', ) ) paymentChannelName: Optional[str] = Field(None, examples=['My Payment Channel']) routingNumber: Optional[constr(min_length=9, max_length=9)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXX6789'], ) class CreatePaymentChannelV4(BaseModel): accountName: str = Field(..., examples=['My account']) accountNumber: Optional[constr(min_length=6, max_length=17)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXXX5678'], ) countryCode: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) currency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) iban: Optional[constr(pattern=r'^[A-Za-z0-9]+$', min_length=15, max_length=34)] = ( Field( None, description='Must match the regular expression ```^[A-Za-z0-9]+$```.', examples=['XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1234'], title='IBAN - International Bank Account Number', ) ) paymentChannelName: Optional[str] = Field(None, examples=['My Payment Channel']) routingNumber: Optional[constr(min_length=9, max_length=9)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXX6789'], ) class LinkType(Enum): PARENT_OF = 'PARENT_OF' class CreatePayorLinkRequest(BaseModel): fromPayorId: UUID linkType: LinkType toPayorId: UUID class CreateWebhookRequest(BaseModel): authorizationHeader: Optional[ constr(pattern=r'.*', min_length=4, max_length=1000) ] = Field( None, description='the authorization header to include with the notification.' ) categories: Optional[List[Category]] = Field( None, description='the categories to enable.' ) enabled: bool = Field(..., description='whether the webhook is enabled.') payorId: UUID webhookUrl: constr(min_length=6, max_length=2000) = Field( ..., description='the webhook URL to use.' ) class DebitEventAllOf(BaseModel): debitTransactionId: UUID = Field( ..., description='ID of this debit transaction within the Velo platform', examples=['cbd9280f-8fde-4190-b014-979d88f3ec54'], ) class DebitStatusChangedAllOf(BaseModel): status: str = Field( ..., description='The new status of the debit. One of "PENDING" "PROCESSING" "REJECTED" "RELEASED"', examples=['PENDING'], ) class LocationType(Enum): requestBody = 'requestBody' queryParam = 'queryParam' requestParam = 'requestParam' header = 'header' pathParam = 'pathParam' class ErrorData(BaseModel): content: Optional[Dict[str, Any]] = Field( None, description='Object containing typed error data specific to the API' ) description: Optional[str] = Field( None, description='The description of the error data content', examples=['The rejected CSV rows'], ) class FundingAccountResponseV2(BaseModel): accountName: Optional[str] = Field( None, description='name on the bank account', examples=['Payor Corp'] ) accountNumber: Optional[str] = Field( None, description='bank account number', examples=['7001001234'] ) archived: Optional[bool] = Field( None, description='A flag for whether the funding account has been archived. Only present in the response if true.', ) country: Optional[constr(min_length=2, max_length=2)] = Field( None, description='ISO 3166-1 2 letter country code (upper case)', examples=['US'], ) currency: Optional[constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3)] = ( Field( None, description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) ) id: Optional[UUID] = Field(None, description='Funding Account Id') name: Optional[str] = Field( None, description='name of funding account', examples=['My Funding Account'] ) payorId: Optional[UUID] = None routingNumber: Optional[str] = Field( None, description='bank account routing number', examples=[12345678] ) type: Optional[str] = Field( None, description='Funding account type. One of the following values: FBO, WUBS_DECOUPLED, PRIVATE', examples=['FBO'], ) class FundingAccountType(RootModel[str]): root: str = Field( ..., description='Funding Account Type. One of the following values: FBO, WUBS_DECOUPLED, PRIVATE', examples=['FBO'], ) class FundingAccountTypeV2(RootModel[str]): root: str = Field( ..., description='Funding account type. One of the following values: FBO, WUBS_DECOUPLED, PRIVATE', examples=['FBO'], ) class FundingEvent(BaseModel): eventDateTime: Optional[datetime] = None eventId: Optional[UUID] = None fundingEventType: Optional[str] = Field( None, description='Funding event type. One of the following values: PAYOR_FUNDING_DETECTED, PAYOR_FUNDING_REQUESTED, PAYOR_FUNDING_RETURN_RECEIVED, FUNDING_RETURN_DETECTED, PAYOR_FUNDING_REQUEST_SUBMITTED, PAYOR_FUNDING_ENTRY_DETAIL_RECEIVED, FUNDING_DEALLOCATED', ) principal: Optional[str] = None class FundingEventType(RootModel[str]): root: str = Field( ..., description='Funding event type. One of the following values: PAYOR_FUNDING_DETECTED, PAYOR_FUNDING_REQUESTED, PAYOR_FUNDING_RETURN_RECEIVED, FUNDING_RETURN_DETECTED, PAYOR_FUNDING_REQUEST_SUBMITTED, PAYOR_FUNDING_ENTRY_DETAIL_RECEIVED, FUNDING_DEALLOCATED', ) class FundingPayorStatusAuditResponse(BaseModel): amount: Optional[int] = None currency: Optional[constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3)] = ( Field( None, description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) ) fundingId: Optional[UUID] = None status: Optional[str] = None class FundingRequestV2(BaseModel): amount: conint(ge=1, le=9999999999) = Field( ..., description='Amount to fund, decimal implied' ) class FundingRequestV3(BaseModel): amount: conint(ge=1, le=9999999999) = Field( ..., description='Amount to fund in minor units' ) fundingAccountId: UUID = Field(..., description='The funding account id') class FundingResponse(BaseModel): allocationDate: datetime allocationType: Optional[str] = Field( None, description='Funding Allocation Type. One of the following values: AUTOMATIC, MANUAL', ) amount: int currency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) detectedFundingRef: Optional[str] = None fundingAccountType: str = Field( ..., description='Funding Account Type. One of the following values: FBO, WUBS_DECOUPLED, PRIVATE', examples=['FBO'], ) fundingId: UUID hiddenDate: Optional[datetime] = None payorId: UUID physicalAccountName: Optional[str] = None reason: Optional[str] = None sourceAccountId: Optional[UUID] = None status: str = Field( ..., description='Current status of the funding. One of the follwing values: PENDING, UNALLOCATED, ALLOCATED, HIDDEN, RETURNED, RETURNING, BULK_RETURN, OTHER', examples=['ALLOCATED'], ) text: Optional[str] = None class FundingStatus(RootModel[str]): root: str = Field( ..., description='Current status of the funding. One of the follwing values: PENDING, UNALLOCATED, ALLOCATED, HIDDEN, RETURNED, RETURNING, BULK_RETURN, OTHER', examples=['ALLOCATED'], ) class FxSummary(BaseModel): creationDateTime: datetime fundingStatus: str = Field( ..., description='Current status of the funding. One of the following values: FUNDED, INSTRUCTED, UNFUNDED', ) invertedRate: float = Field(..., examples=[123.23]) paymentCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) quoteId: UUID rate: float = Field(..., examples=[123.23]) sourceCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) status: str = Field( ..., description='Current status of the FX Summary. One of the following values: UNQUOTED, QUOTED, EXPIRED, EXECUTED', ) totalCost: int totalPaymentAmount: int = Field(..., examples=[34235]) class FxSummaryV3(BaseModel): creationDateTime: datetime fundingStatus: str = Field( ..., description='Current status of the funding. One of the following values: FUNDED, INSTRUCTED, UNFUNDED', ) invertedRate: float = Field(..., examples=[1.12]) paymentCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) quoteId: UUID rate: float = Field(..., examples=[1.12]) sourceCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) status: str = Field( ..., description='Current status of the FX Summary. One of the following values: UNQUOTED, QUOTED, EXPIRED, EXECUTED', ) totalCost: int = Field(..., examples=[1234]) totalPaymentAmount: int = Field(..., examples=[1234]) class GetFundingsResponseLinks(BaseModel): href: Optional[str] = Field( None, examples=[ 'https://api.sandbox.velopayments.com/v1/paymentaudit/fundings?payorId=2a5d8af2-a1ed-4d7f-b9a7-ebe4b333be5a&page=1&pageSize=10' ], ) rel: Optional[str] = Field(None, examples=['first']) class GetPayeeListResponseCompanyV3(BaseModel): name: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['ABC Group Plc'] ) operatingName: Optional[constr(min_length=1, max_length=100)] = Field( None, examples=['ABC Co'] ) class GetPayeeListResponseCompanyV4(BaseModel): name: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['ABC Group Plc'] ) operatingName: Optional[constr(min_length=1, max_length=100)] = Field( None, examples=['ABC Co'] ) class GetPaymentsForPayoutResponseV3Page(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[12]) page: Optional[int] = Field(None, examples=[1]) pageSize: Optional[int] = Field(None, examples=[25]) totalElements: Optional[int] = Field(None, examples=[12]) totalPages: Optional[int] = Field(None, examples=[10]) class GetPaymentsForPayoutResponseV3Summary(BaseModel): confirmedPayments: Optional[int] = Field( None, description='The count of payments within the payout which have been confirmed.', examples=[123], ) failedPayments: Optional[int] = Field( None, description='The count of payments within the payout which have failed or been returned.', examples=[0], ) incompletePayments: Optional[int] = Field( None, description='The count of payments within the payout which are incomplete.', examples=[123], ) instructedDateTime: Optional[datetime] = Field( None, description='The date/time at which the payout was instructed.' ) payoutMemo: Optional[str] = Field( None, description='The memo attached to the payout.', examples=['Payment Memo value'], ) payoutStatus: Optional[str] = Field( None, description='The current status of the payout. One of the following values: ACCEPTED, REJECTED, SUBMITTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, CONFIRMED, WITHDRAWN', ) releasedPayments: Optional[int] = Field( None, description='The count of payments within the payout which have been released.', examples=[123], ) submittedDateTime: Optional[datetime] = Field( None, description='The date/time at which the payout was submitted.' ) totalPayments: Optional[int] = Field( None, description='The count of payments within the payout.', examples=[123] ) withdrawnDateTime: Optional[datetime] = Field( None, description='The date/time at which the payout was withdrawn.' ) class GetPayoutStatistics(BaseModel): thisMonthFailedPaymentsCount: int thisMonthPayoutsCount: int class GetPayoutsResponseV3Links(BaseModel): href: Optional[str] = Field(None, examples=['https://example.com']) rel: Optional[str] = Field(None, examples=['first']) class GetPayoutsResponseV3Page(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[12]) page: Optional[int] = Field(None, examples=[1]) pageSize: Optional[int] = Field(None, examples=[25]) totalElements: Optional[int] = Field(None, examples=[123]) totalPages: Optional[int] = Field(None, examples=[123]) class Iban(RootModel[constr(pattern=r'^[A-Za-z0-9]+$', min_length=15, max_length=34)]): root: constr(pattern=r'^[A-Za-z0-9]+$', min_length=15, max_length=34) = Field( ..., description='Must match the regular expression ```^[A-Za-z0-9]+$```.', examples=['XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1234'], title='IBAN - International Bank Account Number', ) class IndividualV3Name(BaseModel): firstName: constr(min_length=1, max_length=40) = Field(..., examples=['Bob']) lastName: constr(min_length=1, max_length=40) = Field(..., examples=['Smith']) otherNames: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['A'] ) title: Optional[constr(min_length=1, max_length=10)] = Field(None, examples=['Mr']) class IndividualV4(BaseModel): dateOfBirth: str = Field( ..., description='If not authorized to view, value will be masked. Example: - XXXX-XX-XX', examples=['1985-01-01'], ) name: IndividualV3Name nationalIdentification: Optional[constr(min_length=6, max_length=30)] = Field( None, description='If not authorized to view, value will be masked. Example: XXXXX1234', examples=['AB123456C'], ) class InstructPayoutRequestV3(BaseModel): fxRateDegredationThresholdPercentage: Optional[float] = Field( None, description='Halt instruction if the FX rates have become worse since the last quote', ) class InvitationStatusV3(RootModel[str]): root: str class InvitationStatusV4(RootModel[str]): root: str class InvitePayeeRequestV3(BaseModel): payorId: UUID = Field(..., examples=['9ac75325-5dcd-42d5-b992-175d7e0a035e']) class InvitePayeeRequestV4(BaseModel): payorId: UUID = Field(..., examples=['9ac75325-5dcd-42d5-b992-175d7e0a035e']) class MfaType(Enum): SMS = 'SMS' YUBIKEY = 'YUBIKEY' TOTP = 'TOTP' class UserType(Enum): BACKOFFICE = 'BACKOFFICE' PAYOR = 'PAYOR' PAYEE = 'PAYEE' class InviteUserRequest(BaseModel): email: EmailStr = Field( ..., description='the email address of the invited user', examples=['foo@example.com'], ) entityId: Optional[UUID] = Field( None, description='The payorId or payeeId or null if the user is a backoffice admin\n', examples=['7fffa261-ac68-49e6-b605-d24a444d9206'], ) firstName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['John'] ) lastName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['Doe'] ) mfaType: MfaType = Field( ..., description='<p>The MFA type that the user will use</p>\n<p>The type may be conditional on the role(s) the user has</p>\n', examples=['TOTP'], ) primaryContactNumber: constr(pattern=r'^\+[1-9]\d{1,14}$') = Field( ..., description='The main contact number for the user\n', examples=['11235555555'], ) roles: List[str] = Field( ..., description='The role(s) for the user\nThe role must exist\nThe role can be a custom role or a system role but the invoker must have the permissions to assign the role\nSystem roles are: velo.backoffice.admin, velo.payor.master_admin, velo.payor.admin, velo.payor.support, velo.payee.admin, velo.payee.support\n', examples=[['velo.payor.admin']], ) secondaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The secondary contact number for the user\n', examples=['11235555550'], ) smsNumber: constr(pattern=r'^\+[1-9]\d{1,14}$') = Field( ..., description='The phone number of a device that the user can receive sms messages on\n', examples=['11235555555'], ) userType: Optional[UserType] = Field( None, description='Will default to PAYOR if not provided but entityId is provided', examples=['PAYEE'], ) verificationCode: Optional[constr(min_length=6, max_length=6)] = Field( None, description="Optional property that MUST be suppied when manually verifying a user\nThe user's smsNumber is registered via a separate endpoint and an OTP sent to them\n", examples=['123456'], ) class IsoCountryCode( RootModel[constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2)] ): root: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) class IsoCurrency(RootModel[constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3)]): root: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) class KycState(RootModel[str]): root: str = Field( ..., description='The kyc state of the payor. One of the following values: FAILED_KYC, PASSED_KYC, REQUIRES_KYC', examples=['PASSED_KYC'], ) class LanguageV3(RootModel[str]): root: str = Field( ..., description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) class LanguageV4(RootModel[str]): root: str = Field( ..., description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) class LinkForResponse(BaseModel): href: Optional[str] = None rel: Optional[str] = None class ListFundingAccountsResponseV2Links(BaseModel): href: Optional[str] = Field( None, examples=[ 'https://api.sandbox.velopayments.com/v1/sourceAccounts?payorId=a2967711-df07-41e5-b5ea-f563088911c6&page=1&pageSize=0&sort=fundingRef:asc' ], ) rel: Optional[str] = Field(None, examples=['first']) class ListFundingAccountsResponseV2Page(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[1]) page: Optional[int] = Field(None, examples=[1]) pageSize: Optional[int] = Field(None, examples=[25]) totalElements: Optional[int] = Field(None, examples=[1]) totalPages: Optional[int] = Field(None, examples=[2]) class ListPaymentsResponseV3Page(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[12]) page: Optional[int] = Field(None, examples=[1]) pageSize: Optional[int] = Field(None, examples=[25]) totalElements: Optional[int] = Field(None, examples=[12]) totalPages: Optional[int] = Field(None, examples=[12]) class ListSourceAccountResponseV2Links(BaseModel): href: Optional[str] = Field( None, examples=[ 'https://api.sandbox.velopayments.com/v2/sourceAccounts?payorId=a2967711-df07-41e5-b5ea-f563088911c6&page=1&pageSize=0&sort=fundingRef:asc' ], ) rel: Optional[str] = Field(None, examples=['first']) class ListSourceAccountResponseV3Links(BaseModel): href: Optional[str] = Field( None, examples=[ 'https://api.sandbox.velopayments.com/v3/sourceAccounts?payorId=a2967711-df07-41e5-b5ea-f563088911c6&page=1&pageSize=0&sort=fundingRef:asc' ], ) rel: Optional[str] = Field(None, examples=['first']) class LocalisationDetails(BaseModel): parameters: Optional[Dict[str, str]] = Field( None, description='name to value map containing any named parameters that appear in the message template', examples=[{'max': '10', 'min': '0'}], ) template: Optional[str] = Field( None, description='the English language message template used to construct the error message', examples=['size must be between {min} and {max}'], ) class MFAType(Enum): SMS = 'SMS' YUBIKEY = 'YUBIKEY' TOTP = 'TOTP' class NameV3(BaseModel): firstName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Bob'] ) lastName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Smith'] ) otherNames: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['H'] ) title: Optional[constr(min_length=1, max_length=10)] = Field(None, examples=['Mr']) class NameV4(BaseModel): firstName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Bob'] ) lastName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Smith'] ) otherNames: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['H'] ) title: Optional[constr(min_length=1, max_length=10)] = Field(None, examples=['Mr']) class NotificationsV2(BaseModel): minimumBalance: Optional[int] = Field(None, examples=[120000]) class NotificationsV3(BaseModel): minimumBalance: Optional[int] = Field(None, examples=[120000]) class OfacStatusV4(RootModel[str]): root: str = Field( ..., description='OFAC status. One of the following values: PENDING, PASSED, FAILED', ) class OnboardedStatusV3(RootModel[str]): root: str = Field( ..., description='Onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) class OnboardedStatusV32(RootModel[str]): root: str = Field( ..., description='Onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) class OnboardedStatusV4(RootModel[str]): root: str = Field( ..., description='Payee onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) class OnboardedStatusV42(RootModel[str]): root: str = Field( ..., description='Payee onboarded status. One of the following value: CREATED, INVITED, REGISTERED, ONBOARDED', ) class PageForResponse(BaseModel): numberOfElements: Optional[int] = None page: Optional[int] = None pageSize: Optional[int] = None totalElements: Optional[int] = None totalPages: Optional[int] = None class PageResourceFundingPayorStatusAuditResponseFundingPayorStatusAuditResponse( BaseModel ): content: Optional[List[FundingPayorStatusAuditResponse]] = None links: Optional[List[LinkForResponse]] = None page: Optional[PageForResponse] = None class PagedPayeeInvitationStatusResponseV3Page(BaseModel): numberOfElements: Optional[int] = None page: Optional[int] = None pageSize: Optional[int] = None totalElements: Optional[int] = None totalPages: Optional[int] = None class PagedPayeeResponseV3Links(BaseModel): href: Optional[str] = None rel: Optional[str] = None class PagedPayeeResponseV3Page(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[10]) page: Optional[int] = Field(None, examples=[10]) pageSize: Optional[int] = Field(None, examples=[10]) totalElements: Optional[int] = Field(None, examples=[10]) totalPages: Optional[int] = Field(None, examples=[10]) class PagedPayeeResponseV3Summary(BaseModel): totalInvitedCount: Optional[int] = Field(None, examples=[10]) totalOnboardedCount: Optional[int] = Field(None, examples=[10]) totalPayeesCount: Optional[int] = Field(None, examples=[10]) totalRegisteredCount: Optional[int] = Field(None, examples=[10]) totalWatchlistFailedCount: Optional[int] = Field(None, examples=[0]) class PagedUserResponseLinks(BaseModel): href: Optional[str] = Field( None, examples=[ 'https://api.sandbox.velopayments.com/v2/users??type=PAYOR&page=1&pageSize=10' ], ) rel: Optional[str] = Field(None, examples=['first']) class PagedUserResponsePage(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[12]) page: Optional[int] = Field(None, examples=[1]) pageSize: Optional[int] = Field(None, examples=[25]) totalElements: Optional[int] = Field(None, examples=[33]) totalPages: Optional[int] = Field(None, examples=[2]) class PasswordRequest(BaseModel): password: constr(min_length=8, max_length=128) = Field( ..., description='a password that passes validation', examples=['My_strong_password'], ) class PayableIssueV3(BaseModel): code: str = Field(..., examples=['3']) message: str = Field(..., examples=['payee-disabled']) class PayableIssueV4(BaseModel): code: str = Field(..., examples=['3']) message: str = Field(..., examples=['payee-disabled']) class PayeeAddressV3(BaseModel): city: constr(min_length=2, max_length=100) = Field(..., examples=['Key West']) country: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) countyOrProvince: Optional[constr(min_length=2, max_length=100)] = Field( None, examples=['FL'] ) line1: constr(min_length=2, max_length=255) = Field(..., examples=['500 Duval St']) line2: Optional[constr(min_length=0, max_length=255)] = None line3: Optional[constr(min_length=0, max_length=255)] = None line4: Optional[constr(min_length=0, max_length=255)] = None zipOrPostcode: Optional[constr(min_length=2, max_length=30)] = Field( None, examples=['33945'] ) class PayeeAddressV4(BaseModel): city: constr(min_length=2, max_length=100) = Field(..., examples=['Key West']) country: constr(min_length=2, max_length=50) = Field(..., examples=['US']) countyOrProvince: Optional[constr(min_length=2, max_length=100)] = Field( None, examples=['FL'] ) line1: constr(min_length=2, max_length=255) = Field(..., examples=['500 Duval St']) line2: Optional[constr(min_length=0, max_length=255)] = None line3: Optional[constr(min_length=0, max_length=255)] = None line4: Optional[constr(min_length=0, max_length=255)] = None zipOrPostcode: Optional[constr(min_length=2, max_length=30)] = Field( None, examples=['33945'] ) class PayeeDeltaResponseV3Links(BaseModel): href: Optional[str] = Field( None, examples=[ 'http://api.sandbox.velopayments.com/v3/payees/deltas?payorId=0a818933-087d-47f2-ad83-2f986ed087eb&updatedSince=2019-01-20T09:00:00+00:00&page=1&pageSize=1000' ], ) rel: Optional[str] = Field(None, examples=['first']) class PayeeDeltaResponseV3Page(BaseModel): numberOfElements: Optional[int] = Field(None, examples=[2]) page: Optional[int] = Field(None, examples=[1]) pageSize: Optional[int] = Field(None, examples=[25]) totalElements: Optional[int] = Field(None, examples=[2]) totalPages: Optional[int] = Field(None, examples=[1]) class PayeeDeltaResponseV4Links(BaseModel): href: Optional[str] = Field( None, examples=[ 'http://api.sandbox.velopayments.com/v4/payees/deltas?payorId=0a818933-087d-47f2-ad83-2f986ed087eb&updatedSince=2019-01-20T09:00:00+00:00&page=1&pageSize=1000' ], ) rel: Optional[str] = Field(None, examples=['first']) class PayeeDeltaV3(BaseModel): dbaName: Optional[str] = Field(None, examples=['Payee DBA Name']) displayName: Optional[str] = Field(None, examples=['Payee1']) email: Optional[EmailStr] = Field(None, examples=['payee1@example.com']) onboardedStatus: Optional[str] = Field( None, description='Onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) payeeCountry: Optional[str] = Field(None, examples=['US']) payeeId: UUID remoteId: constr(min_length=1, max_length=100) = Field(..., examples=['payee_1']) class PayeeDeltaV4(BaseModel): dbaName: Optional[str] = Field(None, examples=['Payee DBA Name']) displayName: Optional[str] = Field(None, examples=['Payee1']) email: Optional[EmailStr] = Field(None, examples=['payee1@example.com']) onboardedStatus: Optional[str] = Field( None, description='Payee onboarded status. One of the following value: CREATED, INVITED, REGISTERED, ONBOARDED', ) payeeCountry: Optional[ constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) ] = Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) payeeId: UUID remoteId: constr(min_length=1, max_length=100) = Field(..., examples=['payee_1']) class PayeeEventAllOfReasons(BaseModel): code: str = Field(..., examples=['00001']) message: str = Field(..., examples=['payment channel disabled']) class PayeeInvitationStatusResponseV3(BaseModel): gracePeriodEndDate: Optional[date] = Field(None, examples=['2019-01-20']) invitationStatus: str = Field( ..., description='Payee invitation status. One of the following values: ACCEPTED, PENDING, DECLINED', ) payeeId: UUID = Field(..., examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9']) class PayeeInvitationStatusResponseV4(BaseModel): gracePeriodEndDate: Optional[date] = Field(None, examples=['2019-01-20']) invitationStatus: str = Field( ..., description='Payee invitation status. One of the following values: ACCEPTED, PENDING, DECLINED', ) payeeId: UUID = Field(..., examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9']) class PayeePayorRefV3(BaseModel): invitationStatus: Optional[str] = None invitationStatusTimestamp: Optional[datetime] = Field( None, description='The timestamp when the invitation status is updated', examples=['2019-01-20T09:00:00Z'], ) payableIssues: Optional[List[PayableIssueV3]] = Field( None, description='Indicates any conditions which prevent the payee from being payable for this payor', ) payableStatus: Optional[bool] = Field( None, description='Indicates if the payee is payable for this payor' ) paymentChannelId: Optional[UUID] = Field( None, examples=['70faaff7-2c32-4b44-b27f-f0b6c484e6f3'] ) payorId: Optional[UUID] = Field( None, examples=['ba08877f-9d96-41e4-9c26-44a872d856ae'] ) remoteId: Optional[str] = Field(None, examples=['uniqueIdForRemoteEntity']) class PayeePayorRefV4(BaseModel): invitationStatus: Optional[str] = None invitationStatusTimestamp: Optional[datetime] = Field( None, description='The timestamp when the invitation status is updated', examples=['2019-01-20T09:00:00Z'], ) payableIssues: Optional[List[PayableIssueV4]] = Field( None, description='Indicates any conditions which prevent the payee from being payable for this payor', ) payableStatus: Optional[bool] = Field( None, description='Indicates if the payee is payable for this payor' ) paymentChannelId: Optional[UUID] = Field( None, examples=['70faaff7-2c32-4b44-b27f-f0b6c484e6f3'] ) payorId: Optional[UUID] = Field( None, examples=['ba08877f-9d96-41e4-9c26-44a872d856ae'] ) remoteId: Optional[str] = Field(None, examples=['uniqueIdForRemoteEntity']) class PayeeType(Enum): COMPANY = 'COMPANY' INDIVIDUAL = 'INDIVIDUAL' class PayeeTypeEnum(Enum): Individual = 'Individual' Company = 'Company' class PayeeType2(RootModel[str]): root: str = Field( ..., description='Type of Payee. One of the following values: Individual, Company', ) class PayeeUserSelfUpdateRequest(BaseModel): email: Optional[EmailStr] = Field( None, description='the email address of the user', examples=['foo@example.com'] ) firstName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['John'] ) lastName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['Doe'] ) primaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The main contact number for the user\n', examples=['11235555555'], ) secondaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The secondary contact number for the user\n', examples=['11235555550'], ) smsNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The phone number of a device that the user can receive sms messages on\n', examples=['11235555555'], ) class PaymentAuditCurrency(RootModel[constr(min_length=3, max_length=3)]): root: constr(min_length=3, max_length=3) = Field( ..., description='ISO-4217 3 character currency code', examples=['EUR'] ) class PaymentAuditCurrencyV3(RootModel[constr(min_length=3, max_length=3)]): root: constr(min_length=3, max_length=3) = Field( ..., description='ISO 3 character currency code' ) class PaymentChannelRule(BaseModel): displayName: str = Field( ..., description='User friendly name', examples=['Account Name'] ) displayOrder: Optional[int] = None element: str = Field( ..., description='<p>the rule element</p>\n<p>will match a given element name for a payment channel configuration\n', examples=['accountName'], ) maxLength: Optional[int] = Field( None, description='maximum length of the element data', examples=[50] ) minLength: Optional[int] = Field( None, description='mininum length of the element data', examples=[5] ) required: bool = Field(..., description='is this element required') validation: str = Field( ..., description='a regex to validate the element data', examples=['^[0-9]{6,11}$'], ) class PaymentDelta(BaseModel): paymentAmount: Optional[int] = None paymentCurrency: Optional[str] = None paymentId: UUID payorPaymentId: Optional[str] = None payoutId: UUID sourceAmount: Optional[int] = None sourceCurrency: Optional[str] = None status: Optional[str] = None class PaymentDeltaResponse(BaseModel): content: Optional[List[PaymentDelta]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class PaymentDeltaV1(BaseModel): paymentAmount: Optional[int] = None paymentCurrency: Optional[str] = None paymentId: UUID payorPaymentId: Optional[str] = None payoutId: UUID sourceAmount: Optional[int] = None sourceCurrency: Optional[str] = None status: Optional[str] = None class PaymentEventResponse(BaseModel): accountName: Optional[str] = None accountNumber: Optional[str] = Field( None, description='The account number attached to the event.' ) eventDateTime: datetime = Field( ..., description='The date/time at which the event occurred.' ) eventId: UUID = Field(..., description='The id of the event.') eventType: str = Field( ..., description='One of the following values: PAYOUT_SUBMITTED, PAYOUT_COMPLETED, PAYOUT_INSTRUCTED_V3, BANK_PAYMENT_REQUESTED, SOURCE_AMOUNT_CONFIRMED, PAYMENT_SUBMITTED, PAYMENT_SUBMITTED_ACCEPTED, PAYMENT_SUBMITTED_REJECTED, PAYMENT_CONFIRMED, PAYMENT_AWAITING_FUNDS, PAYMENT_FUNDED, PAYMENT_UNFUNDED, PAYMENT_FAILED, PAYMENT_TRACKING_DETAILS_UPDATED, ACH_SUBMITTED_TO_ODFI, PAYMENT_ACCEPTED_BY_RAILS, ACH_RETURN_RECEIVED, RETURN_PAYMENT_FUNDING_REQUESTED, PAYOUT_BATCH_EXECUTED, PAYOUT_BATCH_QUOTE_EXPIRED, PAYOUT_BATCH_FUNDED, PAYOUT_BATCH_FUNDS_RETURN_REQUEST, PAYOUT_BATCH_FUNDS_RETURNED, PAYOUT_FUNDS_REQUEST, PAYOUT_FUNDS_GRANTED, PAYOUT_FUNDS_DENIED, PAYOUT_BATCH_QUOTED, PAYOUT_QUOTED, ACH_PAYMENT_RETURN_CANCELLED, RETURN_PAYMENT_CANCELLATION_REQUESTED, PAYOUT_WITHDRAWN, ORCHESTRATED_PAYMENT_BATCH_REQUESTED, ORCHESTRATED_PAYMENT_BATCH_CONFIRMED, ORCHESTRATED_PAYMENT_REQUESTED', ) iban: Optional[str] = None paymentAmount: Optional[int] = Field( None, description='The destination amount exposed by the event.', examples=[1299], ) paymentCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) principal: Optional[str] = None routingNumber: Optional[str] = Field( None, description='The routing number attached to the event.' ) scheduledAt: Optional[datetime] = None scheduledBy: Optional[str] = Field( None, description='Optional display name as a hint for who scheduled the payout. Not populated if payout was scheduled by an application.', examples=['Aphra Behn'], ) scheduledFor: Optional[datetime] = None sourceAmount: Optional[int] = Field( None, description='The source amount exposed by the event.', examples=[1299] ) sourceCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) class PaymentEventResponseV3(BaseModel): accountName: Optional[str] = Field(None, examples=['My account']) accountNumber: Optional[str] = Field( None, description='The account number attached to the event.', examples=['123123123'], ) eventDateTime: datetime = Field( ..., description='The date/time at which the event occurred.' ) eventId: UUID = Field(..., description='The id of the event.') eventType: str = Field( ..., description='The type of the event. One of the following values: PAYOUT_SUBMITTED, PAYOUT_COMPLETED, PAYOUT_INSTRUCTED_V3, BANK_PAYMENT_REQUESTED, SOURCE_AMOUNT_CONFIRMED, PAYMENT_SUBMITTED, PAYMENT_SUBMITTED_ACCEPTED, PAYMENT_SUBMITTED_REJECTED, PAYMENT_CONFIRMED, PAYMENT_AWAITING_FUNDS, PAYMENT_FUNDED, PAYMENT_UNFUNDED, PAYMENT_FAILED, ACH_SUBMITTED_TO_ODFI, PAYMENT_ACCEPTED_BY_RAILS, ACH_RETURN_RECEIVED, RETURN_PAYMENT_FUNDING_REQUESTED, PAYOUT_BATCH_EXECUTED, PAYOUT_BATCH_QUOTE_EXPIRED, PAYOUT_BATCH_FUNDED, PAYOUT_BATCH_FUNDS_RETURN_REQUEST, PAYOUT_BATCH_FUNDS_RETURNED, PAYOUT_FUNDS_REQUEST, PAYOUT_FUNDS_GRANTED, PAYOUT_FUNDS_DENIED, PAYOUT_BATCH_QUOTED, PAYOUT_QUOTED, ACH_PAYMENT_RETURN_CANCELLED, RETURN_PAYMENT_CANCELLATION_REQUESTED, PAYOUT_WITHDRAWN', ) iban: Optional[str] = Field(None, examples=['DE89 3704 0044 0532 0130 00']) paymentAmount: Optional[int] = Field( None, description='The destination amount exposed by the event.', examples=[1299], ) paymentCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) principal: Optional[str] = Field(None, examples=['Prinicple example']) routingNumber: Optional[str] = Field( None, description='The routing number attached to the event.', examples=['123123123'], ) sourceAmount: Optional[int] = Field( None, description='The source amount exposed by the event.', examples=[1299] ) sourceCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) class TransmissionType(Enum): SAME_DAY_ACH = 'SAME_DAY_ACH' WIRE = 'WIRE' ACH = 'ACH' LOCAL = 'LOCAL' SWIFT = 'SWIFT' class PaymentInstructionV3(BaseModel): amount: conint(ge=1) = Field( ..., description='<p>Amount to send to Payee</p>\n<p>The maximum payment amount is dependent on the currency</p>\n', examples=[1299], ) currency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) paymentMemo: Optional[constr(min_length=0, max_length=40)] = Field( None, description='<p>Any value here will override the memo value in the parent payout</p>\n<p>This should be the reference field on the statement seen by the payee (but not via ACH)</p>\n', examples=['my memo'], ) paymentMetadata: Optional[constr(min_length=0, max_length=512)] = Field( None, description='<p>Metadata about the payment that may be relevant to the specific rails or remote system making the payout</p>\n<p>The structure of the data will be dictated by the requirements of the payment rails</p>\n', examples=['invoiceeId_123|abc001:12345|xyz002:4567'], ) payorPaymentId: Optional[constr(min_length=0, max_length=40)] = Field( None, description='A reference identifier for the payor for the given payee payment', examples=['123211321ABSD'], ) remoteId: constr(min_length=1, max_length=100) = Field( ..., description='Your identifier for the payee', examples=['remoteId1234'] ) remoteSystemId: Optional[constr(min_length=1, max_length=100)] = Field( None, description='<p>The identifier for the remote payments system if not Velo</p>\n<p>Should only be used after consultation with Velo Payments</p>\n', ) sourceAccountName: constr(min_length=1, max_length=64) = Field( ..., description='Must match a valid source account name belonging to the payor', examples=['MyAccountName'], ) transmissionType: Optional[TransmissionType] = Field( None, description='Optionally choose a specific transmission method for the payment', examples=['ACH'], ) class PaymentRails(RootModel[str]): root: str = Field(..., description='The id of the payment rails') class PaymentRejectedOrReturnedAllOf(BaseModel): reasonCode: str = Field( ..., description='The Velo code that indicates why the payment was rejected or returned', examples=['VE0001'], ) reasonMessage: str = Field( ..., description='The description of why the payment was rejected or returned', examples=['VE0001'], ) class PaymentResponseV3(BaseModel): accountName: Optional[str] = Field(None, examples=['My Account Name']) accountNumber: Optional[str] = Field( None, description='The account number for the account which will receive the payment.', examples=['123123232323'], ) countryCode: Optional[str] = Field( None, description='The country code of the payment channel.', examples=['US'] ) events: List[PaymentEventResponseV3] filenameReference: Optional[str] = Field( None, description='ACH file payment was submitted in, if applicable', examples=['file ref'], ) fundingStatus: str = Field( ..., description='The funding status of the payment. One of the following values: [FUNDED, INSTRUCTED, UNFUNDED', ) iban: Optional[str] = Field( None, description='The iban for the payment.', examples=['DE89 3704 0044 0532 0130 00'], ) individualIdentificationNumber: Optional[str] = Field( None, description='Individual Identification Number assigned to the payment in the ACH file, if applicable', examples=['1231231adf'], ) invertedRate: Optional[float] = Field( None, description='The inverted FX rate for the payment, if FX was involved. **Note** that (depending on the role of the caller) this information may not be displayed', ) payeeId: UUID = Field(..., description='The id of the paymeee') paymentAmount: int = Field( ..., description='The amount which the payee will receive' ) paymentChannelId: Optional[str] = Field(None, examples=['123asdf']) paymentChannelName: Optional[str] = Field(None, examples=['My Payment Channel']) paymentCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) paymentId: UUID = Field(..., description='The id of the payment') paymentMemo: Optional[str] = Field( None, description='The payment memo set by the payor', examples=['Payment memo'] ) paymentScheme: Optional[str] = None payorId: UUID = Field(..., description='The id of the payor') payorName: Optional[str] = Field(None, description='The name of the payor') payorPaymentId: Optional[str] = Field(None, examples=['123123asdf']) quoteId: UUID = Field(..., description='The quote Id used for the FX') railsBatchId: Optional[str] = None railsId: str = Field( ..., description='The rails ID. Default value is RAILS ID UNAVAILABLE when not populated.', examples=['asdf123'], ) railsPaymentId: Optional[str] = None rate: Optional[float] = Field( None, description='The FX rate for the payment, if FX was involved. **Note** that (depending on the role of the caller) this information may not be displayed', ) rejectionReason: Optional[str] = None remoteId: Optional[str] = Field( None, description='The remote id by which the payor refers to the payee. Only populated once payment is confirmed', examples=['aasdf123'], ) returnCost: Optional[int] = Field( None, description='The return cost if a returned payment.', examples=[1232] ) returnReason: Optional[str] = Field(None, examples=['Some Reason Value']) routingNumber: Optional[str] = Field( None, description='The routing number for the payment.', examples=['123123123123'], ) sourceAccountId: UUID = Field( ..., description='The id of the source account from which the payment was taken' ) sourceAccountName: Optional[str] = Field( None, description='The name of the source account from which the payment was taken', examples=['My Account'], ) sourceAmount: Optional[int] = Field( None, description='The source amount for the payment (amount debited to make the payment)', examples=[12345], ) sourceCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) status: str = Field( ..., description='Current status of the payment. One of the following values: ACCEPTED, AWAITING_FUNDS, FUNDED, UNFUNDED, BANK_PAYMENT_REQUESTED, REJECTED, ACCEPTED_BY_RAILS, CONFIRMED, FAILED, WITHDRAWN', ) submittedDateTime: datetime traceNumber: Optional[str] = Field( None, description='Trace Number assigned to the payment in the ACH file, if applicable', examples=['abodu123'], ) class PaymentStatusChangedAllOf(BaseModel): status: str = Field( ..., description='The new status of the payment. One of "SUBMITTED" "ACCEPTED" "REJECTED" "ACCEPTED_BY_RAILS" "CONFIRMED" "RETURNED" "WITHDRAWN"', examples=['ACCEPTED'], ) class PayorAddress(BaseModel): city: constr(min_length=2, max_length=100) = Field(..., examples=['Key West']) country: constr(min_length=2, max_length=50) = Field(..., examples=['US']) countyOrProvince: Optional[constr(min_length=2, max_length=100)] = Field( None, examples=['FL'] ) line1: constr(min_length=2, max_length=255) = Field(..., examples=['500 Duval St']) line2: Optional[constr(min_length=0, max_length=255)] = None line3: Optional[constr(min_length=0, max_length=255)] = None line4: Optional[constr(min_length=0, max_length=255)] = None zipOrPostcode: Optional[constr(min_length=2, max_length=30)] = Field( None, examples=['33945'] ) class PayorAddressV2(BaseModel): city: constr(min_length=2, max_length=100) = Field(..., examples=['Key West']) country: constr(min_length=2, max_length=50) = Field(..., examples=['US']) countyOrProvince: Optional[constr(min_length=2, max_length=100)] = Field( None, examples=['FL'] ) line1: constr(min_length=2, max_length=255) = Field(..., examples=['500 Duval St']) line2: Optional[constr(min_length=0, max_length=255)] = None line3: Optional[constr(min_length=0, max_length=255)] = None line4: Optional[constr(min_length=0, max_length=255)] = None zipOrPostcode: Optional[constr(min_length=2, max_length=30)] = Field( None, examples=['33945'] ) class PayorAmlTransaction(BaseModel): credit: Optional[int] = None creditCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) dateFundingRequested: Optional[str] = None debit: Optional[int] = None debitCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) fundingType: Optional[str] = None fxApplied: Optional[float] = None payeeEmail: Optional[EmailStr] = None payeeName: Optional[str] = None payeeType: Optional[str] = None paymentAmount: Optional[int] = None paymentCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) paymentMemo: Optional[str] = None paymentRails: Optional[str] = None paymentStatus: Optional[str] = None payorPaymentId: Optional[str] = None rejectReason: Optional[str] = None remoteId: Optional[str] = Field( None, description='Remote ID of the Payee, set by Payor' ) reportTransactionType: Optional[str] = None returnCode: Optional[str] = None returnDescription: Optional[str] = None returnFee: Optional[str] = None returnFeeCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) returnFeeDescription: Optional[str] = None sourceAccount: Optional[str] = None transactionDate: Optional[date] = None transactionTime: Optional[str] = None class PayorAmlTransactionV3(BaseModel): credit: Optional[int] = None creditCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) dateFundingRequested: Optional[str] = None debit: Optional[int] = None debitCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) fundingType: Optional[str] = None fxApplied: Optional[float] = None payeeType: Optional[str] = None paymentAmount: Optional[int] = None paymentCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) paymentMemo: Optional[str] = None paymentRails: Optional[str] = None paymentStatus: Optional[str] = None payorPaymentId: Optional[str] = None rejectReason: Optional[str] = None remoteId: Optional[str] = Field( None, description='Remote ID of the Payee, set by Payor' ) reportTransactionType: Optional[str] = None returnCode: Optional[str] = None returnDescription: Optional[str] = None returnFee: Optional[str] = None returnFeeCurrency: Optional[str] = Field( None, description='ISO 4217 3 character currency code' ) returnFeeDescription: Optional[str] = None sourceAccount: Optional[str] = None transactionDate: Optional[date] = None transactionTime: Optional[str] = None class PayorBrandingResponse(BaseModel): collectiveAlias: Optional[str] = Field( None, description='How the payor has chosen to refer to payees', examples=['Contractors'], ) dbaName: Optional[str] = Field( None, description="The payor’s 'Doing Business As' name", examples=['Key West Imports'], ) logoUrl: AnyUrl = Field( ..., description='<p>The URL to use for this payor’s logo</p>\n<p>This will be an immutable system-generated URL</p>\n', examples=[ 'https://images.example.com/450ecb66-df18-4d0c-b557-f718782775df/logo.png' ], ) payorName: str = Field( ..., description='The name of the payor', examples=['Key West Imports, Inc'] ) supportContact: Optional[str] = Field( None, description='The payor’s support contact address', examples=['support@example.com'], ) class Role(Enum): velo_payor_admin = 'velo.payor.admin' velo_payor_support = 'velo.payor.support' class PayorCreateApiKeyRequest(BaseModel): description: Optional[constr(min_length=2, max_length=1024)] = Field( None, description='Description of the key.', examples=['Key for iOS mobile application'], ) name: constr(min_length=2, max_length=100) = Field( ..., description='A name for the key.', examples=['iOS Key'] ) roles: List[Role] = Field( ..., description='<p>A role to assign to the key.</p>\n<p>If you want your API key to have write access then assign the role velo.payor.admin</p>\n<p>A later version will change this property from a list to string</p>\n', examples=[['velo.payor.admin']], max_length=1, min_length=1, ) class PayorCreateApiKeyResponse(BaseModel): apiKey: Optional[UUID] = Field( None, description='API Key', examples=['385d4506-e7dd-446e-a092-5f30b98e7b26'] ) apiSecret: Optional[UUID] = Field( None, description='API Secret', examples=['f25767d9-342a-48ac-a788-0a7a38ae6fb3'], ) class PayorCreateApplicationRequest(BaseModel): description: Optional[constr(min_length=2, max_length=1024)] = Field( None, description='Description of the application.', examples=['SAP Application integration'], ) name: constr(min_length=2, max_length=100) = Field( ..., description='The name of the application.', examples=['SAP'] ) class PayorEmailOptOutRequest(BaseModel): reminderEmailsOptOut: bool class PayorLinksResponseLinks(BaseModel): fromPayorId: UUID linkId: UUID linkType: str = Field( ..., description='The type of the link. One of the following values: PARENT_OF' ) toPayorId: UUID class PayorLinksResponsePayors(BaseModel): kycState: Optional[str] = Field( None, description='Current KYC state. One of the following values: FAILED_KYC, PASSED_KYC, REQUIRES_KYC', ) payorId: UUID payorName: str primaryContactEmail: Optional[str] = None class PayorLogoRequest(BaseModel): logo: Optional[bytes] = None class PayoutCompanyV3(BaseModel): companyName: str = Field(..., examples=['ACME Anvils PLC']) class PayoutNameV3(BaseModel): firstName: str = Field(..., examples=['Fred']) lastName: str = Field(..., examples=['Flintstone']) class PayoutPayor(BaseModel): dbaName: str = Field(..., description='The alternate name of the payor.') payorId: UUID = Field(..., description='The id of the payor.') payorName: str = Field(..., description='The name of the payor.') principal: str = Field( ..., description='Email address if principal is a user or ID if application.' ) principalId: UUID = Field(..., description='The id of the principal.') class PayoutPayorIds(BaseModel): payoutFromPayorId: UUID = Field( ..., description='The ID of the Payor providing the source account for the payout', examples=['35198f08-1c7b-4a91-8921-cd760ed92bca'], ) payoutToPayorId: UUID = Field( ..., description='The ID of the Payor that owns the Payee (on behalf of)', examples=['3eb99144-6ebf-4b02-9483-ad86b2ff1bca'], ) submittingPayorId: UUID = Field( ..., description='The ID of the Payor that is submitting the payout', examples=['ac207f97-663c-4429-9d57-ba5b35d6672d'], ) class PayoutPrincipal(BaseModel): principal: str = Field( ..., description='Email address if principal is a user or ID if application.' ) principalId: UUID = Field(..., description='The id of the principal.') class PayoutSchedule(BaseModel): notificationsEnabled: bool scheduleStatus: str = Field( ..., description='Current status of the payout schedule. One of the following values: SCHEDULED, EXECUTED, FAILED', examples=['SCHEDULED'], ) scheduledAt: datetime scheduledBy: Optional[str] = Field( None, description='Optional display name as a hint for who scheduled the payout. Not populated if payout was scheduled by an application.', examples=['Aphra Behn'], ) scheduledByPrincipalId: str = Field( ..., description='ID of the user or application that scheduled the payout', examples=['8946953b-1e3b-49cf-9da4-b704cbb78f3e'], ) scheduledFor: datetime class PayoutScheduleV3(BaseModel): notificationsEnabled: bool scheduleStatus: str = Field( ..., description='The current status of the payout schedule. One of the following values: SCHEDULED, EXECUTED, FAILED', examples=['SCHEDULED'], ) scheduledAt: datetime scheduledByPrincipalId: str = Field( ..., description='ID of the user or application that scheduled the payout', examples=['8946953b-1e3b-49cf-9da4-b704cbb78f3e'], ) scheduledFor: datetime class PayoutStatus(RootModel[str]): root: str = Field( ..., description='Current status of the Payout. One of the following values: ACCEPTED, REJECTED, SUBMITTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, CONFIRMED, WITHDRAWN', ) class PayoutStatusV3(RootModel[str]): root: str = Field( ..., description='Current status of the payout. One of the following values: ACCEPTED, REJECTED, SUBMITTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, CONFIRMED, WITHDRAWN', ) class PayoutType(RootModel[str]): root: str = Field( ..., description='The type of payout. One of the following values: STANDARD, AS, ON_BEHALF_OF', ) class PingResponse(BaseModel): id: Optional[UUID] = None webhookId: Optional[UUID] = None class PostInstructFxInfo(BaseModel): fxMode: str = Field( ..., description='The mode by which the FX rate is to be determined (MANUAL or AUTO)', examples=['MANUAL'], ) fxStatus: str = Field( ..., description='The state to which the Post-Instruct FX process has reached (INITIATED or COMPLETED)', examples=['INITIATED'], ) fxStatusUpdatedAt: datetime = Field( ..., description='The date-time at which the most recent fxStatus was determined.', ) fxTransactionReference: Optional[str] = Field( None, description='The reference assigned to the FX funding that will fulfil this payment.', examples=['AB123GHI'], ) class PostInstructFxMode(RootModel[str]): root: str = Field( ..., description='The mode by which the FX rate is to be determined (MANUAL or AUTO)', examples=['MANUAL'], ) class PostInstructFxStatus(RootModel[str]): root: str = Field( ..., description='The state to which the Post-Instruct FX process has reached (INITIATED or COMPLETED)', examples=['INITIATED'], ) class QuoteFxSummaryV3(BaseModel): creationTime: datetime = Field( ..., description='Timestamp of when the quote was created', examples=['2022-10-30T09:45:09Z'], ) expiryTime: Optional[datetime] = Field( None, description='The timestamp for when the quote will expire', examples=['2022-10-30T09:50:09Z'], ) fundingStatus: str = Field( ..., description='Current status of the funding associated with this quote. One of the following values: UNFUNDED, INSTRUCTED, FUNDED', examples=['FUNDED'], ) invertedRate: Optional[float] = Field( None, description='The inverse conversion rate (from paymnent currency to source currency)', examples=[1.12], ) paymentCurrency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) quoteId: UUID = Field( ..., description='The id of the created quote', examples=['af80d455-29dd-4e72-a000-495a9829a7d0'], ) rate: float = Field( ..., description='The conversion rate (from the source currency to the payment currency)', examples=[0.89], ) sourceCurrency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) status: str = Field( ..., description='Current status of the fx quote. One of the following values: UNQUOTED, QUOTED, EXPIRED, EXECUTED, REJECTED', examples=['QUOTED'], ) totalPaymentAmount: int = Field( ..., description='The amount (in minor units) that the payee will receive', examples=[890000], ) totalSourceAmount: int = Field( ..., description='The amount (in minor units) that will be paid from the source account', examples=[1000000], ) class QuoteResponseV3(BaseModel): fxSummaries: Optional[List[QuoteFxSummaryV3]] = None class RegionV2(BaseModel): abbreviation: Optional[str] = Field(None, examples=['CA']) name: Optional[str] = Field(None, examples=['California']) class RegisterSmsRequest(BaseModel): smsNumber: constr(pattern=r'^\+[1-9]\d{1,14}$') = Field( ..., description='The phone number of a device that the user can receive sms messages on\n', examples=['11235555555'], ) class RejectedPaymentV3(BaseModel): amount: int = Field( ..., description='The amount of the payment in minor units', examples=[10000] ) currencyType: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) lineNumber: Optional[int] = Field( None, description='If the payment was submitted in a csv payout then this will be the line number of the payment in the file', examples=[34], ) message: Optional[str] = Field( None, description='A more general rejection message than the reason property', examples=[ "Payment cannot be processed because of the Payee's OFAC or Compliance Status" ], ) paymentMetadata: Optional[constr(min_length=0, max_length=512)] = Field( None, description='<p>Metadata about the payment that may be relevant to the specific rails or remote system making the payout</p>\n<p>The structure of the data will be dictated by the requirements of the payment rails</p>\n', examples=['invoiceeId_123|abc001:12345|xyz002:4567'], ) payorPaymentId: constr(min_length=0, max_length=40) = Field( ..., description='A reference identifier for the payor for the given payee payment', examples=['123211321ABSD'], ) reason: str = Field( ..., description='The reason for the payment being rejected', examples=['The payee has not been onboarded'], ) reasonCode: Optional[str] = Field( None, description='The reason code as determined by Velo', examples=['VE1012'] ) remoteId: str = Field( ..., description='The remoteId supplied by the payor that identifies the payee', examples=['remoteIdVal123'], ) remoteSystemId: Optional[constr(min_length=1, max_length=100)] = Field( None, description='<p>The identifier for the remote payments system if not Velo</p>\n', examples=['OB012'], ) sourceAccountName: str = Field( ..., description='The identifier of the source account to debit the payment from', examples=['Chase Bank Account'], ) class TokenType(Enum): INVITE_MFA_USER = 'INVITE_MFA_USER' MFA_REGISTRATION = 'MFA_REGISTRATION' class ResendTokenRequest(BaseModel): tokenType: TokenType = Field( ..., description='The type of the token to resend', examples=['INVITE_MFA_USER'] ) verificationCode: Optional[constr(min_length=6, max_length=6)] = Field( None, description="<p>Optional property that MUST be suppied when manually verifying a user</p>\n<p>The user's smsNumber is registered via a separate endpoint and an OTP sent to them</p>\n", examples=['123456'], ) class ResetPasswordRequest(BaseModel): email: EmailStr = Field( ..., description='the email address of the user requesting the reset password', examples=['foo@example.com'], ) class Role1(BaseModel): name: str = Field(..., description='the name of the role', examples=['payor.admin']) class RoleUpdateRequest(BaseModel): roles: List[str] = Field( ..., description='<p>The role(s) for the user</p>\n<p>The role must exist</p>\n<p>The role can be a custom role or a system role but the invoker must have the permissions to assign the role</p>\n<p>System roles are: backoffice.admin, payor.master_admin, payor.admin, payor.support</p>\n', examples=[['payor.admin']], ) verificationCode: Optional[constr(min_length=6, max_length=6)] = Field( None, description="<p>Optional property that MUST be suppied when manually verifying a user</p>\n<p>The user's smsNumber is registered via a separate endpoint and an OTP sent to them</p>\n", examples=['123456'], ) class SchedulePayoutRequestV3(BaseModel): notificationsEnabled: bool = Field( ..., description='Flag to indicate whether to receive notifications when scheduled payout is processed', ) scheduledFor: datetime = Field( ..., description='UTC timestamp for instructing the payout. Format is ISO-8601.', examples=['2025-01-01T10:00:00Z'], ) class ScheduleStatus(RootModel[str]): root: str = Field( ..., description='Current status of the payout schedule. One of the following values: SCHEDULED, EXECUTED, FAILED', examples=['SCHEDULED'], ) class SelfMFATypeUnregisterRequest(BaseModel): mfaType: MfaType = Field( ..., description='The type of the MFA device', examples=['TOTP'] ) class SelfUpdatePasswordRequest(BaseModel): newPassword: constr(min_length=8, max_length=128) = Field( ..., description='The new password', examples=['My_new_password'] ) oldPassword: constr(min_length=8, max_length=128) = Field( ..., description="The user's current password", examples=['My_current_password'] ) class SetNotificationsRequest(BaseModel): minimumBalance: conint(ge=0, le=9999999999) = Field( ..., description='Amount to set as minimum balance in minor units' ) class SetNotificationsRequest2(BaseModel): minimumBalance: conint(ge=0, le=9999999999) = Field( ..., description='Amount to set as minimum balance for notifications in minor units', examples=[10000000], ) class SourceAccountResponseV2(BaseModel): accountType: str = Field(..., examples=['FBO']) autoTopUpConfig: Optional[AutoTopUpConfigV2] = None balance: Optional[int] = Field( None, description='Decimal implied', examples=[1203489] ) balanceVisible: bool currency: Optional[constr(min_length=3, max_length=3)] = Field( None, examples=['USD'] ) customerId: Optional[str] = Field(None, examples=['Joe Customer']) fundingAccountId: Optional[UUID] = None fundingRef: str = Field(..., examples=['a1b2c3d4']) id: UUID = Field(..., description='Source Account Id') name: Optional[str] = Field(None, examples=['MyAccountName']) notifications: Optional[NotificationsV2] = None payorId: Optional[UUID] = None physicalAccountId: Optional[UUID] = None physicalAccountName: str = Field(..., examples=['VELO_FBO_MYBANKA_USD']) pooled: bool railsId: str = Field(..., examples=['BOA_RAIL']) class SourceAccountResponseV3(BaseModel): autoTopUpConfig: Optional[AutoTopUpConfigV3] = None balance: Optional[int] = Field( None, description='Decimal implied', examples=[1203489] ) country: Optional[constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2)] = ( Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) ) currency: Optional[constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3)] = ( Field( None, description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) ) customerId: Optional[str] = Field(None, examples=['Joe Customer']) deleted: Optional[bool] = Field( None, description='An optional flag for whether the source account has been deleted. Only present in the response if true.', ) deletedAt: Optional[datetime] = Field( None, description='An optional timestamp when the source account has been deleted. Only present in the response if deleted.', examples=['2021-01-27T10:08:25.701Z'], ) fundingRef: Optional[str] = Field( None, description='The funding reference (will not be set for DECOUPLED accounts).', examples=['a1b2c3d4'], ) id: UUID = Field(..., description='Source Account Id') name: Optional[str] = Field(None, examples=['MyAccountName']) notifications: Optional[NotificationsV3] = None payorId: Optional[UUID] = None physicalAccountId: Optional[UUID] = Field( None, description='The physical account id (will not be set for DECOUPLED accounts).', ) physicalAccountName: Optional[str] = Field( None, description='The physical account name (will not be set for DECOUPLED accounts).', examples=['VELO_FBO_MYBANKA_USD'], ) pooled: Optional[bool] = Field( None, description='The pooled account flag (will not be set for DECOUPLED accounts).', ) railsId: str = Field(..., examples=['BOA_RAIL']) type: str = Field(..., examples=['FBO']) userDeleted: Optional[bool] = Field( None, description='An optional flag for whether the source account has been deleted by a user. Only present in the response if true.', ) class SourceAccountSummary(BaseModel): currency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) sourceAccountId: UUID totalCost: int = Field(..., examples=[3344]) class SourceAccountSummaryV3(BaseModel): currency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO 3 character currency code' ) sourceAccountId: UUID totalCost: int = Field(..., examples=[3434]) class SourceAccountTypeV3(RootModel[str]): root: str = Field( ..., description='Type of source account. One of the following values: FBO,PRIVATE,WUBS_DECOUPLED', ) class SourceAccountV3(BaseModel): currency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) sourceAccountId: UUID = Field( ..., description='The id of the payout', examples=['cf81e490-4ab8-49c2-bd68-9d1e725480cb'], ) sourceAccountName: str = Field( ..., description='The name of the source account as referencec in the payout', examples=['AccountName'], ) totalPayoutCost: int = Field( ..., description='The total amount (in mnor units) that will be debited from the source account for the payout', examples=[1000000], ) class SourceEvent(BaseModel): createdAt: datetime = Field( ..., description='ISO8601 timestamp indicating when the source event was created', examples=['2020-06-18T15:09:42Z'], ) eventId: UUID = Field( ..., description='UUID id of the source event in the Velo platform', examples=['270ab907-27ec-4b83-8028-0ff432bbdec4'], ) sourceType: str = Field( ..., description='OA3 Schema type name for the source info which is used as the discriminator value to ensure that data binding works correctly', examples=['payment_status_changed'], ) class SupportedCountry(BaseModel): currencies: Optional[List[IsoCurrency]] = None isoCountryCode: Optional[ constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) ] = Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) class SupportedCountryV2(BaseModel): currencies: Optional[List[IsoCurrency]] = None isoCountryCode: Optional[ constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) ] = Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) regions: Optional[List[RegionV2]] = None class SupportedCurrencyV2(BaseModel): currency: Optional[constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3)] = ( Field( None, description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) ) maxPaymentAmount: Optional[int] = Field( None, description='The max amount allowed in this currency', examples=[100000] ) class SupportedLanguage(RootModel[str]): root: str = Field( ..., description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) class TransferRequestV2(BaseModel): amount: conint(ge=1, le=9999999999) = Field( ..., description='Amount to transfer, in minor units' ) currency: constr(min_length=3, max_length=3) = Field(..., examples=['USD']) toSourceAccountId: UUID = Field( ..., description="The 'to' source account id, which will be credited" ) class TransferRequestV3(BaseModel): amount: conint(ge=1, le=9999999999) = Field( ..., description='Amount to transfer, in minor units' ) currency: constr(pattern=r'^[A-Z]{3}$', min_length=3, max_length=3) = Field( ..., description='Valid ISO 4217 3 letter currency code. See the <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['USD'], title='ISO Currency Code', ) toSourceAccountId: UUID = Field( ..., description="The 'to' source account id, which will be credited" ) class TransmissionTypes(BaseModel): ACH: bool = Field( ..., description='Whether the Payor is allowed to pay via ACH', examples=[True] ) SAME_DAY_ACH: bool = Field( ..., description='Whether the Payor is allowed to pay via same day ACH', examples=[True], ) WIRE: bool = Field( ..., description='Whether the Payor is allowed to pay via wire', examples=[True] ) class TransmissionTypes2(BaseModel): ACH: bool = Field( ..., description='Whether the Payor is allowed to pay via ACH', examples=[True] ) SAME_DAY_ACH: bool = Field( ..., description='Whether the Payor is allowed to pay via same day ACH', examples=[True], ) WIRE: bool = Field( ..., description='Whether the Payor is allowed to pay via wire', examples=[True] ) class MfaType2(Enum): YUBIKEY = 'YUBIKEY' TOTP = 'TOTP' class UnregisterMFARequest(BaseModel): mfaType: MfaType2 = Field( ..., description='The type of the MFA device', examples=['TOTP'] ) verificationCode: Optional[constr(min_length=6, max_length=6)] = Field( None, description="<p>Optional property that MUST be suppied when manually verifying a user</p>\n<p>The user's smsNumber is registered via a separate endpoint and an OTP sent to them</p>\n", examples=['123456'], ) class UpdatePayeeDetailsRequestV4(BaseModel): address: Optional[PayeeAddressV4] = None challenge: Optional[ChallengeV4] = None company: Optional[CompanyV4] = None contactSmsNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The phone number of a device that the payee wishes to receive sms messages on\n', examples=['11235555555'], ) email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) individual: Optional[IndividualV4] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) payeeType: Optional[PayeeTypeEnum] = None class UpdateRemoteIdRequestV3(BaseModel): payorId: UUID = Field(..., examples=['9ac75325-5dcd-42d5-b992-175d7e0a035e']) remoteId: constr(min_length=1, max_length=100) = Field( ..., examples=['remoteId123'] ) class UpdateRemoteIdRequestV4(BaseModel): payorId: UUID = Field(..., examples=['9ac75325-5dcd-42d5-b992-175d7e0a035e']) remoteId: constr(min_length=1, max_length=100) = Field( ..., examples=['remoteId123'] ) class UpdateWebhookRequest(BaseModel): authorizationHeader: Optional[ constr(pattern=r'.*', min_length=4, max_length=1000) ] = Field( None, description='the authorization header to include with the notification.' ) categories: Optional[List[Category]] = Field( None, description='The notification categories to enable.' ) enabled: Optional[bool] = Field(None, description='whether the webhook is enabled.') webhookUrl: Optional[constr(min_length=6, max_length=2000)] = Field( None, description='the webhook URL to use.' ) class UserDetailsUpdateRequest(BaseModel): email: Optional[EmailStr] = Field( None, description='the email address of the user', examples=['foo@example.com'] ) firstName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['John'] ) lastName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['Doe'] ) mfaType: Optional[MFAType] = None primaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The main contact number for the user\n', examples=['11235555555'], ) secondaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The secondary contact number for the user\n', examples=['11235555550'], ) smsNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The phone number of a device that the user can receive sms messages on\n', examples=['11235555555'], ) verificationCode: Optional[constr(min_length=6, max_length=6)] = Field( None, description="<p>Optional property that MUST be suppied when manually verifying a user</p>\n<p>The user's smsNumber is registered via a separate endpoint and an OTP sent to them</p>\n", examples=['123456'], ) class MfaStatus(Enum): REGISTERED = 'REGISTERED' UNREGISTERED = 'UNREGISTERED' class MfaType3(Enum): SMS = 'SMS' YUBIKEY = 'YUBIKEY' TOTP = 'TOTP' class Status(Enum): ENABLED = 'ENABLED' DISABLED = 'DISABLED' PENDING = 'PENDING' class UserResponse(BaseModel): companyName: Optional[constr(min_length=1, max_length=128)] = Field( None, description='The payor or payee company name or null if the user is not a payor or payee user\n', examples=['Acme Corp'], ) email: Optional[EmailStr] = Field( None, description='the email address of the user', examples=['foo@example.com'] ) entityId: Optional[UUID] = Field( None, description='The payorId or payeeId or null if the user is not a payor or payee user\n', examples=['7fffa261-ac68-49e6-b605-d24a444d9206'], ) firstName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['John'] ) id: Optional[UUID] = Field( None, description='The id of the user', examples=['8bbf301c-948f-4445-b411-357eec53e441'], ) lastName: Optional[constr(min_length=1, max_length=128)] = Field( None, examples=['Doe'] ) lockedOut: Optional[bool] = Field( None, description='If true the user is currently locked out and unable to log in', examples=[True], ) lockedOutTimestamp: Optional[datetime] = Field( None, description='A timestamp showing when the user was locked out\nIf null then the user is not currently locked out\n', ) mfaStatus: Optional[MfaStatus] = Field( None, description='The status of the MFA device', examples=['REGISTERED'] ) mfaType: Optional[MfaType3] = Field( None, description='The type of the MFA device', examples=['TOTP'] ) primaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The main contact number for the user\n', examples=['11235555555'], ) roles: Optional[List[Role1]] = Field( None, description='The role(s) for the user\n', examples=[['payor.admin']], min_length=1, ) secondaryContactNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The secondary contact number for the user\n', examples=['11235555550'], ) smsNumber: Optional[constr(pattern=r'^\+[1-9]\d{1,14}$')] = Field( None, description='The phone number of a device that the user can receive sms messages on\n', examples=['11235555555'], ) status: Optional[Status] = Field( None, description='The status of the user\nwhen the user has been invited but not yet enrolled they will have a PENDING status\n', examples=['ENABLED'], ) userType: Optional[UserType] = Field( None, description='Indicates the type of user. Could be BACKOFFICE, PAYOR or PAYEE.', examples=['PAYOR'], ) class UserStatus(Enum): ENABLED = 'ENABLED' DISABLED = 'DISABLED' PENDING = 'PENDING' class UserType2(Enum): BACKOFFICE = 'BACKOFFICE' PAYOR = 'PAYOR' PAYEE = 'PAYEE' class ValidatePasswordResponse(BaseModel): score: Optional[conint(ge=0, le=4)] = Field( None, description='More secure passwords are given a higher score. <P>\nFor a password to be acceptable for use in Velo, it must score at least 3\n', examples=[2], ) suggestions: Optional[List[str]] = None valid: Optional[bool] = Field( None, description='if true then the password can be accepted' ) warning: Optional[str] = Field( None, description='Any warning message as a reason for the given score.', examples=['Historic Password'], ) class VerificationCode(RootModel[Optional[constr(min_length=6, max_length=6)]]): root: Optional[constr(min_length=6, max_length=6)] = Field( None, description="<p>Optional property that MUST be suppied when manually verifying a user</p>\n<p>The user's smsNumber is registered via a separate endpoint and an OTP sent to them</p>\n", examples=['123456'], ) class WatchlistStatusV3(RootModel[str]): root: str = Field( ..., description='Current watchlist status. One of the following values: NONE, PENDING, REVIEW, PASSED, FAILED', ) class WatchlistStatusV4(RootModel[str]): root: str = Field( ..., description='Current watchlist status. One of the following values: NONE, PENDING, REVIEW, PASSED, FAILED', ) class WebhookResponse(BaseModel): authorizationHeader: Optional[str] = None categories: Optional[List[Category]] = None enabled: Optional[bool] = None id: Optional[UUID] = None payorId: Optional[UUID] = None webhookUrl: Optional[str] = None class WebhooksResponse(BaseModel): content: Optional[List[WebhookResponse]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class WithdrawPaymentRequest(BaseModel): reason: constr(min_length=2, max_length=256) = Field( ..., description='Reason for withdrawal', examples=['Payment submitted in error'], ) class Status1(Enum): ACCEPTED = 'ACCEPTED' AWAITING_FUNDS = 'AWAITING_FUNDS' FUNDED = 'FUNDED' UNFUNDED = 'UNFUNDED' BANK_PAYMENT_REQUESTED = 'BANK_PAYMENT_REQUESTED' REJECTED = 'REJECTED' ACCEPTED_BY_RAILS = 'ACCEPTED_BY_RAILS' CONFIRMED = 'CONFIRMED' FAILED = 'FAILED' RETURNED = 'RETURNED' WITHDRAWN = 'WITHDRAWN' class Status3(Enum): ACCEPTED = 'ACCEPTED' REJECTED = 'REJECTED' SUBMITTED = 'SUBMITTED' QUOTED = 'QUOTED' INSTRUCTED = 'INSTRUCTED' COMPLETED = 'COMPLETED' INCOMPLETE = 'INCOMPLETE' CONFIRMED = 'CONFIRMED' WITHDRAWN = 'WITHDRAWN' class Status5(Enum): ACCEPTED = 'ACCEPTED' AWAITING_FUNDS = 'AWAITING_FUNDS' FUNDED = 'FUNDED' UNFUNDED = 'UNFUNDED' BANK_PAYMENT_REQUESTED = 'BANK_PAYMENT_REQUESTED' REJECTED = 'REJECTED' ACCEPTED_BY_RAILS = 'ACCEPTED_BY_RAILS' CONFIRMED = 'CONFIRMED' FAILED = 'FAILED' RETURNED = 'RETURNED' WITHDRAWN = 'WITHDRAWN' class V3PayoutsPostRequest(BaseModel): file: Optional[List[PaymentInstructionV3]] = Field( None, description='Create a new payout from a CSV source file and return a location header with a link to get the payout', ) payorId: Optional[UUID] = Field( None, description='Deprecated in v2.16. Any value supplied here will be ignored.', ) payoutFromPayorId: Optional[UUID] = Field( None, description='The id of the payor whose source account(s) will be debited. payoutFromPayorId and payoutToPayorId must be both supplied or both omitted.', ) payoutToPayorId: Optional[UUID] = Field( None, description='The id of the payor whose payees will be paid. payoutFromPayorId and payoutToPayorId must be both supplied or both omitted.', ) class Status7(Enum): ACCEPTED = 'ACCEPTED' REJECTED = 'REJECTED' WITHDRAWN = 'WITHDRAWN' WITHDRAWABLE = 'WITHDRAWABLE' class TransmissionType1(Enum): ACH = 'ACH' SAME_DAY_ACH = 'SAME_DAY_ACH' WIRE = 'WIRE' class Status9(Enum): ACCEPTED = 'ACCEPTED' AWAITING_FUNDS = 'AWAITING_FUNDS' FUNDED = 'FUNDED' UNFUNDED = 'UNFUNDED' BANK_PAYMENT_REQUESTED = 'BANK_PAYMENT_REQUESTED' REJECTED = 'REJECTED' ACCEPTED_BY_RAILS = 'ACCEPTED_BY_RAILS' CONFIRMED = 'CONFIRMED' FAILED = 'FAILED' RETURNED = 'RETURNED' WITHDRAWN = 'WITHDRAWN' class TransmissionType3(Enum): ACH = 'ACH' SAME_DAY_ACH = 'SAME_DAY_ACH' WIRE = 'WIRE' LOCAL = 'LOCAL' GACHO = 'GACHO' class ScheduleStatus1(Enum): ANY = 'ANY' SCHEDULED = 'SCHEDULED' EXECUTED = 'EXECUTED' FAILED = 'FAILED' class PostInstructFxStatus1(Enum): ANY = 'ANY' INITIATED = 'INITIATED' CANCELLED = 'CANCELLED' EXECUTED = 'EXECUTED' COMPLETED = 'COMPLETED' RETURNED = 'RETURNED' RESUBMITTED = 'RESUBMITTED' REFUNDED = 'REFUNDED' class Status11(Enum): ACCEPTED = 'ACCEPTED' REJECTED = 'REJECTED' SUBMITTED = 'SUBMITTED' QUOTED = 'QUOTED' INSTRUCTED = 'INSTRUCTED' COMPLETED = 'COMPLETED' INCOMPLETE = 'INCOMPLETE' CONFIRMED = 'CONFIRMED' WITHDRAWN = 'WITHDRAWN' class Status13(Enum): ACCEPTED = 'ACCEPTED' AWAITING_FUNDS = 'AWAITING_FUNDS' FUNDED = 'FUNDED' UNFUNDED = 'UNFUNDED' BANK_PAYMENT_REQUESTED = 'BANK_PAYMENT_REQUESTED' REJECTED = 'REJECTED' ACCEPTED_BY_RAILS = 'ACCEPTED_BY_RAILS' CONFIRMED = 'CONFIRMED' FAILED = 'FAILED' RETURNED = 'RETURNED' WITHDRAWN = 'WITHDRAWN' class Include(Enum): payorOnly = 'payorOnly' payorAndDescendants = 'payorAndDescendants' class CreateIndividualV3(BaseModel): dateOfBirth: date = Field( ..., description='Must not be date in future. Example - 1970-05-20', examples=['1970-05-20'], ) name: CreateIndividualV3Name nationalIdentification: Optional[constr(min_length=6, max_length=30)] = Field( None, examples=['SA211123K'] ) class CreatePayeeV3(BaseModel): address: CreatePayeeAddressV3 challenge: Optional[ChallengeV3] = None company: Optional[CompanyV3] = None email: EmailStr = Field(..., examples=['bob@example.com']) individual: Optional[CreateIndividualV3] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) paymentChannel: Optional[CreatePaymentChannelV3] = None payorRefs: Optional[List[PayeePayorRefV3]] = None remoteId: constr(min_length=1, max_length=100) = Field(..., examples=['Remote ID']) type: str = Field( ..., description='Type of Payee. One of the following values: Individual, Company', ) class CreatePayeeV4(BaseModel): address: CreatePayeeAddressV4 challenge: Optional[ChallengeV4] = None company: Optional[CompanyV4] = None email: EmailStr = Field(..., examples=['bob@example.com']) individual: Optional[CreateIndividualV4] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) paymentChannel: Optional[CreatePaymentChannelV4] = None remoteId: constr(min_length=1, max_length=100) = Field(..., examples=['Remote ID']) type: PayeeTypeEnum class CreatePayeesCSVRequestV3(BaseModel): addressCity: constr(min_length=2, max_length=50) = Field(..., examples=['Key West']) addressCountry: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) addressCountyOrProvince: Optional[constr(min_length=1, max_length=50)] = Field( None, examples=['FL'] ) addressLine1: constr(min_length=2, max_length=100) = Field( ..., examples=['500 Duval St'] ) addressLine2: Optional[constr(min_length=0, max_length=100)] = None addressLine3: Optional[constr(min_length=0, max_length=100)] = None addressLine4: Optional[constr(min_length=0, max_length=100)] = None addressZipOrPostcode: constr(min_length=1, max_length=60) = Field( ..., examples=['33945'] ) challengeDescription: Optional[constr(min_length=1, max_length=255)] = Field( None, examples=['challenge description'] ) challengeValue: Optional[constr(min_length=3, max_length=20)] = Field( None, examples=['challenge value'] ) companyEIN: Optional[constr(min_length=6, max_length=30)] = Field( None, examples=['123456789'] ) companyName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['ABC Ltd'] ) companyOperatingName: Optional[constr(min_length=1, max_length=100)] = Field( None, examples=['ABC'] ) email: EmailStr = Field(..., examples=['bob@example.com']) individualDateOfBirth: Optional[date] = Field( None, description='Must not be date in future. Example - 1970-05-20', examples=['1985-01-01'], ) individualFirstName: Optional[constr(min_length=1, max_length=40)] = None individualLastName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Smith'] ) individualNationalIdentification: Optional[constr(min_length=6, max_length=30)] = ( Field(None, examples=['AB123456C']) ) individualOtherNames: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Bob'] ) individualTitle: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Mr'] ) payeeLanguage: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) paymentChannelAccountName: Optional[str] = Field(None, examples=['My Account']) paymentChannelAccountNumber: Optional[constr(min_length=6, max_length=17)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXXX5678'], ) paymentChannelCountryCode: Optional[ constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) ] = Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) paymentChannelCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, examples=['USD'] ) paymentChannelIban: Optional[ constr(pattern=r'^[A-Za-z0-9]+$', min_length=15, max_length=34) ] = Field( None, description='Must match the regular expression ```^[A-Za-z0-9]+$```.', examples=['XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1234'], title='IBAN - International Bank Account Number', ) paymentChannelRoutingNumber: Optional[constr(min_length=9, max_length=9)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXX6789'], ) remoteId: constr(min_length=1, max_length=100) = Field( ..., examples=['remoteId123'] ) type: PayeeTypeEnum class CreatePayeesCSVRequestV4(BaseModel): addressCity: constr(min_length=2, max_length=50) = Field(..., examples=['Key West']) addressCountry: constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) = Field( ..., description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) addressCountyOrProvince: Optional[constr(min_length=1, max_length=50)] = Field( None, examples=['FL'] ) addressLine1: constr(min_length=2, max_length=100) = Field( ..., examples=['500 Duval St'] ) addressLine2: Optional[constr(min_length=0, max_length=100)] = None addressLine3: Optional[constr(min_length=0, max_length=100)] = None addressLine4: Optional[constr(min_length=0, max_length=100)] = None addressZipOrPostcode: constr(min_length=1, max_length=60) = Field( ..., examples=['33945'] ) challengeDescription: Optional[constr(min_length=1, max_length=255)] = Field( None, examples=['challenge description'] ) challengeValue: Optional[constr(min_length=3, max_length=20)] = Field( None, examples=['challenge value'] ) companyEIN: Optional[constr(min_length=6, max_length=30)] = Field( None, examples=['123456789'] ) companyName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['ABC Ltd'] ) companyOperatingName: Optional[constr(min_length=1, max_length=100)] = Field( None, examples=['ABC'] ) email: EmailStr = Field(..., examples=['bob@example.com']) individualDateOfBirth: Optional[date] = Field( None, description='Must not be date in future. Example - 1970-05-20', examples=['1985-01-01'], ) individualFirstName: Optional[constr(min_length=1, max_length=40)] = None individualLastName: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Smith'] ) individualNationalIdentification: Optional[constr(min_length=6, max_length=30)] = ( Field(None, examples=['AB123456C']) ) individualOtherNames: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Bob'] ) individualTitle: Optional[constr(min_length=1, max_length=40)] = Field( None, examples=['Mr'] ) payeeLanguage: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) paymentChannelAccountName: Optional[str] = Field(None, examples=['My Account']) paymentChannelAccountNumber: Optional[constr(min_length=6, max_length=17)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXXX5678'], ) paymentChannelCountryCode: Optional[ constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2) ] = Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) paymentChannelCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, examples=['USD'] ) paymentChannelIban: Optional[ constr(pattern=r'^[A-Za-z0-9]+$', min_length=15, max_length=34) ] = Field( None, description='Must match the regular expression ```^[A-Za-z0-9]+$```.', examples=['XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1234'], title='IBAN - International Bank Account Number', ) paymentChannelRoutingNumber: Optional[constr(min_length=9, max_length=9)] = Field( None, description='Either routing number and account number or only iban must be set', examples=['XXXXX6789'], ) remoteId: constr(min_length=1, max_length=100) = Field( ..., examples=['remoteId123'] ) type: PayeeTypeEnum class CreatePayeesCSVResponseV3(BaseModel): batchId: Optional[UUID] = Field( None, examples=['cb6ff8c6-85e9-45a6-b7d9-d05305db67f3'] ) rejectedCsvRows: Optional[List[CreatePayeesCSVResponseV3RejectedCsvRows]] = None class CreatePayeesRequestV3(BaseModel): payees: List[CreatePayeeV3] payorId: str = Field(..., examples=['9ac75325-5dcd-42d5-b992-175d7e0a035e']) class CreatePayeesRequestV4(BaseModel): payees: List[CreatePayeeV4] payorId: str = Field(..., examples=['9ac75325-5dcd-42d5-b992-175d7e0a035e']) class CreatePayoutRequestV3(BaseModel): payments: List[PaymentInstructionV3] = Field(..., max_length=2000, min_length=1) payoutFromPayorId: Optional[UUID] = Field( None, description='<p>The id of the payor whose source account(s) will be debited</p>\n<p>payoutFromPayorId and payoutToPayorId must be both supplied or both omitted</p>\n', examples=['c4261044-13df-4a6c-b1d4-fa8be2b46f5a'], ) payoutMemo: Optional[constr(max_length=40)] = Field( None, description='<p>Text applied to all payment memos unless specified explicitly on a payment</p>\n<p>This should be the reference field on the statement seen by the payee (but not via ACH)</p>\n', examples=['Monthly Payment'], ) payoutToPayorId: Optional[UUID] = Field( None, description='<p>The id of the payor whose payees will be paid</p>\n<p>payoutFromPayorId and payoutToPayorId must be both supplied or both omitted</p>\n', examples=['9afc6b39-de12-466a-a9ca-07c7a23b312d'], ) class DebitEvent(SourceEvent, DebitEventAllOf): pass class DebitStatusChanged(DebitEvent, DebitStatusChangedAllOf): sourceType: Literal['debit_status_changed'] class Error(BaseModel): errorCode: Optional[str] = Field( None, description='Unique numeric code that can be used for switching client behavior or to drive translated or customised error messages', examples=['20110003'], ) errorData: Optional[ErrorData] = None errorMessage: Optional[str] = Field( None, description='English language message indicating the nature of the error', examples=['size must be between 0 and 10'], ) localisationDetails: Optional[LocalisationDetails] = None location: Optional[str] = Field( None, description='the property or object that caused the error', examples=['firstName'], ) locationType: Optional[LocationType] = Field( None, description='the location type in the request that was the cause of the error\n', examples=['requestBody'], ) reasonCode: Optional[str] = Field( None, description='a camel-cased string that can be used by clients to localise client error messages (deprecated)', examples=['validationError'], ) class ErrorResponse(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[400], ) class FailedPayeeV3(BaseModel): address: Optional[CreatePayeeAddressV3] = None challenge: Optional[ChallengeV3] = None company: Optional[CompanyV3] = None email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) individual: Optional[CreateIndividualV3] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) paymentChannel: Optional[CreatePaymentChannelV3] = None payorRefs: Optional[List[PayeePayorRefV3]] = None remoteId: Optional[str] = Field(None, examples=['Remote ID']) type: Optional[str] = Field( None, description='Type of Payee. One of the following values: Individual, Company', ) class FailedPayeeV4(BaseModel): address: Optional[CreatePayeeAddressV4] = None challenge: Optional[ChallengeV4] = None company: Optional[CompanyV4] = None email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) individual: Optional[CreateIndividualV4] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) paymentChannel: Optional[CreatePaymentChannelV4] = None payorRefs: Optional[List[PayeePayorRefV4]] = None remoteId: Optional[str] = Field(None, examples=['Remote ID']) type: Optional[str] = Field( None, description='Type of Payee. One of the following values: Individual, Company', ) class FailedSubmissionV3(BaseModel): failedSubmission: Optional[FailedPayeeV3] = None failureMessage: Optional[str] = Field(None, examples=['failure reason']) class FailedSubmissionV4(BaseModel): failedSubmission: Optional[FailedPayeeV4] = None failureMessage: Optional[str] = Field(None, examples=['failure reason']) class FundingAudit(BaseModel): amount: Optional[float] = Field( None, description='The amount funded', examples=[120000] ) currency: Optional[str] = Field( None, description='The currency of the funding', examples=['USD'] ) dateTime: Optional[datetime] = None events: Optional[List[FundingEvent]] = None fundingAccountName: Optional[str] = None fundingType: Optional[str] = Field( None, description='Funding type. One of the following values: ACH, WIRE, EMBEDDED, BANK_TRANSFER', ) sourceAccountName: Optional[str] = None status: Optional[str] = Field( None, description='Status of the funding. One of the following values: PENDING, FAILED, CREDIT, DEBIT', ) topupType: Optional[str] = Field( None, description='Type of top up. One of the following values: AUTOMATIC, MANUAL', ) class GetFundingsResponse(BaseModel): content: Optional[List[FundingAudit]] = None links: Optional[List[GetFundingsResponseLinks]] = None page: Optional[PagedUserResponsePage] = None class GetPayeeListResponseIndividualV3(BaseModel): name: Optional[NameV3] = None class GetPayeeListResponseIndividualV4(BaseModel): name: Optional[NameV4] = None class GetPayeeListResponseV3(BaseModel): company: Optional[GetPayeeListResponseCompanyV3] = None country: Optional[constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2)] = ( Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) ) created: Optional[datetime] = Field(None, examples=['2019-01-20T09:00:00Z']) disabled: Optional[bool] = None disabledComment: Optional[str] = Field(None, examples=['reason for disabled']) disabledUpdatedTimestamp: Optional[datetime] = Field( None, examples=['2019-01-20T09:00:00Z'] ) displayName: Optional[str] = Field(None, examples=['ABC']) email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) individual: Optional[GetPayeeListResponseIndividualV3] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) onboardedStatus: Optional[str] = Field( None, description='Onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) payeeType: Optional[str] = Field( None, description='Type of Payee. One of the following values: Individual, Company', ) payorRefs: Optional[List[PayeePayorRefV3]] = None watchlistOverrideComment: Optional[str] = Field( None, examples=['Example reason for the watchlist status being overridden'] ) watchlistStatus: Optional[str] = Field( None, description='Current watchlist status. One of the following values: NONE, PENDING, REVIEW, PASSED, FAILED', ) watchlistStatusUpdatedTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) class GetPayeeListResponseV4(BaseModel): company: Optional[GetPayeeListResponseCompanyV4] = None country: Optional[constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2)] = ( Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) ) created: Optional[datetime] = Field(None, examples=['2019-01-20T09:00:00Z']) disabled: Optional[bool] = None disabledComment: Optional[str] = Field(None, examples=['reason for disabled']) disabledUpdatedTimestamp: Optional[datetime] = Field( None, examples=['2019-01-20T09:00:00Z'] ) displayName: Optional[str] = Field(None, examples=['ABC']) email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) individual: Optional[GetPayeeListResponseIndividualV4] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) onboardedStatus: Optional[str] = Field( None, description='Payee onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) payeeType: Optional[str] = Field( None, description='Type of Payee. One of the following values: Individual, Company', ) payorRefs: Optional[List[PayeePayorRefV4]] = None watchlistOverrideComment: Optional[str] = Field( None, examples=['Example reason for the watchlist status being overridden'] ) watchlistStatus: Optional[str] = Field( None, description='Current watchlist status. One of the following values: NONE, PENDING, REVIEW, PASSED, FAILED', ) watchlistStatusUpdatedTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) class GetPaymentsForPayoutResponseV3(BaseModel): content: Optional[List[PaymentResponseV3]] = None links: Optional[List[GetPayoutsResponseV3Links]] = None page: Optional[GetPaymentsForPayoutResponseV3Page] = None summary: Optional[GetPaymentsForPayoutResponseV3Summary] = None class GetPaymentsForPayoutResponseV4Summary(BaseModel): confirmedPayments: Optional[int] = Field( None, description='The count of payments within the payout which have been confirmed.', ) incompletePayments: Optional[int] = Field( None, description='The count of payments within the payout which are incomplete.', ) instructed: Optional[PayoutPrincipal] = None instructedDateTime: Optional[datetime] = Field( None, description='The date/time at which the payout was instructed.' ) payoutFrom: Optional[PayoutPayor] = None payoutMemo: Optional[str] = Field( None, description='The memo attached to the payout.' ) payoutStatus: Optional[str] = Field( None, description='Current status of the Payout. One of the following values: ACCEPTED, REJECTED, SUBMITTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, CONFIRMED, WITHDRAWN', ) payoutTo: Optional[PayoutPayor] = None payoutType: Optional[str] = Field( None, description='The type of payout. One of the following values: STANDARD, AS, ON_BEHALF_OF', ) quoted: Optional[PayoutPrincipal] = None quotedDateTime: Optional[datetime] = Field( None, description='The date/time at which the payout was quoted.' ) releasedPayments: Optional[int] = Field( None, description='The count of payments within the payout which have been released.', ) returnedPayments: Optional[int] = Field( None, description='The count of payments within the payout which have been returned.', ) schedule: Optional[PayoutSchedule] = None submittedDateTime: Optional[datetime] = Field( None, description='The date/time at which the payout was submitted.' ) submitting: Optional[PayoutPayor] = None totalPayments: Optional[int] = Field( None, description='The count of payments within the payout.' ) withdrawn: Optional[PayoutPrincipal] = None withdrawnDateTime: Optional[datetime] = None withdrawnPayments: Optional[int] = Field( None, description='The count of payments within the payout which have been withdrawn.', ) class IndividualV3(BaseModel): dateOfBirth: str = Field( ..., description='If not authorized to view, value will be masked. Example: - XXXX-XX-XX', examples=['1985-01-01'], ) name: IndividualV3Name nationalIdentification: Optional[constr(min_length=6, max_length=30)] = Field( None, description='If not authorized to view, value will be masked. Example: XXXXX1234', examples=['AB123456C'], ) class ListFundingAccountsResponseV2(BaseModel): content: Optional[List[FundingAccountResponseV2]] = None links: Optional[List[ListFundingAccountsResponseV2Links]] = None page: Optional[ListFundingAccountsResponseV2Page] = None class ListPaymentsResponseV3(BaseModel): content: Optional[List[PaymentResponseV3]] = None links: Optional[List[GetPayoutsResponseV3Links]] = None page: Optional[ListPaymentsResponseV3Page] = None class ListSourceAccountResponseV2(BaseModel): content: Optional[List[SourceAccountResponseV2]] = None links: Optional[List[ListSourceAccountResponseV2Links]] = None page: Optional[PagedUserResponsePage] = None class ListSourceAccountResponseV3(BaseModel): content: Optional[List[SourceAccountResponseV3]] = None links: Optional[List[ListSourceAccountResponseV3Links]] = None page: Optional[PagedUserResponsePage] = None class MFADetails(BaseModel): mfa_type: Optional[MFAType] = None verified: Optional[bool] = Field( None, description='true if the user has used the MFA device for login', examples=[True], ) class PagedPayeeInvitationStatusResponseV3(BaseModel): content: Optional[List[PayeeInvitationStatusResponseV3]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class PagedPayeeInvitationStatusResponseV4(BaseModel): content: Optional[List[PayeeInvitationStatusResponseV4]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class PagedPayeeResponseV3(BaseModel): content: Optional[List[GetPayeeListResponseV3]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeResponseV3Page] = None summary: Optional[PagedPayeeResponseV3Summary] = None class PagedPayeeResponseV4(BaseModel): content: Optional[List[GetPayeeListResponseV4]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeResponseV3Page] = None summary: Optional[PagedPayeeResponseV3Summary] = None class PagedUserResponse(BaseModel): content: Optional[List[UserResponse]] = None links: Optional[List[PagedUserResponseLinks]] = None page: Optional[PagedUserResponsePage] = None class PayeeDeltaResponseV3(BaseModel): content: Optional[List[PayeeDeltaV3]] = None links: Optional[List[PayeeDeltaResponseV3Links]] = None page: Optional[PayeeDeltaResponseV3Page] = None class PayeeDeltaResponseV4(BaseModel): content: Optional[List[PayeeDeltaV4]] = None links: Optional[List[PayeeDeltaResponseV4Links]] = None page: Optional[PayeeDeltaResponseV3Page] = None class PayeeDetailResponseV3(BaseModel): acceptTermsAndConditionsTimestamp: Optional[datetime] = Field( None, description='The timestamp when the payee last accepted T&Cs', examples=['2019-01-20T09:00:00Z'], ) address: Optional[PayeeAddressV3] = None cellphoneNumber: Optional[str] = Field(None, examples=['1234567890']) challenge: Optional[ChallengeV3] = None company: Optional[CompanyV3] = None country: Optional[constr(pattern=r'^[A-Z]{2}$', min_length=2, max_length=2)] = ( Field( None, description='Valid ISO 3166 2 character country code. See the <a href="https://www.iso.org/iso-3166-country-codes.html" target="_blank" a>ISO specification</a> for details.', examples=['US'], title='ISO 3166 2 Character Country Code', ) ) created: Optional[datetime] = Field(None, examples=['2019-01-20T09:00:00Z']) disabled: Optional[bool] = None disabledComment: Optional[str] = Field(None, examples=['reason for disabled']) disabledUpdatedTimestamp: Optional[datetime] = Field( None, examples=['2019-01-20T09:00:00Z'] ) displayName: Optional[str] = Field(None, examples=['Bob']) email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) enhancedKycCompleted: Optional[bool] = None gracePeriodEndDate: Optional[date] = Field(None, examples=['2019-01-20']) individual: Optional[IndividualV3] = None kycCompletedTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) marketingOptInDecision: Optional[bool] = None marketingOptInTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) onboardedStatus: Optional[str] = Field( None, description='Onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) pausePayment: Optional[bool] = None pausePaymentTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) payeeType: Optional[str] = Field( None, description='Type of Payee. One of the following values: Individual, Company', ) payorRefs: Optional[List[PayeePayorRefV3]] = None watchlistOverrideComment: Optional[str] = Field( None, examples=['watchlist override comment'] ) watchlistOverrideExpiresAtTimestamp: Optional[datetime] = Field( None, examples=['2019-01-20T09:00:00Z'] ) watchlistStatus: Optional[str] = Field( None, description='Current watchlist status. One of the following values: NONE, PENDING, REVIEW, PASSED, FAILED', ) watchlistStatusUpdatedTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) class PayeeDetailResponseV4(BaseModel): acceptTermsAndConditionsTimestamp: Optional[datetime] = Field( None, description='The timestamp when the payee last accepted T&Cs', examples=['2019-01-20T09:00:00Z'], ) address: Optional[PayeeAddressV4] = None cellphoneNumber: Optional[str] = Field(None, examples=['1234567890']) challenge: Optional[ChallengeV4] = None company: Optional[CompanyV4] = None country: Optional[str] = Field(None, examples=['US']) created: Optional[datetime] = Field(None, examples=['2019-01-20T09:00:00Z']) disabled: Optional[bool] = None disabledComment: Optional[str] = Field(None, examples=['reason for disabled']) disabledUpdatedTimestamp: Optional[datetime] = Field( None, examples=['2019-01-20T09:00:00Z'] ) displayName: Optional[str] = Field(None, examples=['Bob']) email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) enhancedKycCompleted: Optional[bool] = None gracePeriodEndDate: Optional[date] = Field(None, examples=['2019-01-20']) individual: Optional[IndividualV4] = None kycCompletedTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) marketingOptInDecision: Optional[bool] = None marketingOptInTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) onboardedStatus: Optional[str] = Field( None, description='Payee onboarded status. One of the following values: CREATED, INVITED, REGISTERED, ONBOARDED', ) pausePayment: Optional[bool] = None pausePaymentTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) payeeId: Optional[UUID] = Field( None, examples=['2aa5d7e0-2ecb-403f-8494-1865ed0454e9'] ) payeeType: Optional[str] = Field( None, description='Type of Payee. One of the following values: Individual, Company', ) payorRefs: Optional[List[PayeePayorRefV4]] = None watchlistOverrideComment: Optional[str] = Field( None, examples=['watchlist override comment'] ) watchlistOverrideExpiresAtTimestamp: Optional[datetime] = Field( None, examples=['2019-01-20T09:00:00Z'] ) watchlistStatus: Optional[str] = Field( None, description='Current watchlist status. One of the following values: NONE, PENDING, REVIEW, PASSED, FAILED', ) watchlistStatusUpdatedTimestamp: Optional[str] = Field( None, examples=['2019-01-20T09:00:00+00:00'] ) class PayeeEventAllOf(BaseModel): payeeId: UUID = Field( ..., description='ID of this payee within the Velo platform', examples=['cbd9280f-8fde-4190-b014-979d88f3ec54'], ) reasons: Optional[List[PayeeEventAllOfReasons]] = Field( None, description='The reasons for the event notification.' ) class PaymentChannelCountry(BaseModel): isoCountryCode: str = Field( ..., description='The ISO code for the country', examples=['US'] ) rules: List[PaymentChannelRule] = Field( ..., description='The rules for the given country' ) class PaymentChannelRulesResponse(BaseModel): bank: Optional[List[PaymentChannelCountry]] = None class PaymentDeltaResponseV1(BaseModel): content: Optional[List[PaymentDeltaV1]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class PaymentEventAllOf(BaseModel): paymentId: UUID = Field( ..., description='ID of this payment within the Velo platform', examples=['cbd9280f-8fde-4190-b014-979d88f3ec54'], ) payorPaymentId: Optional[str] = Field( None, description='ID of this payment in the payors system', examples=['ourpayment-id12345'], ) payoutPayorIds: Optional[PayoutPayorIds] = None class PaymentResponseV4Payout(BaseModel): payoutFrom: Optional[PayoutPayor] = None payoutId: Optional[UUID] = None payoutTo: Optional[PayoutPayor] = None class PayorLinksResponse(BaseModel): links: Optional[List[PayorLinksResponseLinks]] = None payors: Optional[List[PayorLinksResponsePayors]] = None class PayorV1(BaseModel): address: Optional[PayorAddress] = None allowsLanguageChoice: Optional[bool] = Field( None, description='Whether or not the payor allows language choice in the UI.' ) collectiveAlias: Optional[str] = Field( None, description='How the payor has chosen to refer to payees.', examples=['Payee'], ) dbaName: Optional[str] = Field( None, description="The payor’s 'Doing Business As' name.", examples=['Some Biz'] ) fundingAccountAccountName: Optional[str] = Field( None, description='The funding account name to be used for the payor.', examples=['Example Corp BOA'], ) fundingAccountAccountNumber: Optional[str] = Field( None, description='The funding account number to be used for the payor.', examples=['1234567890123'], ) fundingAccountRoutingNumber: Optional[str] = Field( None, description='The funding account routing number to be used for the payor.', examples=['123456789'], ) includesReports: Optional[bool] = None kycState: Optional[str] = Field( None, description='The kyc state of the payor. One of the following values: FAILED_KYC, PASSED_KYC, REQUIRES_KYC', examples=['PASSED_KYC'], ) language: Optional[str] = Field( None, description='The payor’s language preference. Must be one of [EN, FR].', examples=['EN'], ) manualLockout: Optional[bool] = Field( None, description='Whether or not the payor has been manually locked by the backoffice.', ) maxMasterPayorAdmins: Optional[int] = None payeeGracePeriodDays: Optional[int] = Field( None, description='The grace period for paying payees in days.' ) payeeGracePeriodProcessingEnabled: Optional[bool] = Field( None, description='Whether grace period processing is enabled.' ) payorId: Optional[UUID] = None payorName: str = Field( ..., description='The name of the payor.', examples=['Example, Corp'] ) primaryContactEmail: Optional[EmailStr] = Field( None, description='Primary contact email for the payor.', examples=['joe.buck@example.com'], ) primaryContactName: Optional[str] = Field( None, description='Name of primary contact for the payor.', examples=['Joe Buck'], ) primaryContactPhone: Optional[str] = Field( None, description='Primary contact phone number for the payor.', examples=['123-123-1234'], ) reminderEmailsOptOut: Optional[bool] = Field( None, description='Whether or not the payor has opted-out of reminder emails being sent.', ) supportContact: Optional[str] = Field( None, description='The payor’s support contact email address.', examples=['support@example.com'], ) transmissionTypes: Optional[TransmissionTypes] = None class PayorV2(BaseModel): address: Optional[PayorAddressV2] = None allowsLanguageChoice: Optional[bool] = Field( None, description='Whether or not the payor allows language choice in the UI.' ) collectiveAlias: Optional[str] = Field( None, description='How the payor has chosen to refer to payees.', examples=['Payee'], ) dbaName: Optional[str] = Field( None, description="The payor’s 'Doing Business As' name.", examples=['Some Biz'] ) includesReports: Optional[bool] = None kycState: Optional[str] = Field( None, description='The kyc state of the payor. One of the following values: FAILED_KYC, PASSED_KYC, REQUIRES_KYC', examples=['PASSED_KYC'], ) language: Optional[str] = Field( None, description='The payor’s language preference. Must be one of [EN, FR]', examples=['EN'], ) managingPayees: Optional[bool] = None manualLockout: Optional[bool] = Field( None, description='Whether or not the payor has been manually locked by the backoffice.', ) maxMasterPayorAdmins: Optional[int] = None openBankingEnabled: Optional[bool] = Field( None, description='Is Open Banking supported for this payor' ) payeeGracePeriodDays: Optional[int] = Field( None, description='The grace period for paying payees in days.' ) payeeGracePeriodProcessingEnabled: Optional[bool] = Field( None, description='Whether grace period processing is enabled.' ) paymentRails: Optional[str] = Field(None, description='The id of the payment rails') payorId: UUID payorName: str = Field( ..., description='The name of the payor.', examples=['Example, Corp'] ) payorXid: Optional[str] = Field( None, description='A unique identifier that an external system uses to reference the payor in their system', examples=['ABC_201234'], ) primaryContactEmail: Optional[EmailStr] = Field( None, description='Primary contact email for the payor.', examples=['joe.buck@example.com'], ) primaryContactName: Optional[str] = Field( None, description='Name of primary contact for the payor.', examples=['Joe Buck'], ) primaryContactPhone: Optional[str] = Field( None, description='Primary contact phone number for the payor.', examples=['123-123-1234'], ) provider: Optional[str] = Field( None, description='The source of the payorXid, default is null which means Velo' ) reminderEmailsOptOut: Optional[bool] = Field( None, description='Whether or not the payor has opted-out of reminder emails being sent.', ) remoteSystemIds: Optional[List[str]] = Field( None, description='The payor’s supported remote systems by id' ) supportContact: Optional[str] = Field( None, description='The payor’s support contact email address.', examples=['support@example.com'], ) transmissionTypes: Optional[TransmissionTypes2] = None usdTxnValueReportingThreshold: Optional[int] = Field( None, description='USD in minor units', examples=[1000000] ) wuCustomerId: Optional[str] = None class PayoutIndividualV3(BaseModel): name: PayoutNameV3 class PayoutPayeeV3(BaseModel): company: Optional[PayoutCompanyV3] = None individual: Optional[PayoutIndividualV3] = None payeeId: UUID class PayoutSummaryAudit(BaseModel): dateTime: Optional[datetime] = None fxSummaries: Optional[List[FxSummary]] = None instructedDateTime: Optional[str] = None payorId: Optional[UUID] = None payorName: str payoutId: Optional[UUID] = None payoutMemo: Optional[str] = None payoutType: str = Field( ..., description='The type of payout. One of the following values: STANDARD, AS, ON_BEHALF_OF', ) schedule: Optional[PayoutSchedule] = None sourceAccountSummary: Optional[List[SourceAccountSummary]] = None status: str = Field( ..., description='Current status of the Payout. One of the following values: ACCEPTED, REJECTED, SUBMITTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, CONFIRMED, WITHDRAWN', ) submittedDateTime: str totalIncompletePayments: Optional[int] = None totalPayments: Optional[int] = None totalReturnedPayments: Optional[int] = None totalWithdrawnPayments: Optional[int] = None withdrawnDateTime: Optional[datetime] = None class PayoutSummaryAuditV3(BaseModel): fxSummaries: Optional[List[FxSummaryV3]] = None instructedDateTime: Optional[str] = None payorId: Optional[UUID] = None payoutId: UUID payoutMemo: Optional[str] = None sourceAccountSummary: Optional[List[SourceAccountSummaryV3]] = None status: str = Field( ..., description='Current status of the payout. One of the following values: ACCEPTED, REJECTED, SUBMITTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, CONFIRMED, WITHDRAWN', ) submittedDateTime: str totalFailedPayments: Optional[int] = Field(None, examples=[123]) totalIncompletePayments: Optional[int] = Field(None, examples=[123]) totalPayments: Optional[int] = Field(None, examples=[123]) withdrawnDateTime: Optional[str] = None class PayoutSummaryResponseV3(BaseModel): acceptedPayments: List[AcceptedPaymentV3] accounts: List[SourceAccountV3] fxSummaries: List[QuoteFxSummaryV3] paymentsAccepted: Optional[int] = Field( None, description='The number of payments that were accepted in the payout', examples=[9], ) paymentsRejected: Optional[int] = Field( None, description='The number of payments that were rejected in the payout', examples=[1], ) paymentsSubmitted: Optional[int] = Field( None, description='The number of payments that were submitted in the payout', examples=[10], ) paymentsWithdrawn: int = Field( ..., description='The number of payments that were withdrawn in the payout', examples=[0], ) payoutId: Optional[UUID] = Field( None, description='The id of the payout', examples=['cf81e490-4ab8-49c2-bd68-9d1e725480cb'], ) rejectedPayments: List[RejectedPaymentV3] schedule: Optional[PayoutScheduleV3] = None status: Optional[str] = Field( None, description='The status of the payout (one of SUBMITTED, ACCEPTED, REJECTED, QUOTED, INSTRUCTED, COMPLETED, INCOMPLETE, WITHDRAWN)', examples=['COMPLETED'], ) class Ping(SourceEvent): sourceType: Literal['ping'] class QueryBatchResponseV3(BaseModel): failureCount: Optional[int] = Field(None, examples=[2]) failures: Optional[List[FailedSubmissionV3]] = None pendingCount: Optional[int] = Field(None, examples=[2]) status: Optional[str] = Field( None, description='Batch Status. One of the following values: SUBMITTED, ACCEPTED', ) class QueryBatchResponseV4(BaseModel): failureCount: Optional[int] = Field(None, examples=[2]) failures: Optional[List[FailedSubmissionV4]] = None pendingCount: Optional[int] = Field(None, examples=[2]) status: Optional[str] = Field( None, description='Batch Status. One of the following values: SUBMITTED, ACCEPTED', ) class SupportedCountriesResponse(BaseModel): countries: Optional[List[SupportedCountry]] = None class SupportedCountriesResponseV2(BaseModel): countries: Optional[List[SupportedCountryV2]] = None class SupportedCurrencyResponseV2(BaseModel): currencies: Optional[List[SupportedCurrencyV2]] = None class UpdatePayeeDetailsRequestV3(BaseModel): address: Optional[PayeeAddressV3] = None challenge: Optional[ChallengeV3] = None company: Optional[CompanyV3] = None email: Optional[EmailStr] = Field(None, examples=['bob@example.com']) individual: Optional[IndividualV3] = None language: Optional[str] = Field( None, description='An IETF BCP 47 language code which has been configured for use within this Velo environment.<BR>\nSee the /v1/supportedLanguages endpoint to list the available codes for an environment.\n', examples=['en-US'], ) payeeType: Optional[PayeeTypeEnum] = None class UserInfo(BaseModel): mfa_details: Optional[MFADetails] = None userType: Optional[UserType2] = None user_id: Optional[UUID] = Field( None, description='the id of the user', examples=['39976ee5-dc4c-4b21-a966-a04fa71ef9e1'], ) class InlineResponse400(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[400], ) class InlineResponse401(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[401], ) class InlineResponse403(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[403], ) class InlineResponse404(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[404], ) class InlineResponse409(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[409], ) class InlineResponse412(BaseModel): correlationId: Optional[UUID] = Field( None, description='a unique identifier to track a request or related sequence of requests', examples=['ee53e01d-c078-43fd-abd4-47e92f4a06cf'], ) errors: Optional[List[Error]] = Field( None, description='one or more errors', min_length=1 ) httpStatusCode: Optional[int] = Field( None, description='this will mirror the Status-Code part of the Status-Line http response header and is included for extra clarity', examples=[412], ) class V3PayeesPostRequest(BaseModel): file: Optional[List[CreatePayeesCSVRequestV3]] = Field( None, description='CSV File of payee data' ) payorId: Optional[UUID] = None class V4PayeesPostRequest(BaseModel): file: Optional[List[CreatePayeesCSVRequestV4]] = Field( None, description='CSV File of payee data' ) payorId: Optional[UUID] = None class AccessTokenResponse(BaseModel): access_token: Optional[str] = Field( None, description='Bearer token used in headers to access secure endpoints\n', examples=['9b58410b-e1b7-4f90-bebb-7e09c5427020'], ) entityIds: Optional[List[str]] = Field( None, description='If the user is a payee then the payeeId<P>\nIf the user is a payor then the payorId\n', examples=[['ed89eaa0-4450-4916-a4ff-62a328d60bd6']], ) expires_in: Optional[int] = Field( None, description='The lifetime in seconds of the access token', examples=[1800] ) refresh_token: Optional[str] = Field( None, description='can be used to obtain a new access token', examples=['c3d0f771-0997-4814-84e3-09690208545a'], ) scope: Optional[str] = Field( None, description='the scope of the access token', examples=['https://api.velopayments.com/scopes/auth/users'], ) token_type: Optional[str] = Field( 'bearer', description='the type of the token', examples=['bearer'] ) user_info: Optional[UserInfo] = None class GetPayoutsResponse(BaseModel): content: Optional[List[PayoutSummaryAudit]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class GetPayoutsResponseV3(BaseModel): content: Optional[List[PayoutSummaryAuditV3]] = None links: Optional[List[GetPayoutsResponseV3Links]] = None page: Optional[GetPayoutsResponseV3Page] = None class PayeeEvent(SourceEvent, PayeeEventAllOf): pass class PaymentEvent(SourceEvent, PaymentEventAllOf): pass class PaymentResponseV4(BaseModel): accountName: Optional[str] = Field(None, examples=['My Account Name']) accountNumber: Optional[str] = Field( None, description='The account number for the account which will receive the payment.', examples=['123123232323'], ) autoWithdrawnReasonCode: Optional[str] = Field( None, description='Populated with rejection reason code if the payment was withdrawn automatically at instruct time', ) countryCode: Optional[str] = Field( None, description='The country code of the payment channel.', examples=['US'] ) events: List[PaymentEventResponse] filenameReference: Optional[str] = Field( None, description='ACH file payment was submitted in, if applicable', examples=['file ref'], ) fundingStatus: str = Field( ..., description='Current funding status of the payment. One of the following values: FUNDED, INSTRUCTED, UNFUNDED', ) iban: Optional[str] = Field( None, description='The iban for the payment.', examples=['DE89 3704 0044 0532 0130 00'], ) individualIdentificationNumber: Optional[str] = Field( None, description='Individual Identification Number assigned to the payment in the ACH file, if applicable', examples=['1231231adf'], ) invertedRate: Optional[float] = Field( None, description='The inverted FX rate for the payment, if FX was involved. **Note** that (depending on the role of the caller) this information may not be displayed', ) isPaymentCcyBaseCcy: Optional[bool] = None payeeAddressCountryCode: Optional[str] = Field( None, description="The country code of the payee's address.", examples=['US'] ) payeeId: UUID = Field(..., description='The id of the paymeee') paymentAmount: int = Field( ..., description='The amount which the payee will receive' ) paymentChannelId: Optional[str] = Field(None, examples=['123asdf']) paymentChannelName: Optional[str] = Field(None, examples=['My Payment Channel']) paymentCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) paymentId: UUID = Field(..., description='The id of the payment') paymentMemo: Optional[str] = Field( None, description='The payment memo set by the payor', examples=['Payment memo'] ) paymentMetadata: Optional[str] = Field( None, description='Metadata for the payment', examples=['sample metadata'] ) paymentScheme: Optional[str] = None paymentTrackingReference: Optional[str] = None payorId: UUID = Field(..., description='The id of the payor') payorName: Optional[str] = Field(None, description='The name of the payor') payorPaymentId: Optional[str] = Field(None, examples=['123123asdf']) payout: Optional[PaymentResponseV4Payout] = None postInstructFxInfo: Optional[PostInstructFxInfo] = None quoteId: UUID = Field(..., description='The quote Id used for the FX') railsBatchId: Optional[str] = None railsId: str = Field( ..., description='The rails ID. Default value is RAILS ID UNAVAILABLE when not populated.', examples=['asdf123'], ) railsPaymentId: Optional[str] = None rate: Optional[float] = Field( None, description='The FX rate for the payment, if FX was involved. **Note** that (depending on the role of the caller) this information may not be displayed', ) rejectionReason: Optional[str] = None remoteId: Optional[str] = Field( None, description='The remote id by which the payor refers to the payee. Only populated once payment is confirmed', examples=['aasdf123'], ) remoteSystemId: Optional[str] = Field( None, description='The velo id of the remote system orchestrating the payment. Not populated for normal Velo payments.', examples=['REMOTE_SYSTEM_ID'], ) remoteSystemPaymentId: Optional[str] = Field( None, description='The id of the payment in the remote system. Not populated for normal Velo payments.', ) returnCost: Optional[int] = Field( None, description='The return cost if a returned payment.', examples=[1232] ) returnReason: Optional[str] = Field(None, examples=['Some Reason Value']) routingNumber: Optional[str] = Field( None, description='The routing number for the payment.', examples=['123123123123'], ) schedule: Optional[PayoutSchedule] = None sourceAccountId: UUID = Field( ..., description='The id of the source account from which the payment was taken' ) sourceAccountName: Optional[str] = Field( None, description='The name of the source account from which the payment was taken', examples=['My Account'], ) sourceAmount: Optional[int] = Field( None, description='The source amount for the payment (amount debited to make the payment)', examples=[12345], ) sourceCurrency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='ISO-4217 3 character currency code', examples=['EUR'] ) status: str = Field( ..., description='Current status of the payment. One of the following values: ACCEPTED, AWAITING_FUNDS, FUNDED, UNFUNDED, BANK_PAYMENT_REQUESTED, REJECTED, ACCEPTED_BY_RAILS, CONFIRMED, RETURNED, WITHDRAWN', ) submittedDateTime: datetime traceNumber: Optional[str] = Field( None, description='Trace Number assigned to the payment in the ACH file, if applicable', examples=['abodu123'], ) transmissionType: Optional[str] = Field( None, description='The transmission type of the payment, e.g. ACH, SAME_DAY_ACH, WIRE, GACHO', ) withdrawable: Optional[bool] = None withdrawnReason: Optional[str] = None class PaymentStatusChanged(PaymentEvent, PaymentStatusChangedAllOf): sourceType: Literal['payment_status_changed'] class PaymentV3(BaseModel): amount: Optional[int] = Field( None, description='The amount of the payment in minor units', examples=[10000] ) autoWithdrawnReasonCode: Optional[str] = Field( None, description='Populated only if the payment was automatically withdrawn during instruction for being invalid', examples=['VE0003'], ) currency: Optional[constr(min_length=3, max_length=3)] = Field( None, description='The currency that the payment was made in', examples=['USD'] ) payee: Optional[PayoutPayeeV3] = None paymentId: UUID = Field( ..., description='The id of the payment', examples=['859af785-223b-4d5b-a708-5fa57f006dbb'], ) paymentMemo: Optional[constr(min_length=0, max_length=40)] = Field( None, description='<p>Any value here will override the memo value in the parent payout</p>\n<p>This should be the reference field on the statement seen by the payee (but not via ACH)</p>\n', examples=['INV00112'], ) paymentMetadata: Optional[constr(min_length=0, max_length=512)] = Field( None, description='<p>Metadata about the payment that may be relevant to the specific rails or remote system making the payout</p>\n<p>The structure of the data will be dictated by the requirements of the payment rails</p>\n', examples=['invoiceeId_123|abc001:12345|xyz002:4567'], ) payorPaymentId: Optional[constr(min_length=0, max_length=40)] = Field( None, description='A reference identifier for the payor for the given payee payment', examples=['123211321ABSD'], ) railsId: Optional[str] = Field( None, description='Indicates the 3rd party system involved in making this payment', examples=['SVB'], ) remoteId: Optional[str] = Field( None, description='The remoteId supplied by the payor that identifies the payee', examples=['remoteIdVal123'], ) remoteSystemId: Optional[constr(min_length=1, max_length=100)] = Field( None, description='<p>The identifier for the remote payments system if not Velo</p>\n', examples=['OB012'], ) sourceAccountName: Optional[str] = Field( None, description='The identifier of the source account to debit the payment from', examples=['Chase Bank Account'], ) status: Optional[str] = Field( None, description='Current status of payment. One of the following values: SUBMITTED, ACCEPTED, REJECTED, WITHDRAWN, RETURNED, AWAITING_FUNDS, FUNDED, UNFUNDED, CANCELLED, BANK_PAYMENT_REQUESTED', examples=['AWAITING_FUNDS'], ) transmissionType: Optional[str] = Field( None, description='The transmission method of the payment. One of the following values: ACH, SAME_DAY_ACH, WIRE, LOCAL, SWIFT', examples=['LOCAL'], ) withdrawable: Optional[bool] = Field( None, description='Can this paynent be withdrawn', examples=[False] ) class GetPaymentsForPayoutResponseV4(BaseModel): content: Optional[List[PaymentResponseV4]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None summary: Optional[GetPaymentsForPayoutResponseV4Summary] = None class ListPaymentsResponseV4(BaseModel): content: Optional[List[PaymentResponseV4]] = None links: Optional[List[GetPayoutsResponseV3Links]] = None page: Optional[ListPaymentsResponseV3Page] = None class OnboardingStatusChanged(PayeeEvent): sourceType: Literal['onboarding_status_changed'] class PagedPaymentsResponseV3(BaseModel): content: Optional[List[PaymentV3]] = None links: Optional[List[PagedPayeeResponseV3Links]] = None page: Optional[PagedPayeeInvitationStatusResponseV3Page] = None class PayableStatusChanged(PayeeEvent): sourceType: Literal['payable_status_changed'] class PayeeDetailsChanged(PayeeEvent): sourceType: Literal['payee_details_changed'] class PaymentRejectedOrReturned(PaymentStatusChanged, PaymentRejectedOrReturnedAllOf): sourceType: Literal['payment_rejected_or_returned'] class Notification(BaseModel): apiVersion: str = Field( ..., description='The API version of the notification schema', examples=['1'] ) category: str = Field( ..., description='The category that the notification relates to. One of "payment", "payee", "debit" or "system"', examples=['payment'], ) eventName: str = Field( ..., description='The name of event that led to this notification', examples=['payment.accepted'], ) sequenceNumber: int = Field( ..., description='This is a payor specific sequence number starting at 1 for the first notification sent', examples=[1234], ) source: Optional[ Union[ Ping, PaymentStatusChanged, PaymentRejectedOrReturned, OnboardingStatusChanged, PayableStatusChanged, PayeeDetailsChanged, DebitStatusChanged, ] ] = Field( None, description='One of the available set of source event payloads', discriminator='sourceType', examples=[ { 'createdAt': '2020-06-18T15:09:42Z', 'eventId': '270ab907-27ec-4b83-8028-0ff432bbdec4', 'paymentId': 'cbd9280f-8fde-4190-b014-979d88f3ec54', 'payorPaymentId': 'ourpayment-id12345', 'payoutPayorIds': { 'payoutFromPayorId': 'ac207f97-663c-4429-9d57-ba5b35d6672d', 'payoutToPayorId': 'ac207f97-663c-4429-9d57-ba5b35d6672d', 'submittingPayorId': 'ac207f97-663c-4429-9d57-ba5b35d6672d', }, 'status': 'ACCEPTED', 'type': 'payment_status_changed', } ], )

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ag2-mcp-servers/velo-payments-apis'

If you have feedback or need assistance with the MCP directory API, please join our Discord server