Endpoint: https://sandboxapi.kyckglobal.com/apis/userAuth
Endpoint: https://sandboxapi.kyckglobal.com/apis/getPaymentMethodBasedCountry
Endpoint: https://sandboxapi.kyckglobal.com/apis/bulkPaymentByJSON
Endpoint: https://sandboxapi.kyckglobal.com/apis/getPayStub/:Reference_Id
EndPoint: https://sandboxapi.kyckglobal.com/apis/cancelPayment/:Reference_Id
Use the Auth Token Request operation to obtain an auth token. The auth token is used to authenticate your session on the Direct Send platform, and it must be refreshed every 1 hour. Send a POST request to the /userAuth endpoint with your Direct Send account email address and password in the body of the request.
Successful Result |
Direct Send generates a JWT authentication token based on the Payer Id with the information provided by [Company Name] from preset with or without a financial account linked. |
|
Unexpected Conditions |
Result |
|
[Company Name] times out on the token request/Login |
[Company Name] to retry the token request/Login. |
|
Direct Send fails the token request. |
Error codes sent to [Company Name] are listed in Possible Error Messaging document listed as item #3 in references section of this document. |
1 Hour
https://sandboxapi.kyckglobal.com/apis/userAuth
{
"email": "[userEmailAddress]",
"password": "[password]"
}
{
"success": true,
"token": "JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyVHlwZSI6Ikt5Y2siLCJlbWFpbCI6ImJlbHNpbmdlckBreWNrZ2xvYmFsLmNvbSIsInJvbGUiOiJLeWNrLVN1cGVyLUFkbWluIiwibG9naW5TdGF0dXMiOiJsb2dnZWRJbiIsImlhdCI6MTY2MjQ5MzYwMiwiZXhwIjoxNjYyNTgwMDAyfQ.bp14WXJEu1QiU_UfzjL6Es06vlVcRPj-jldljnF2D-c",
"user": {
"role": "Kyck-Super-Admin",
"userType": "Kyck"
}
}
The supported country / currency check for payments methods does a look up for all countries, and provides the list of payment methods & currencies (where applicable) that are supported for that country.
Successful Result |
An array of objects will be returned for reference by [Company Name]. |
||
Alternate Flow |
[Calling the /fecthAllCountryDetails & /getCountryCurrency endpoints can provide the same results, but require multiple steps. |
Unexpected Conditions |
Result |
||
[Company Name] times out on the request |
[Company Name] to retry the get request. |
||
[Company Name]’s JWT Token is expired |
[Company Name] to refresh token and retry the onboarding request. |
https://sandboxapi.kyckglobal.com/apis/getpaymentMethodBasedCountry
This request only includes a Header with the current JWT Token
Response (successful result):
{
"status": true,
"data": [
{
"countryName": "Puerto Rico",
"countryCode": "PRI",
"currency": "USD",
"pushToCard": false,
"pushToAccount": false,
"internationalIAch": false,
"internationalWire": true,
"payPal": false,
"cash": false,
"check": false,
"internationalBankAccount": false,
"employeePaycard": false,
"ach": true,
"ncrPay360": false,
"venmo": false,
"giftCard": false,
"reloadablePrepaidCard": false,
"cashSupportedReceiveCurrency": "USD",
"readyCode": false
},...
Field Definitions:
The Onboard Single Payee operation creates a new Payee record under the Payer Organization specified in the request body.
Successful Result |
The Payee is onboarded successfully and Direct Send generates a Payee Id with the information provided by [Company Name], with or without a financial account linked. |
Alternate Flow |
|
Unexpected Conditions |
Result |
|
[Company Name] times out on the request |
[Company Name] to retry the onboarding request. |
|
[Company Name]’s JWT Token is expired |
[Company Name] to refresh token and retry the onboarding request. |
|
The minimum required Payee details are not provided in the correct format or are missing. |
A ‘false’ response is sent with an appropriate error message is provided for [Company Name] to correct and retry the request.
|
https://sandboxapi.kyckglobal.com/apis/onboardPayeeWithBeneficiary
This request sample has the minimum field requirements for adding a payee.
IBAN Details
{
"payerId": "{{uat_payerid}}",
"email": "[email protected]",
"account": {
"iban": "ES0200492666702094515427"
},
"firstName": "Brad",
"lastName": "Bene test",
"phone": "",
"address": "AV JANDIA S-N APDO. 00000",
"region": "Madrid",
"city": "Madrid",
"postalCode": "35625",
"classification": "Individual",
"paymentMethod": "E"
}
Routing/Account Number Details
{
"payerId": "{{uat_payerid}}",
"email": "[email protected]",
"account": {
"routingCode": "004958786",
"destinationCountry": "ES",
"accountNumber": "2416015745"
},
"firstName": "Brad",
"lastName": "Bene test",
"phone": "",
"address": "AV JANDIA S-N APDO. 00000",
"region": "Madrid",
"city": "Madrid",
"postalCode": "35625",
"classification": "Individual",
"paymentMethod": "E"
}
Key |
Type |
Description |
|
string |
The payee’s email address. |
account |
object |
The payee’s financial account details (alternate options between IBAN or Routing/Account number can be supplied) |
payeeDetails |
object |
A JSON object the includes details about the payee. |
PayerID |
string |
The payer organization’s unique identifier on the Direct Send platform. |
The Create Payments operation initiates one or more payments to the payees defined in the request body. This operation can submit payments for processing on multiple dates.
Successful Result |
The payment is submitted into the Direct Send platform and queued for processing. |
Alternate Flow |
If the Payee already exists for the given payer, then an error response to the onboarding request is sent with the existing Payee Id for the Payer to move forward with an update or payment call. |
Unexpected Conditions | Result |
[Company Name] times out on the request |
[Company Name] to retry the onboarding request. |
[Company Name]’s JWT Token is expired |
[Company Name] to refresh token and retry the onboarding request. |
The minimum required Payee details are not provided in the correct format or are missing. |
A ‘false’ response is sent with an appropriate error message is provided for [Company Name] to correct and retry the request. |
POST – /bulkPaymentByJSON
{
"payerId": "[payerId]",
"payments": [
{
"payeeDetails": {
"payeeId": "[payeeId]",
"email": "[payeeEmailAddress]",
"payeeName": "[payeeName]"
},
"paymentReason": "Payout",
"PaymentDescription": " ",
"paymentData": {
"effectivePaymentDate": "[effectivePaymentDate]",
"amount": 5.00,
"paymentType": "[paymentType]"
},
"payeeCurrency": "[ISO Alpha-3 Currency Code]"
}
]
}
Key | Type | Description |
---|---|---|
PayerId | string | The payer organization’s unique identifier on the Direct Send platform. |
payments | array | An array of payment objects the defines the payee, amount, and tax information for the payment. |
Payments Array Field Definitions:
Key | Type | Description |
---|---|---|
payeeDetails | object | Object containing the required payee details. |
paymentReason | string | Reporting category for this payment. Contact Direct Send support for the specific reasons available to your payers. |
paymentData | object | Object containing required payment information. |
payeeCurrency | String | This value can either be the currency held in the settlement account (typically USD) to have settlement currency be the lockside value, or can be the payee’s account currency (found in the /getPayeeById endpoint) to have the payment currency be the lockside value. |
payeeDetails Object Field Definitions:
Key | Type | Description |
---|---|---|
payeeId | string | The Payee’s unique identifier on the Direct Send platform. |
string | The Payee’s email address. | |
payeeName | string | The Payee’s full name. |
paymentData Object Field Definitions:
Key | Type | Description |
---|---|---|
effectivePaymentDate | string | The date that the payment will be submitted for processing in MM/DD/YYYY format. |
amount | number | The amount of the payment. |
paymentType | String | sameDay or regular |
{
"success": true,
"fileId": "",
"accept": [
{
"payeeDetails": {
"payeeId": “",
"email": "[email protected]",
"payeeName": "Bradley elsinger",
"PayeeFirstName": "Bradley",
"PayeeLastName": "elsinger"
},
"paymentReason": "Payout",
"paymentData": {
"effectivePaymentDate": "09/07/2022",
"amount": 5
},
"PayerPaymentReferenceNum": "Loan Id: 1254620",
"accountId": "1",
"PaymentDescription": "This is a check payment for your loan",
"isConvenienceFeeDisabled": false,
"allowPaymentForDisabledUser": false,
"payerId": "K052674P",
"payerTXId": "823069590",
"payerName": "Brad's Test Company",
"createdByUserType": "Kyck-Super-Admin",
"payerMailingAddress": {
"mailingAddressLineTwo": "Building 15 Suite P-120",
"mailingPostalCode": "30305",
"mailingState": "GA",
"mailingCity": "Atlanta",
"mailingAddressLineOne": "3575 Piedmont Rd NE ",
"mailingCountry": "USA"
},
"PayerCustomerId": "BRADSTESTCOMPANY",
"createdBy": "[email protected]",
"payerEmail": "b",
"achType": "sameDay",
"paymentDetails": [
{
"Reference_ID": "", // USE THIS REFERENCE ID FOR /apis/getPayStub/{Reference_ID} CALL
"payeePaymentMethod": "international ach"
}
]
}
],
"reject": [],
"status": true
}
{
"success": false,
"reason": "Effective payment should be future date",
"message": "Effective payment should be future date"
}
https://sandboxapi.kyckglobal.com/apis/getPayStub/{{Reference_ID}}
Response (standard):
{
"success": true,
"payStub": {
"payerACHApproved": true,
"returnedReason": "",
"status": "Submitted",
"responseData": "",
"createdBy": "",
"name": "",
"returnStatus": false,
"achType": "sameDay",
"flag": false,
"paymentStatus": false,
"paymentReason": "Payout",
"PayerCustomerId": "",
"fileId": "",
"payerTXId": "",
"payerId": "",
"payeeAccountNumber": "",
"payeeDetails": {
"payeeName": "",
"payeeId": "",
"email": "",
"PayeeFirstName": "",
"PayeeLastName": "r"
},
"payeePaymentMethod": "venmo",
"cashCreatedDate": "",
"requestedDate": "09/06/2022",
"createdByUserType": "",
"payerMailingAddress": {
"mailingAddressLineTwo": "Building 15 Suite P-120",
"mailingPostalCode": "30305",
"mailingState": "GA",
"mailingCity": "Atlanta",
"mailingAddressLineOne": "3575 Piedmont Rd NE ",
"mailingCountry": "USA"
},
"payPeriodTo": null,
"typeOfACH": "Disbursement",
"paymentCreatedDate": "09/06/2022",
"cashFetch": "",
"Reference_ID": "RAAJ5B4XDVOUTUVEN",
"frequencyOrDate": "NA",
"cashStatus": "",
"createdHour": "",
"paymentData": {
"amount": 5,
"effectivePaymentDate": "09/07/2022"
},
"requestedTime": "4:06:34 PM",
"payerEmail": "",
"accountName": "",
"datetimestamp": 1662494794257,
"AccountType": "”,
"payerName": "",
"payPeriodFrom": null,
"cashBatchId": "",
"PaymentDescription": "This is a check payment for your loan",
"collectionReference_ID": "",
"collectionStatus": "Submitted",
"pendingReason": "",
"pendingReference_ID": "",
"paymentReference_ID": "",
"PayerPaymentReferenceNum": "Loan Id: 1254620",
"Trace_ID": "",
"cashLocation": ""
}
}
{
"success": false,
"msg": "Paystub is not found"
}
https://sandboxapi.kyckglobal.com/apis/cancelPayment/{{Reference_ID}}
{ "success": true, "message": "The Payment has been cancelled Successfully" }
{ "success": false, "msg": "Reference id is invalid" }
The following are the applicable disbursement status(es) supported by Direct Send:
Barcode status |
Description |
Submitted |
A state where a transaction has been initiated in the Direct Send system for processing. |
Success |
A state where a transaction has been sent to the respective disbursement endpoint. |
Processing |
An intermediary state where a transaction is being processed. |
Pickup Ready |
A state where a cash authorization code or barcode is ready for redemption. |
Returned |
A state where a transaction has been returned and requires action. |
Rejected |
A state where a transaction has been cancelled and a refund is being issue (if applicable). |
https://sandboxapi.kyckglobal.com/apis/getPayeeById/{{PayeeId}}
{
"success": true,
"data": [
{
"createdByName": "Brad Elsinger",
"pushToAccount": false,
"pushToCardAccount": [
{
"last4": "9913",
"allocation_version": "new",
"allocation": 100,
"isMasterCard": true,
"auditLog": [
{
"date": "2022-09-08T17:36:59.440Z",
"type": "create",
"user": "unknown name",
"email": "[email protected]"
}
],
"accountName": "PushToCard",
"createdTimeStamp": 1662658619440,
"allocationType": "percentage-allocation",
"type": "PushToCard",
"primaryAccount": false,
"accountStatus": "active",
"accountId": "acct_2Z10lU1zmOor_JCOOunma_i2Tpm",
"createdDate": "09/08/2022",
"accountApproved": true,
"createdTime": "1:36:59 PM",
"expirationDate": "2030-10"
}
],
"payerLegalName": "Brad's Test Company",
"payeeOnboardedDate": "09/08/2022",
"payeeInternationalAch": false,
"createdBy": "[email protected]",
"payeeInternationalBank": false,
"payeeNcrPay360Account": [
{
"accountStatus": "active",
"allocation_version": "old",
"allocation": 0,
"accountApproved": true,
"auditLog": [
{
"date": "2022-09-08T17:31:04.511Z",
"type": "create",
"user": "unknown name",
"email": "[email protected]"
}
],
"accountName": "NCRpay360",
"accountNumber": "4044015555",
"allocationType": "percentage-allocation",
"type": "NCRpay360",
"primaryAccount": false
}
],
"contactInfo": [
{
"contactNumber": "1234567890",
"contactType": "Mobile"
}
],
"payeeDisabled": false,
"payeeCheck": false,
"enableConvenienceFeeToAllPayee": false,
"payeeIncommCL": false,
"payerId": "Payer00253",
"payeePushDebit": false,
"payeeDetails": {
"isDBAasReceiverEnabled": false,
"sendSMS": true,
"contactInfo": [
{
"contactNumber": "1234567890",
"contactCode": "+1",
"contactType": "Mobile"
}
],
"payeeFirstName": "",
"payeeLastName": "",
"payeereferenceId": "5648375568",
"pstate": "GA",
"pcountry": "USD",
"pemail": "[email protected]",
"mcountry": "USD",
"mstate": "GA"
},
"payeeId": "Payee25301bthh",
"payeeInternationalWire": false,
"accountActive": false,
"createdByUserType": "Kyck-Super-Admin",
"payeeNcrPay360": true,
"payeeAch": false,
"blockNotification": false,
"payeeLastName": "elsinger",
"payeeEmail": "[email protected]",
"payeeFirstName": "Bradley",
"payeeVenmo": false,
"payeeDestinationCountry": "US",
"pushToCard": true,
"payeeEmployeePayCard": false,
"payeeMoneyGram": null,
"payeeMoneyGramAccount": null,
"payeePayPal": false,
"payeeReloadablePrepaidCard": false,
"payeeReferenceId": "5648375568",
"payeeStatus": "Onboarded",
"datetimestamp": 1662658264564,
"payeePaymentPreferences": {
"pushToCardStatus": true,
"venmoStatus": false,
"pach": false,
"pmoney": null,
"incommCLStatus": false,
"pushDebitStatus": false,
"iACHStatus": false,
"reloadablePrepaidCardStatus": false,
"checkStatus": false,
"ncrPay360Status": false,
"wireStatus": false,
"internationalBankStatus": false,
"pushToAccountStatus": false,
"employeePayCardStatus": false,
"paymentFreference": "Monthly",
"payPalStatus": false,
"pcash": true
},
"payeeFinancialAccountStatus": "Approved",
"payeeCash": true,
"payeeCashAccount": [
{
"accountStatus": "active",
"allocation_version": "old",
"allocation": 0,
"accountApproved": true,
"auditLog": [
{
"date": "2022-09-08T17:31:04.511Z",
"type": "create",
"user": "unknown name",
"email": "[email protected]"
}
],
"accountName": "incomm",
"allocationType": "percentage-allocation",
"type": "Cash",
"primaryAccount": true
}
]
}
]
}
{
"success": false,
"message": "Payee not Found"
}
PUT – https://sandboxapi.kyckglobal.com/apis/updatePayeeWithBeneficiary
{
"payerId": "{{uat_payerid}}",
"payeeId": "Payeeeece07b0-84f3-4509-a14b-0e8ab2a3a23d",
"account": {
"iban": "ES0200492666702094515427"
},
"firstName": "Brad",
"lastName": "Bene test",
"phone": "",
"address": "AV JANDIA S-N APDO. 00000",
"region": "Madrid",
"city": "Madrid",
"postalCode": "35625",
"classification": "Individual",
"paymentMethod": "E"
}
Routing/Account Number Details
{
"payerId": "{{uat_payerid}}",
"payeeId": "Payeeeece07b0-84f3-4509-a14b-0e8ab2a3a23d",
"account": {
"routingCode": "004958786",
"destinationCountry": "ES",
"accountNumber": "2416015745"
},
"firstName": "Brad",
"lastName": "Bene test",
"phone": "",
"address": "AV JANDIA S-N APDO. 00000",
"region": "Madrid",
"city": "Madrid",
"postalCode": "35625",
"classification": "Individual",
"paymentMethod": "E"
}
Response (success):
{
"success": true,
"message": "Payee profile successfully Updated.",
"warnings": []
}
NOTE: Sum of allocations in the allocation object must equal 0 or 100!
Switching Account Allocation From One Account to Another
PUT –apis/singlePayeeUpdate
Request Body:
{
"payerId": "{{payerId}}",
"payeeId": "{{payeeId}}",
"allocationWithAccountId": [
{
"payeeDisbursementAccountId": 1,
"allocation": 100
},
{
"payeeDisbursementAccountId": 2,
"allocation": 0
}
]
}
Splitting Account Allocation across Payee Accounts
PUT –/apis/singlePayeeUpdate
Request Body:
{
"payerId": "{{payerId}}",
"payeeId": "{{payeeId}}",
"allocationWithAccountId": [
{
"payeeDisbursementAccountId": 1,
"allocation": 50
},
{
"payeeDisbursementAccountId": 2,
"allocation": 50
}
]
}
POST – /apis/payerPayeeUpdateStatus
Request Body:
{
"payeeId": "[payeeId]l",
"payerId": "[payerId]",
"payeeDisabled": true
}