# 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',
}
],
)