Linking Payee Accounts

Linking Payee Accounts APIs

Business Logic

This API includes the following processing logic:

  • Idempotent Check -- If the account number is already linked with the given customer, the API returns the existing link information. Otherwise, it creates a new record.
    • Note: For an external card, an Idempotent check is performed based on Program Code, Customer Token, Account Number, Expiry Month, or Expiry Year.
    • For a GreenDot account, an Idempotent check is performed based on Program Code, Customer Token, or Account Token.
  • Checking Eligibility
    • We verify that the target card BIN is eligible for a Fast Funds transfer, using the MasterCard send or Visa Direct gateways, depending on the partner configuration.
    • Note: Card will be eligible for fund transfer if receiving eligibility = true and funds availability = IMMEDIATE.
  • Database Encryption Levels -- These include:
    • AccountNumber
    • ExpiryMonth
    • ExpiryYear
  • Status
    • Link Profile status is InActive upon creating a link for the first time. After creating a successful first transfer, the link status changes to Active.
    • Validation can occur on the Expiry month and year while creating/updating the link information.

Link Account

This API is used to create a debit card DPAN or FPAN, or Bank Account and routing number, to link to a customer for receiving funds as a payee or sending funds as a sender.

Syntax/URL

POST /programs/{programCode}/customers/{customerToken}/paymentInstruments

Request

Link Account Request Parameters

Field NameDataTypeDescriptionFormatValues AllowedRequiredBaaS Requirement
FirstNameStringAccount holder’s First nameMin 1 character

Max 35 characters
a-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)NoMust be 1 - 35 characters long.

Cannot be more than 35 characters
MiddleNameStringAccount holder’s Middle nameMin 2 characters

Max 35 characters
a-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)NoMust be 2 - 35 characters long.

Cannot be more than 35 characters
LastNameStringAccount holder’s Last nameMin 1 character

Max 35 characters
a-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)NoMust be 2 - 35 characters long.

Cannot be more than 35 characters
CardAccountCardCard to receive or used to send fundNo
BankAccountBankBank to receive or used to send fundNo
HandleAccountHandleUsed to receive funds. Does not result in an encrypted link, rather is tied to this customer profile.No
NickNameStringThe nickname to associate with the link.Max 35 charactersa-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)No
PayNameStringPayName for partnerNo
AddressAddressAddress of account holderNo

Card Request Parameters

Field NameDataTypeDescriptionFormatValues AllowedRequired
AccountNumberStringPAN number, DPAN or FPANShould be 16 digits0-9yes
ExpiryMonthStringMM (01 for Jan, 12 for Dec).should be 1 to 120-9yes
ExpiryYearStringYYYY (e.g.: 2016).should be 4 digits0-9yes
Last4PANStringlast 4 digits of FPANshould be 4 digits0-9no

Bank Account Request Parameters

Field NameDataTypeDescriptionFormatValues AllowedRequiredBaaS Requirement
ABARoutingNumberStringBank Routing numberShould be 9 digits0-9yes
AccountNumberStringBank Account numberShould be 5-17digits and char and '-'0-9 "^[A-Z0-9-]+$yes5-17
AccountTypeStringBank account typeChara-z, A-Zyes"checking" or "saving"

Payname or Handle Request Parameters

Field NameDataTypeDescriptionFormatRequired
Emailstringpay to emailemailyes
PhoneNumberstringpay to phonephone numberyes

Address Request Parameters

Field NameDataTypeDescriptionFormatValues AllowedRequired
AddressLine1StringAddress Line 1Max 255 charactersa-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)No
AddressLine2StringAddress Line 2Max 255 charactersa-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)No
CityStringCity nameMax 50 charactersa-z, A-Z, 0-9, hyphen(-), space, period(.), slash(/), questionMark(?), colon(:), opening paranthesis, closing paranthesis, comma(,), apostrophe('), Plus(+)No
StateStringAbbreviation of the State (e.g. CA, OH).should be 2 charactersA-Z, a-zNo
CountryStringISO 3166-1 alpha-3 Country Code (e.g. USA).should be 3 charactersA-Z, a-zNo
ZipCodeStringPostal code of the address.max 5 characters

min 5 characters
0-9No

Request Body

{
  "firstName": "string",
  "lastName": "string",
  "middleName": "string",
   "nickName": "string",
   "PayName": "string",
  "address": {
    "addressLine1": "string",
    "addressLine2": "string",
    "city": "string",
    "state": "string",
    "country":"string",
    "zipCode": "string"
  },
  "cardAccount":{
  "accountNumber": "string",
  "expiryMonth": "string",
  "expiryYear": "string",
  "last4PAN": "string"
  },
  "bankAccount":{
   "ABARoutingNumber": "string",
   "AccountNumber": "string",
   "BankAccountType": "string"
  },
  "handleAccount":{
    "email": "string",
    "phoneNumber": "string"
  }
}

Fields encrypted request

 {
  "salt": "eb6c967d-765a-4b18-9a6e-d4eb4df69efa",
 "encryptedData": {
        "version": "EC_v1",
        "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExwDdXm5e3P9+/nTAFW5Y+WJahmHhtbRlGwpmtoEJyiQCqBtC8NhQVsIVIq874XwY+8Yzk8LFCcdvoHn4zFwjMA==",
        "publicKeyHash": "PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
        "data": "DfAHBPjSNYP6umhaD9R0K4rNoQZpe/gWjwZs52o="
      }   
  }   

Response

Response Body

{
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "Success",
    }
  ],
 "customer": {
    "customeToken": "950e4868-9f51-4a08-96a7-fcad96c4458e",   
    "status": "verified"
  },  
  "paymentInstrument": {
    "paymentInstrumentId": "07ea72d8-d4c0-4a2f-a854-8e59b3a7d5e8",
    "status": "InActive",
    "fundsAvailability": "IMMEDIATE",
  }
} 

Check Bin Eligibility

API to get Eligibility of Bin.

Syntax / URL

POST /v1/programs/{programCode}/binEligibility

Request

Request Header

FieldRequired
(Y/N/C)
DescriptionFormatValues Allowed
ProgramCodeYPartner program codestringa-z, A-Z, hyphen, underscore, 0-9

Request Parameters

Field NameDataTypeDescriptionFormatValues AllowedRequiredRequirement
BinsBinList of Binstring0-9yesN/A
BinStringBinstring0-9yesMust be 1 - 8 characters long.

Request Body

{
  "Bins":[
  {
    Bin:"12345678"
  }
  ] 
}

HTTP Status Codes

HTTP Status CodeResponse Message
200Success
500Server Error

Response

Response Parameters

Response

FieldDescriptionFormatValues Allowed
BinEligibleListlist of BinEligibleBinEligible

BinEligible object

FieldDescriptionFormatValues Allowed
BinBin numberstringa-z, A-Z (Length should be either 6 or 8 )
BinStatusstatus of binstringa-z, A-Z
bankstringa-z, A-Z
associationstringa-z, A-Z
Programstringa-z, A-Z

BinStatus

BinStatusDescription
Eligiblethe bin number is available
Ineligiblethe bin number is not available
Invalidthe bin number is not valid

Response Body

{
  "bins": [
    {
      "bin": "12345678",
      "binStatus":"Eligible"
      "bank": "Chase Bank",
      "program": "Debit"
      "association":  "Visa"
    }
  ],
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "string"
    }
  ]
}