Executing Transfers

Executing Transfers APIs

Create Transfer API

Create a transfer API to unify customer creation, account linking, setup linkage, and transfer in one.

Syntax / URL

POST /programs/{programCode}/transfers

Request

Request Parameters

FieldDataTypeDescriptionRequired
transferIdentifierGUIDIf the transaction is initiated through the Transfers API, the transferIdentifier that uniquely identifies the initiating transfer is included.yes
transferTypeTransferTypeTwo new transfer types to be added for Harmony:

InPerson P2P (enables no linked target identifier to be provided, only allows transferendpointtype to be “card”

Visa+Send (enables a Visa+ payname link to be in the target identifier field). Routes to Fiserv endpoint for Harmony program code.

existing Transfer type “PartnerP2P” should be used for remote / offline P2P between two Samsung Wallet users
yes
partnerReferenceDatastringOptional. When a valid disbursementExternal is processed, the partner can optionally provide information in the partnerReferenceData field which can be matched to the funding transfer request along with the corresponding transaction. Upon request, the partnerReferenceData can be included in the settlement report.

Note: Including the partnerReferenceData field in the request enables the partner to cross reference the report information with internal records.
no
InitiatorstringThis field contains the ID of the funding source account.no
transferRouteTransferRouteContains the information for a POST Transfer call involving a new source and target.yes
fraudDataFraudDataAdditional information for dealing with charge backs. The following data field are now identified and confirmed with Harmony and Fraud teams to be passed in this field:

- "PIN" or "FINGERPRINT" as String

- Samsung wallet creation date

- Device Hardware ID

- Last 4 digits of the phone number.

- UTC Timestamp of the last spend date with this card in the wallet (sender)

- UTC Timestamp of the Card provisioning on the Wallet
no

Elements in FraudData

FieldDataTypeDescriptionRequired
AuthenticationTypestringType of the Authentication user did in device to initiate the transfer.
"PIN" or "FINGERPRINT" as String

As of now, only these values are allowed:

“PIN”

”FINGERPRINT”
no
WalletCreationDateDateTimeSamsung wallet creation date
DateTime in UTC format when the transaction Wallet was created
no
DeviceIDstringDevice Hardware IDno
Last4Phonestringlast 4 digits of the phone numberno
LastSpendDateDateTimeUTC Timestamp of the last spend date with this card in the wallet (sender)no
CardProvisioningDateDateTimeUTC Timestamp of the Card provisioning in the WalletNote: one of these needed: TargetTransferEndpoint.identifier, or encryptedGFTProfile, or encryptedCustomer

TransferRoute

Field NameDataTypeDescriptionRequired
transactionAmountstringContains the amount to transfer.yes
transactionDescriptionstringDescription display in both source and target transaction historyno
sourceTransferEndpointTransferEndpointRepresents the source of the funds. Will be the cardlink to the preferred debit card in the Samsung wallet.no
targetTransferEndpointTransferEndpointRepresents the target of the funds. Will be DPAN data or linked account ID for Samsung P2P or remotely P2Pno
eCommTransactionIdentifierstringThis is an option field where partner will pass it to us to relate to Fiserv to send to Visa/MC. In case of P2P or Remote P2P this will be passed from Samsung.Conditional
encryptedCardAuthenticationDataencryptedCardAuthenticationDataWhenever Sender value is DPAN then cryptogram value will be passed in this encrypted format and is Mandatory.Conditional

TransferEndpoint

Field NameDataTypeDescriptionRequired
transferEndpointTypeTransferEndpointTypeRepresents the target type of the funds transfer.Yes
IdentifierGUIDTarget linked account ID if a linked account, or blank and replaced with card data blob for in-person P2P with the target DPAN/FPAN and expiration dateConditional
currencyOnly USDis supported at this time.Yes
encryptedPaymentInstrumentencrypted card data. See PaymentInstrumentNo
encryptedCustomerencrypted user data. See CustomerNo
TransferType
InPersonP2P
TransferEndpointTypeP2P Type
CardP2P Target
AccountP2P Source

FraudData

"fraudData": {    
    "authenticationType": "PIN",    
    "walletCreationDate": "2024-11-21T07:40:55.543Z",    
    "deviceID": "string",    
    "last4Phone": "string",    
    "lastSpendDate": "2024-11-21T07:40:55.543Z",    
    "cardProvisioningDate": "2024-11-21T07:40:55.543Z"  
}

CardAuthenticationData

Field NameDataTypeDescriptionFormatValues AllowedRequiredNotes
cardHolderAuthenticationVerificationStringThis is the cryptogram value which is generated based on Fiserv specification related to MasterCard/Visa.28 charactersBase64 encrypted stringConditionalIf the Value of the card passed in Transfer is the DPAN then this is Mandatory.

Example Plain text value before encryption as in the Transfer API payload under encryptedCardAuthenticationData

"cardAuthenticationData": {
"cardHolderAuthenticationVerification": "AAABBJg0VhI0VniQEjRWAAAAAAA="},

Example of request of Harmony in-person P2P mobile phone tap to Transfer

 
{
  "transferIdentifier": "27e91d46-d103-4f26-a4a8-2d823fcf2523",
  "transferType": "InPersonP2P",
  "initiator": "", -- customer token, PIID 
  "partnerReferenceData": "",
  "transferRoute": {
    "transactionAmount": "99",
    "transactionDescription": "Samsung P2P",
    "sourceTransferEndpoint": {
      "transferEndPointType": "account",
      "identifier": "e4b06240-b719-4c76-87c3-961f515e33eb",  -- Samsung source linked DPAN ID in Wallet
      "currency": "USD",
      "ecommTransactionIndicator": "07",
      "encryptedCardAuthenticationData": {
        "version": "EC_v1",
        "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExwDdXm5e3P9+/nTAFW5Y+WJahmHhtbRlGwpmtoEJyiQCqBtC8NhQVsIVIq874XwY+8Yzk8LFCcdvoHn4zFwjMA==",
        "publicKeyHash": "PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
        "data": "DfAHBPjSNYP6umhaD9R0K4rNoQZpe/gWjwZs52o="
        }
    }
    "targetTransferEndpoint": {
      "transferEndPointType": "card",
      "identifier": "",  --- this is empty for mobile tap pay transfer
      "currency": "USD",
      "encryptedpaymentInstrument": {
        "version": "EC_v1",
        "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExwDdXm5e3P9+/nTAFW5Y+WJahmHhtbRlGwpmtoEJyiQCqBtC8NhQVsIVIq874XwY+8Yzk8LFCcdvoHn4zFwjMA==",
        "publicKeyHash": "PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
        "data": "DfAHBPjSNYP6umhaD9R0K4rNoQZpe/gWjwZs52o="
      }      
   }, 
    "fraudData": {    
    "authenticationType": "PIN",    
    "walletCreationDate": "2024-11-21T07:40:55.543Z",    
    "deviceID": "string",    
    "last4Phone": "string",    
    "lastSpendDate": "2024-11-21T07:40:55.543Z",    
    "cardProvisioningDate": "2024-11-21T07:40:55.543Z"  
   }
}

Example of request of Samsung mobile phone remotely P2P Transfer

 
{
  "transferIdentifier": "27e91d46-d103-4f26-a4a8-2d823fcf2523",
  "transferType": "PartnerP2P",
  "initiator": "", -- customer token, PIID 
  "partnerReferenceData": "",
  "transferRoute": {
    "transactionAmount": "99",
    "transactionDescription": "Samsung P2P",
    "sourceTransferEndpoint": {
      "transferEndPointType": "account",
      "identifier": "e4b06240-b719-4c76-87c3-961f515e33eb",  -- source linked DPAN ID in sending profile Samsung Wallet
      "currency": "USD",
      "ecommTransactionIndicator": "07",
      "encryptedCardAuthenticationData": {
        "version": "EC_v1",
        "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExwDdXm5e3P9+/nTAFW5Y+WJahmHhtbRlGwpmtoEJyiQCqBtC8NhQVsIVIq874XwY+8Yzk8LFCcdvoHn4zFwjMA==",
        "publicKeyHash": "PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
        "data": "DfAHBPjSNYP6umhaD9R0K4rNoQZpe/gWjwZs52o="
      }
    }
    "targetTransferEndpoint": {
      "transferEndPointType": "account",
      "identifier": "9efce52b-ccf6-4944-bdad-30dd9f41c900",  --- The cardlink of the receiving DPAN ID in receiving profile Samsung Wallet
      "currency": "USD"
     
   }, 
  "fraudData": {
   "authenticationType": "FINGERPRINT",    
    "walletCreationDate": "2024-11-21T07:40:55.543Z",    
    "deviceID": "string",    
    "last4Phone": "string",    
    "lastSpendDate": "2024-11-21T07:40:55.543Z",    
    "cardProvisioningDate": "2024-11-21T07:40:55.543Z"  
    }
}

Example of request of Harmony Visa+:

{
  "transferId": "27e91d46-d103-4f26-a4a8-2d823fcf2523",
  "transferType": "SendVisa+",
  "initiator": "", -- customer token, PIID 
  "partnerReferenceData": "",
  "transferRoute": {
    "transactionAmount": "99",
    "transactionDescription": "SendVisa+",
    "sourceTransferEndpoint": {
      "transferEndPointType": "account",
      "identifier": "e4b06240-b719-4c76-87c3-961f515e33eb",  -- Samsung source linked DPAN ID in Wallet
      "currency": "USD"
    }
    "targetTransferEndpoint": {
      "transferEndPointType": "payname",
      "identifier": "johndoe.venmo" ()  -- This will be the receiver's payname, does not need to be encrypted.
      "currency": "USD",
      "PayName": "amy.gdc" -- if Payname is not PII data
   }, 
  "fraudData": {    
    "authenticationType": "PIN",    
    "walletCreationDate": "2024-11-21T07:40:55.543Z",    
    "deviceID": "string",    
    "last4Phone": "string",    
    "lastSpendDate": "2024-11-21T07:40:55.543Z",    
    "cardProvisioningDate": "2024-11-21T07:40:55.543Z"  
   }
}

Response

Response Code

HttpCode: 201

TransferStatus
Pending
Completed
Failed
Declined
Authorized
Voided

Transfer Statuses

Transfer StatusReasonTransferStatusHttp Verb
88DeclinedPost, Get
91DeclinedPost, Get
89DeclinedPost, Get
8DeclinedPost, Get
105DeclinedPost, Get
106 AFTAuthorizedOCTCompletedAuthorizedPost, Get
93DeclinedPost, Get
87DeclinedPost, Get
82DeclinedPost, Get
12DeclinedPost, Get
10DeclinedPost, Get
85DeclinedPost, Get
11DeclinedPost, Get
4DeclinedPost, Get
3PendingPost, Get
15 SystemErrorFailedPost, Get
107 TimeoutReversedPending(Declined)Post, Get
22 TransactionDeclinedDeclined(Void)Post, Get
21 TransactionFailedFailedPost, Get
104Post, Get
2 TransferCompletedCompletedPost, Get
94 TransferVoidedDeclinedPost, Get
98 TransferVoidFailedDeclinedPost, Get

Sender

Field NameDataTypeDescriptionRequired
identifierstringSender’s customerTokenno
linkIdstringSender’s linked account idno
last4PANstringno
bankstringno
associationstringno

Receiver

Field NameDataTypeDescriptionRequired
identifierstringIf DPAN passed has a PPID (Samsung Profile ID), then this is looked up and provided back in this fieldno
last4PANstringno
bankstringno
associationstringno
payNamestringno
programstring“Debit”, “Credit”no
identifierstring
linkIdstring

Completed Transfer response example

HttpCode: 201