Instant Transfer Service

Instant Transfer Service APIs can be used for actions such as moving funds in near real-time to any eligible debit card.

Overview

For the Instant Transfer Service, there are two types of API flows, both of which are built based on Green Dot's Global Fund Transfer service:

  • Standard Flow
  • Single Phase Commit

The API Endpoints section below describes the APIs for both flows. For other related information, refer to these sections in that documentation:

Standard Flow Transfers

The standard Instant Transfer Model to move funds in near real-time to any eligible debit card involves the following three API calls:

  • Create Customer Profile API (only once per recipient)
  • Link Card API (only once when linking a new source account[i] or destination account, or when updating a destination account information)
  • Transfer API (per transfer transaction, between individual accounts for A2A/P2P transfers, and for B2C disbursements, from the partner’s disbursing account to the recipient’s debit card account)

To accomplish this, the partner needs to call the referenced APIs in the API Reference page to complete each step while creating and linking a customer for the first time. After the customer profile is created, the Link Card API links multiple cards to that profile. Finally, after the linking is established, the partner can call the Transfer API to initiate a transfer.

Note:

  • All responses are real-time and no Webhooks are generated in this model.
  • Green Dot stores encrypted user and card data and uses tokens in the API calls.

A detailed discussion of these APIs is detailed below.

Instant Transfer Service API Endpoints

Create Customer Profile API

This API creates a recipient customer profile in the Green Dot instant transfer system. As part of that, the customer information goes through Green Dot's verification process configured for this partner before initiating any further API calls, ensuring all required information was passed and there are no OFAC or compliance problems with the recipient. The profile is needed before a customer links with an external card. The same customer profile can have multiple card accounts linked to it, and the target card accounts must always be linked to a target receiving customer.

Business Logic

  • CustomerToken – If this field is left blank
    • When this field is mandatory, the partner must provide a unique value.
    • When this field is optional and the request contains a CustomerToken value, the same value is used. Otherwise, the Instant Transfer Service generates a GUID as the CustomerToken.
  • Idempotent Check -- This check is based on the CustomerToken. If the request contains a value that already exists in the database, it returns the Record already exists error.
  • DB Level Encryption -- This encryption is based on DateOfBirth.
  • CustomerID in DB -- As per Green Dot standards, the CustomerID is a GUID that the Instant Transfer service generates.

API Call Structure

POST /programs/{programCode}/externalAccounts

Sample Request Body

{
  "salt": "eb6c967d-765a-4b18-9a6e-d4eb4df69efa",
  "customerToken": "eb6c967d-765a-4b18-9a6e-d4eb4df69efa",
  "encryptedData": {
    "version": "string",
    "ephemeralPublicKey": "string",
    "publicKeyHash": "string",
    "data": "string"
  }
}

Sample Encrypted Data (JSON)

{
  "firstName": "string",
  "lastName":"string", 
  "middleName":"string",
  "email": "[email protected]", 
  "phoneNumber": "1234567890", 
  "dateOfBirth": "yyyy-mm-dd", 
  "address":{ "addressLine1": "string", 
  "addressLine2": "string", 
  "city": "string", 
  "state": "XX", 
  "zipcode": "12345" 
 },
}

Response Messages

HTTP Status CodeResponse Message
201Customer profile created successfully
401Unauthorized access, wrong token access or expired
502Service unavailable, try again later or contact IT support
503Server Error

Sample Response Body

{
  "customerToken": "eb6c967d-765a-4b18-9a6e-d4eb4df69efa",
  "status": "Pending",
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "string",
      "url": "string"
    }
  ]
}

Link Card API

After a recipient customer profile is created, the Link Card API creates links to target debit cards so they can be used as destinations for money movement transfers by either the person doing an A2A transfer or as the desired target account for a recipient of B2C disbursements.

Note: FundingType must = Card (debit cards)

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.

API Call Structure

POST /programs​/{programCode}​/externalAccounts​/customers/{customerToken}/linkCard

Sample Request Body

{
  "salt": "62ea6192-1b84-4107-864e-c96f494bbaff",
  "encryptedData": {
    "version": "EC_v1",
    "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElQYeCVWEp3dm2AnNN6hfh7B6BOBCUSKFETY7Ls0Rc/JS7NvNqKuXeSwX3OiBd6TdhjGISa+VSdytefwjV0doyA==",
    "publicKeyHash": "t+rDLgzIWeXCY9qGd7VW6yypnJ3VqKUXVEYdhL/Q7Lo=",
    "data": "k28+pf0bUw4cR4aC0CgASxSVLZdOuNcuNjhDgatQz7C/c0D/rC/KDPMA+AVZscWf/mHs0HeII0tZxNmKkJERrQ/EfBq6AbViH3lfvwokhbtr16LVh4GcW6ahJWTvIbyKWQAs2MAkgu5yu8D6DCHoEhGy2QbnAaqa6jVf7Uldb6xlLq6jf4MwNDUYSsMH2rqnuv8xaj8vwoSwm3BvKyojuzMwHh5xRAE8fdELuLiZa7PVav2kW8GU0G0Fmgre37mIK/6znWIN01bfD2rYAs2tBABdf1lduD2uthEIR7kUR0xwV3aK6+ErS2sJthlGOKUOoYVBJzgyFrqsfFBXbuNayX1EKkhTV9+HFhH3TafKrPSzpsBQPNaJCo59vMWX9opatFIWmN1rWFTOty95DG4zJ1urXt9KhXw7GptM0K82sTzq81VyHL9xTXQZnHt/4Zwvo+JxF6ejRaWM9p0HYCMr5Ln6dpWWWBQFRoZ8aT+Qdot5dywDZS3uEKqSJbLbJRg+hXsmXqEYkhc3yLs1erw2mgo="
  }
}

Sample Encrypted Data (JSON)

{
   "firstName": "string",
   "lastName": "string",
   "middleName": "string",
   "nickName": "string",
   "accountNumber": "string",
   "expiryMonth": "string",
   "expiryYear": "string",
   "address": {
     "addressLine1": "string",
     "addressLine2": "string",
     "city": "string",
     "state": "string",
     "zipCode": "string"
   },
 }
HTTP Status CodeResponse Message
201Link created successfully
400Missing or incorrect parameter
404Not found
500Server Error

Response Body

{
  "link": {
    "linkId": "00000000-0000-0000-0000-000000000000"
  },
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "Success",
      "url": "http://tbd"
    }
  ]
}

Delete Link Card API

When a customer no longer needs to be linked with a card, the Delete Link Card API will remove this link.

API Call Structure

DELETE programs/{programCode}/externalAccounts/customers/{CustomerToken}/linkCard/{linkId}

Response Messages

HTTP Status CodesResponse Message
200Link was deleted successfully
400Bad request when a deleted link attempts to initiate any transaction
401Unauthorized access, wrong token access or expired
503Service unavailable, try again later or contact IT support

Transfers API

The Transfers API allows partners to enable their customers to move funds in near real-time from a Green Dot-issued account, a third party account, or a central disbursement payout account, and posting to an external account. We have two formats of the Transfer API for instant transfers to debit cards:

  1. Green Dot BaaS Account partners
  2. Green Dot Network or Money Movement only partners, please go to the related section below the Transfers API

API Call Structure

POST ​/programs​/{programCode}​/transfers

This endpoint is used to transfer funds from a program-funding source to a consumer account. The transferType value differentiates the transaction from a B2C, A2A, or P2P.

Note:

  • For B2C Disbursements, Use transferType as DisbursementExternal
  • For A2A Transfers transferring from a Green Dot BaaS account, use transferType as A2AOut

For B2C transfers, a configured account is required for the organization providing the funds. A static account ID is assigned, which the partner is expected to pass in the transfer request.

For A2A transfers from a Green Dot-issued account, the partner should pass the Green Dot Bank Account ID as the source identifier in the transfer request.

Sample Request Body

{
  "transferIdentifier": "d8ef71d0-bbfc-4d02-823c-821cf0cd2d89",
  "transferType": "A2AOut",
  "transferAuthorizationType": "execute",
  "partnerReferenceData": "",
  "initiator": "FED00D17-01EB-40E1-86F9-3E9457F6C82C",
  "transferRoute": {
    "transactionAmount": 20,
    "sourceTransferEndpoint": {
      "transferEndpointType": "ProgramFundingSource",
      "identifier": "FED00D17-01EB-40E1-86F9-3E9457F6C82C",
      "currency": "USD"
    },
    "targetTransferEndpoint": {
      "transferEndpointType": "card",
      "identifier": "32A7FC9A-9502-4650-ACB9-C939E1F34DAA",
      "currency": "USD"
    }
  },
"fraudData":       {
  "key": "string",
  "key": {"prop1":"test",
  "prop2":"BaaS"
  }
}
}

Request Body Field Definitions

FieldDescription
transferIdentifierIf the transaction is initiated through the Transfers API, the transferIdentifier that uniquely identifies the initiating transfer is included.
transferTypeUse transferType A2AOut for Debit Card transfers.

Use TransferType DisbursementExternal for B2C Disbursements.
transferAuthorizationTypeThis field must = execute. This is the only acceptable value.
partnerReferenceDataOptional. 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.
InitiatorOptional. This field contains the ID of the funding source account.
transferRouteContains the information for a POST Transfer call involving a new source and target.
transactionAmountContains the amount to transfer.
sourceTransferEndpointRepresents the source of the funds.
transferEndpointTypeUse ProgramFundingSource as the value.
identifierUse the funding source account ID. Use Greendot Account ID for A2A.
currency· If a currency code is provided in the request payload, it must be a valid 3-character ISO code and be valid for the program for which the call is made.

· Currency is optional and will default to USD if not provided.

· Only USD is supported for all programs.
targetTransferEndpointRepresents the target of the funds.
transferEndpointTypeUse card for DisbursementExternal and A2AOut.
IdentifierThe link token of the applicable target account.
currencyOnly USD is supported at this time.

Response Messages

HTTP Status CodeResponse Message
201Transfer successful
400Missing or incorrect parameter
404Not found
500Server error

Sample Response - A2A Out

{"transfer":{"transferIdentifier":"d8ef71d0-bbfc-4d02-823c-821cf0cd2d89","transferStatus":"completed"},"responseDetails":[{"code":0,"subCode":0,"description":"Success","url":"http://tbd"}]}

Response Parameters - A2AOut

FieldDescription
transferContains the returned information in response to the POST /transfer call.
transferIdentifierThe unique transfer ID.
transferStatusDescribes the status of the transfer. Values include:

- Completed
- Pending

Retry Process

How it Works

If POST/transfers are called when a timeout with a downstream service has occurred:

  • The HTTP response to the partner is 202. This indicates the Disbursement request is correctly pending a retry.
  • Initially, the transfer status is pending and the Retry service attempts to obtain the latest transaction status exponentially, thus increasing the maximum wait time between retries to 24 hours. Interval retry time is expressed in minutes. For example: 1,1,2,3,5,8,13 and so on.
  • If the transaction has not completed successfully after 24 hours, the OCC team needs to update the status from pending to failed. An alert is triggered if there are more than 24 transactions in a pending status at any point of time.

Valid/Invalid Character Constraints

Note: Invalid characters are listed in bold. Anything outside the range is considered invalid, too.

AsciiCharacterAllowed in Partner Reference Data
32spaceY
33!Y
34"Y
35#Y
36$Y
37%Y
38&Y
39'Y
40(Y
41)Y
42*Y
43+Y
44,N
45-Y
46.Y
47/Y
480Y
491Y
502Y
513Y
524Y
535Y
546Y
557Y
568Y
579Y
58:Y
59;N
60<Y
61=Y
62>Y
63?Y
64@Y
65AY
66BY
67CY
68DY
69EY
70FY
71GY
72HY
73IY
74JY
75KY
76LY
77MY
78NY
79OY
80PY
81QY
82RY
83SY
84TY
85UY
86VY
87WY
88XY
89YY
90ZY
91[Y
92backslash YY
93]Y
94^Y
95_Y
96`N
97aY
98bY
99cY
100dY
101eY
102fY
103gY
104hY
105iY
106jY
107kY
108lY
109mY
110nY
111oY
112pY
113qY
114rY
115sY
116tY
117uY
118vY
119wY
120xY
121yY
122zY
123{Y
124|N
125}Y
126~Y

Realtime API Response Codes (valid for any APIs on this page)

Response Code DescriptionResponse CodeResponse Sub-Code DescriptionResponse Sub-CodeHTTP Status Code
ValidationFailed4200Missing first name900400
ValidationFailed4200Missing last name901400
ValidationFailed4200Invalid first name value was specified906400
ValidationFailed4200Invalid last name value was specified907400
ValidationFailed4200Invalid ZipCode910400
ValidationFailed4200Invalid Address Line1911400
ValidationFailed4200Invalid Address Line2912400
ValidationFailed4200Invalid State913400
ValidationFailed4200Invalid City914400
ValidationFailed4200Missing Program Code916400
ValidationFailed4200Missing Account number917400
ValidationFailed4200Missing Expiry Month918400
ValidationFailed4200Missing Expiry Year919400
ValidationFailed4200Invalid Account Number921400
ValidationFailed4200Invalid Transfer Id924400
ValidationFailed4200Missing Transfer Type925400
ValidationFailed4200Missing Source Link Id927400
ValidationFailed4200Invalid Currency929400
ValidationFailed4200Invalid Transaction Description930400
ValidationFailed4200Invalid CVV931400
ValidationFailed4200Invalid Expiry Year933400
ValidationFailed4200Invalid Expiry Month934400
ValidationFailed4200Invalid Transfer Type935400
ValidationFailed4200Invalid Source Link Id938400
ValidationFailed4200Invalid Transaction Amount940400
ValidationFailed4200Invalid Program Code943400
ValidationFailed350X-GD-Request ID must be a GUID400
ValidationFailed200Missing Request Id400
ValidationFailed4200Invalid Initiator948400
ValidationFailed4200Missing Currency949400
ValidationFailed4200System Error - Business account status is pending966400
ValidationFailed4200Invalid Target Customer Identifier975400
ValidationFailed4200Missing Transfer Route994400
ValidationFailed4200Missing Source Transfer Endpoint995400
ValidationFailed4200Missing Target Transfer Endpoint996400
ValidationFailed4200Missing CardInfo997400
ValidationFailed4200Missing CustomerInfo998400
ValidationFailed4200Missing Target Customer Identifier974400
Transfer id exists4202Record already exists1502200
OperationFailed4214SystemError1514555
Success0Success0201

Money Movement Only (GDN) Partners

For a Green Dot Partner not using Green Dot’s BaaS account services, please use the call below to execute instant transfers to any debit card.

API Call Structure

POST /programs/{programCode}/transfers/gft

Sample Request Body

{
   "transferId":"0e38d18e-58b7-40cd-af2f-d173f1f82080",
   "transferType":"DisbursementExternal",
   "transferRoute":{
      "transactionAmount":2.9,
      "transactionDescription":"",
      "partnerReferenceData": "",
      "sourceTransferEndPoint":{
         "transferEndPointType":"programFundingSource",
         "identifier":"6C0536D0-AA9F-41B9-A74C-CCF01206F49E",
         "currency":"USD"
      },
      "targetTransferEndPoint":{
         "transferEndPointType":"card",
         "identifier":"014CF701-AA90-4F2A-AE09-22ED10C727D6",
         "currency":"USD"
      }
   }
}

Response Messages

HTTP Status CodeResponse Message
201Transfer successful
400Missing or incorrect parameter
404Not found
500Server error

Sample Response Body

{
   "transfer": {
      "transferId": "f0be739c-1408-4611-bec7-cb2d2704a349",
      "transferStatus": "Completed",
      "transferStatusReason": "TransferCompleted",
      "transactionDate": "2023-08-28T22:40:50.4859535-07:00",
      "currency": "USD",
      "transactionAmount": 2.9,
      "totalFeeAmount": 0.04,
      "totalTransactionNetAmount": 2.86,
      "feeDetails": [
         {
            "feeType": "CustomerFee",
            "feeAmount": 0.04
         }
      ],
      "processor": "MasterCardSend",
      "network": "MoneySend"
   },
   "responseDetails": [
      {
         "code": 0,
         "subCode": 0,
         "description": "Success"
      }
   ]
}

Single Phase Commit Transfers Endpoints

Single Commit API

URLs

https://{evn}.mul.secure2.greendot.com/enrollment/v1/api/flex/transfers/singlecommit
https://pie.mul.secure2.greendot.com/enrollment/v1/api/flex/transfers/singlecommit
https://prd.mul.secure2.greendot.com/enrollment/v1/api/flex/transfers/singlecommit

Sample Request Header Parameters

FieldDatatypeRequired
(Y/N)
FormatDescription
Request-IDstringYUUIDThe request identifier (UUID format).
x--Remapped-AuthorizationstringYJWTIn the form of “Bearer {JWT }”
Content-TypestringY“application/json”

Sample Request Body

{
   "transferIdentifier": "4771cde6-e8ee-4458-8020-c905d704064f",
   "transferType": "DisbursementExternal",
   "initiator": "e4b06240-b719-4c76-87c3-961f515e33eb",
   "transferdescription": "",
   "transferRoute": {
	   "transactionAmount": 5,
	   "sourceTransferEndpoint": {
		   "transferEndPointType": "programFundingSource",
		   "identifier": "8EADF071-657B-4CFA-9FBA-7B77D77C3BE8",
		   "currency": "USD"
	   },
	   "targetTransferEndpoint": {
		   "transferEndPointType": "singlePhaseFunding",
		   "identifier": "6b5eed71-48d3-46e0-be44-4342c6826b60",
		   "currency": "USD",
		   "cardData": {
			   "expiration": {
				   "month": "12",
				   "year": "2022"
			   },
			   "firstName": "John",
			   "lastName": "Dee",
			   "address1": "123 Street",
			   "address2": "Apt 123",
			   "city": "Test",
			   "state": "AZ",
			   "zipCode": 12345
		   },
		   "userData": {
			   "firstName": "John",
			   "lastName": "Dee",
			   "zipCode": 12345
		   }
	   }
     }
}

Request Body Parameters

FieldDatatypeRequired
(Y/N)
FormatDescription
transferIdentifierstringYGUIDIf the transaction is initiated through the Transfers API, the transferIdentifier uniquely identifying the initiating transfer is included.
transferTypestringYMax 50 charactersUse disbursementExternal.
InitiatorstringNMust be 36 charactersThis is the account from which the transfer was initiated. It must be either the source or the target account. For a One Phase Commit Transfer, this is an optional field. If needed, the partner can pass the Payee Site ID.
transferdescriptionstringNMax 100 charactersThe transaction description.
transferRoutecomplexYContains the information for a POST transfer call involving a new source and new target.
transactionAmountDecimalYThe transfer amount.
sourceTransferEndpointcomplexYRepresents the source of the funds.
transferEndpointTypestringYMax 50 charactersUse programFundingSource for disbursementExternal.
sourceTransferEndpoint. identifierstringYMust be 36 charactersThe accountIdentifer of the partner’s Disbursement Business account.
currencystringYMust be 3 charactersIf a currency code is provided in the request payload, it must be a valid 3-character ISO code and be valid for the program for which the call is being made.

Note: Currently, only USD is supported for all programs.
targetTransferEndpointcomplexYRepresents the target of the funds.
transferEndpointTypestringYMax 50 characterstargetTransferEndpoint. transferEndpointType as

“singlePhaseFunding”
targetTransferEndpoint. IdentifierGUIDYThe External Card Identifier of the applicable account based on the transferEndpointType. For a Single Phase Commit, this will be the Payee Site ID.
encryptedCardDataYThe encrypted card data. Refer to Encrypted Card Data Field Definitions.
encryptedUserDataYThe encrypted user data. Refer to Encrypted User Data Field Definitions.

Encrypted Card Data Body

{	
   "CardData": {
	"CardNumber": "string",
	"Expiration": {
		"CardExpirationMonth": "string",
		"CardExpirationyear": "string"
	},
	"FirstName": "string",
	"LastName": "string",
	"AddressLine1": "string",
	"AddressLine2": "string",
	"City": "string",
	"State": "string",
	"ZipCode": "string"
      }
}

Sample Encrypted Card Data Body

{
    "CardData": {
	"pan": "4111999999991234",
	"expiration": {
	     "month": "12",
	     "year": "2020"
        }
    }
}

Encrypted Card Data Parameters

FieldRequired
(Y/N)
DescriptionFormatValues Allowed
cvvNCard verification value or security code.3-4 digits0-9
cardNumberYPersonal Account Number (PAN) on the customer card0-9
expirationYCard expiration dateMMYYYY0-9
firstNameYCardholder’s first name2-35 Charactersa-z, A-Z, hyphen, space
lastNameYCardholder’s last name2-35 Charactersa-z, A-Z, hyphen, space
address1YCustomer address, line1Max 255 characters, a-z, A-Z, 0-9, hyphen, space, /, period
address2NCustomer address, line 2Max 255 charactersa-z, A-Z, 0-9, hyphen, space, /, period
cityYCity where customer livesMax 50 charactersa-z, A-Z, hyphen, space
stateYState where customer livesMax 2 charactersA-Z, a-z
zipCodeYCustomer zip codeMax 5 digits0-9

Sample User Data Body

{	
   "UserData": {
	"FirstName": "john",
	"LastName": "doe",
	"ZipCode": "91107"
   }
}

User Data Parameters

FieldRequired
(Y/N/C)
DescriptionFormatValues Allowed
firstNameYCardholder’s first name2-35 charactersa-z, A-Z, hyphen, space
lastNameYCardholder’s last name2-35 charactersa-z, A-Z, hyphen, space
dateOfBirthCUser’s date of birthYYYY-MM-DDConditional value. Must be between 1901 and current year.
zipCodeYUser’s zip codeNNNNNMust be 5 digits.

Sample Single Commit Responses

Transfer Pending

Response:HTTP/1.1 201 Created
Date: Tue, 12 Apr 2022 19:47:33 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 121
Connection: keep-alive
x-correlation-id: be732974-aa3d-4b1b-aaea-5d64daf0b170
Strict-Transport-Security: max-age=31536000; includeSubdomains;
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
{	
   "transfer": {
      "transferIdentifier": "c8b18a28-b87b-4c0f-ab77-87965c4c6199",
      "transferStatus": "Pending"
    }
}

Transfer Failed (HTTP 503)

This response indicates a timeout (HTTP 503) or internal exception.

{
      "transfer": {
	  "transferIdentifier": "1d670075-a5bc-467d-856c-32ec44455fef",
	  "transferStatus": "failed"
      },
      "errors": [
      {
       "code": 4214,
       "subcode": 1514,
       "description": "system error"
      }
   ]
}

Transfer Failed (HTTP 400)

This response indicates a data issue (HTTP 400) occurred.

{
    "transfer": {
	"transferIdentifier": "1d670075-a5bc-467d-856c-32ec44455fef",
	"transferStatus": "failed"
    },
    "errors": [
	{
	    "code": 4200,
	    "subcode": 945,
	    "description": "Invalid Request Id"
	}
    ]
}

GET Transfer API

Partner Integration Environment URL

https://pie.mul.secure2.greendot.com/enrollment/v1/api/flex/externalAccounts/acb07274-b4e8-446f-9ac5-c43fe117ec91/transfers/27e289ba-2002-492b-8497-db44b44bca6f HTTP/1.1

Production URL

https://prd.mul.secure2.greendot.com/enrollments/v1/api/{programCode}/externalAccounts/{externalAcctId}/transfers/{transferId}

Request Header Parameters

FieldDatatypeRequired
(Y/N)
FormatDescription
Request-IDstringYUUIDThe request identifier (UUID format).
x--Remapped-AuthorizationstringYJWTIn the form of “Bearer {JWT }”
Content-TypestringY“application/json”

URL Parameters

FieldDatatypeRequired
(Y/N)
FormatDescription
externalAcctIdstringYGUIDCustomer Payee Side ID.
transferIdstringYGUIDThe transferIdentifier that uniquely identifies the initiating transfer that will be included.

Sample Request

GET https://qa.mul.secure2.greendot.com/enrollment/v1/api/flex/externalAccounts/acb07274-b4e8-446f-9ac5-c43fe117ec91/transfers/27e289ba-2002-492b-8497-db44b44bca6f HTTP/1.1
Accept-Encoding: gzip,deflate
x-Remapped-Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImMzNmNlZGI4LTg3NTQtNDY1MS04NWYxLTY2NDI4ODY4YzAwZSJ9.eyJjbGllbnRpZCI6ImU1MWIyMDExYjNhMzRmYzE5Mzk0MTJkZWU4ZTRkOTIyIiwiaXNzIjoiaHR0cHM6Ly9ncmVlbmRvdC5jb20iLCJhdWQiOiJBbGwiLCJpYXQiOjE2MDI3ODMzMTYsImV4cCI6MjIzMzUwMzMxNn0.lT5Oeb1wL-cf8F15A4O7g8ixlrUYDV-GM-RIspQ5yUDp6NhVRCW7054nLvhyYYQIxiT5X1vKKA4QYLbSvcEMY1GxLUkSlassJRrqA8djucdpK5e9evGzN7knqQ3HR8arTLe8Ah6HrcznN_xbQ_UOvAvfLT8Sk7M3pIIUfEZhOtFyYtph4tJOmkJBsvU3yIBRlLb9k9Z4BhqCBftvQalIZ7RYIGJIQW6vX_fUQFKHI3-FjPkFXT3uOEzGr1LNyhHM5t31r525rZeuem5co1bXFiDaGBaRJbdNCMCxoNaM6e9CqzVcoupFW_u1jyPokFwIDLXrZtAzEn8RSBHA4QKVXg
X-Forwarded-For: 192.168.23.3
Request-ID: 5da118ce-29ef-4d86-81a4-2990ec1471fa
Content-Length: 0
Host: qa.mul.secure2.greendot.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.2 (Java/1.8.0_181)

Sample Response Body

{
   "transfer": {
	"transferId": "046D4980-6428-4CE4-9476-4755564F8517",
	"transferStatus": "Completed",
	"transactionDate": "Completed", 
	"currency": "USD",
	"transactionAmount": "5.00", 
	"totalFeeAmount": "0.0", 
	"totalTransactionAmount": "5.00", 
   }
}
{
   "responseDetails": [
       {
	  "code": 0,
	  "subCode": 0,
	  "description": "string",
	  "url": "http://tbd"
       }
   ]
}

Webhook Transfer Statuses

To notify a partner the result of a transfer, the GFT processor triggers transfer webhooks.

API Call Structure

POST https://yourendpoint.yourcompany.com/events/SinglePhaseTransfer

Webhook status types include:

  • Completed - The transfer was successful.
  • Failed - A system error occurred.
  • Declined - The transfer was declined for one of the following reasons:
    • The account was not eligible for transfer activity.
    • The transfer request exceeded the transfer limit.
    • The transfer was rejected due to fraud (OFAC).
    • The transfer request was for less than the minimum transaction amount.

A sample of each type follows.

Sample Completed Transfer

{
   "accounts": [
	{
	   "accountIdentifier": "c63ff033-7df4-4bdf-a5aa-d8d1dfc4a05d",
	   "events": [
	{
	   "eventIdentifier": "125d5986-4c07-4ab6-9c66-de3053e688a1",
	   "eventType": "singlePhaseTransfer",
	   "eventDateTime": "2022-03-14T17:10:08.129Z",
	   "singlePhaseTransfer": [
		{
		   "transferIdentifier": "DBC79BB6-40D9-A63C-B69B-C7DBD9403CA6",
		   "transactionAmount": 5.0,
		   "transferStatus": " Completed",
		   "transferDateTime": "2022-03-11T23:13:13Z",
		   "response": {
		      "code": "0",
		      "subCode": "0",
		      "description": "success"
	        }
  	      }
	    ]
          }
        ]
      }
    ]
  }

Sample Failed Transfer

{
   "accounts": [
	{
	   "accountIdentifier": "c63ff033-7df4-4bdf-a5aa-d8d1dfc4a05d",
	   "events": [
		{
		   "eventIdentifier": "125d5986-4c07-4ab6-9c66-de3053e688a1",
		   "eventType": "singlePhaseTransfer",
		   "eventDateTime": "2022-03-14T17:10:08.129Z",
		   "singlePhaseTransfer": [
		   {
		      "transferIdentifier": "DBC79BB6-40D9-A63C-B69B-C7DBD9403CA6",
		      "transactionAmount": 5.0,
		      "transferStatus": "failed",
		      "transferDateTime": "2022-03-11T23:13:13Z",
		      "response": {
		          "code": "4200",
			  "subCode": "948",
			  "description": " InvalidTransferType"
		     }
	          }
	       ]
	     }
	  ]
       }
    ]
 }

Sample Declined Transfer

{
   "accounts": [
	{
	   "accountIdentifier": "c63ff033-7df4-4bdf-a5aa-d8d1dfc4a05d",
	   "events": [
	{
	   "eventIdentifier": "125d5986-4c07-4ab6-9c66-de3053e688a1",
	   "eventType": "singlePhaseTransfer",
	   "eventDateTime": "2022-03-14T17:10:08.129Z",
	   "singlePhaseTransfer": [
	   {
	      "transferIdentifier": "DBC79BB6-40D9-A63C-B69B-C7DBD9403CA6",
	      "transactionAmount": 5.0,
	      "transferStatus": "declined",
	      " transferDateTime": "2022-03-11T23:13:13Z",
	      "response": {
	         "code": "4240",
		 "subCode": "1540",
	         "description": "Consumers monthly transaction limit reached"
	      }
	    }
	  ]
	}
      ]
    }
  ]
}

Realtime API Response Codes

Response Code DescriptionResponse CodeResponse Sub-Code DescriptionResponse Sub-CodeHTTP Status Code
ValidationFailed4200Missing first name900400
ValidationFailed4200Missing last name901400
ValidationFailed4200Invalid first name value was specified906400
ValidationFailed4200Invalid last name value was specified907400
ValidationFailed4200Invalid ZipCode910400
ValidationFailed4200Invalid Address Line1911400
ValidationFailed4200Invalid Address Line2912400
ValidationFailed4200Invalid State913400
ValidationFailed4200Invalid City914400
ValidationFailed4200Missing Program Code916400
ValidationFailed4200Missing Account number917400
ValidationFailed4200Missing Expiry Month918400
ValidationFailed4200Missing Expiry Year919400
ValidationFailed4200Invalid Account Number921400
ValidationFailed4200Invalid Transfer Id924400
ValidationFailed4200Missing Transfer Type925400
ValidationFailed4200Missing Source Link Id927400
ValidationFailed4200Invalid Currency929400
ValidationFailed4200Invalid Transaction Description930400
ValidationFailed4200Invalid CVV931400
ValidationFailed4200Invalid Expiry Year933400
ValidationFailed4200Invalid Expiry Month934400
ValidationFailed4200Invalid Transfer Type935400
ValidationFailed4200Invalid Source Link Id938400
ValidationFailed4200Invalid Transaction Amount940400
ValidationFailed4200Invalid Program Code943400
ValidationFailed350X-GD-Request ID must be a GUID400
ValidationFailed200Missing Request Id400
ValidationFailed4200Invalid Initiator948400
ValidationFailed4200Missing Currency949400
ValidationFailed4200System Error - Business account status is pending966400
ValidationFailed4200Invalid Target Customer Identifier975400
ValidationFailed4200Missing Transfer Route994400
ValidationFailed4200Missing Source Transfer Endpoint995400
ValidationFailed4200Missing Target Transfer Endpoint996400
ValidationFailed4200Missing CardInfo997400
ValidationFailed4200Missing CustomerInfo998400
ValidationFailed4200Missing Target Customer Identifier974400
Transfer id exists4202Record already exists1502200
OperationFailed4214SystemError1514555
Success0Success0201

Webhook Transfer Status Codes

MessageResponse CodeSub CodeDescriptionTransaction Status
Success00SuccessCompleted
ValidationFailed4200900Missing first nameFailed
ValidationFailed4200901Missing last nameFailed
ValidationFailed4200903Missing ZipCode codeFailed
ValidationFailed4200906Invalid first name value was specifiedFailed
ValidationFailed4200907Invalid last name value was specifiedFailed
ValidationFailed4200910Invalid ZipCodeFailed
ValidationFailed4200911Invalid Address Line1Failed
ValidationFailed4200912Invalid Address Line2Failed
ValidationFailed4200913Invalid StateFailed
ValidationFailed4200914Invalid CityFailed
ValidationFailed4200915Invalid CountryFailed
ValidationFailed4200916Missing Program CodeFailed
ValidationFailed4200917Missing Account numberFailed
ValidationFailed4200918Missing Expiry MonthFailed
ValidationFailed4200919Missing Expiry YearFailed
ValidationFailed4200921Invalid Account NumberFailed
ValidationFailed4200924Invalid Transfer IdFailed
ValidationFailed4200925Missing Transfer TypeFailed
ValidationFailed4200927Missing Source Link IdFailed
ValidationFailed4200929Invalid CurrencyFailed
ValidationFailed4200930Invalid Transaction DescriptionFailed
ValidationFailed4200931Invalid CVVFailed
ValidationFailed4200933Invalid Expiry YearFailed
ValidationFailed4200934Invalid Expiry MonthFailed
ValidationFailed4200935Invalid Transfer TypeFailed
ValidationFailed4200938Invalid Source Link IdFailed
ValidationFailed4200940Invalid Transaction AmountFailed
ValidationFailed4200943Invalid Program CodeFailed
ValidationFailed4200948Invalid InitiatorFailed
ValidationFailed4200949Missing CurrencyFailed
ValidationFailed4200952System Error - Missing Transaction ReferenceFailed
ValidationFailed4200953System Error - Invalid Transaction ReferenceFailed
ValidationFailed4200954System Error - Missing Sender User Profile DetailsFailed
ValidationFailed4200955System Error - Missing Sender Account DetailsFailed
ValidationFailed4200960System Error - Invalid Account IdentifierFailed
ValidationFailed4200962System Error - Transaction amount is less than Fee amountFailed
ValidationFailed4200965TransferId already exist with different partner. Please try with new TransferIdFailed
ValidationFailed4200966System Error - Business account status is pendingFailed
BusinessRuleFailure4200971Transaction amount exceeds per transaction limitDeclined
ValidationFailed4200974Missing Target Customer IdentifierFailed
ValidationFailed4200975Invalid Target Customer IdentifierFailed
BusinessRuleFailure4200976Transaction exceeds per transaction limit countDeclined
BusinessRuleFailure4200977Transaction amount exceeds daily limitDeclined
BusinessRuleFailure4200978Transaction exceeds daily limit countDeclined
BusinessRuleFailure4200979Transaction amount exceeds weekly limitDeclined
BusinessRuleFailure4200980Transaction exceeds weekly limit countDeclined
BusinessRuleFailure4200981Transaction amount exceeds monthly limitDeclined
BusinessRuleFailure4200982Transaction exceeds monthly limit countDeclined
ValidationFailed4200983System Error - Missing ProcessorFailed
ValidationFailed4200984System Error - Invalid ProcessorFailed
ValidationFailed4200985Unable to verify Customer OFAC at this time. Please try againFailed
ValidationFailed4200986Invalid RequestFailed
Transaction Failed4200987Account Not EligibleFailed
Transaction Failed4200989Customer Is OFAC blockedDeclined
Transaction Failed4200990Customer Is OFAC partial matchDeclined
ValidationFailed42001000System Error - Missing Receiver User Profile DetailsFailed
ValidationFailed42001001System Error - Missing Receiver Account DetailsFailed
ValidationFailed42001001System Error – Missing Receiver Account DetailsFailed
Transfer id exists42021502Record already existsWe will return the existing transfer record status:
- Pending
- Completed
- Failed
- Declined
OperationFailed42141514System ErrorFailed
MissingPaymentType42161516No Payment type configured for this partnerFailed
InvalidPaymentType42171517Payment type configured for this partner is not supportedFailed
NoPaymentProcessorConfigured42191519Cannot proceed transfer request - No Payment Processor is enabled for this partnerFailed
MissingPartnerConfiguration42201520Cannot proceed transfer request - Partner configuration is not availableFailed
AllPaymentProcessorDown42211521Cannot proceed transfer request - All the available Payment processors are downFailed
TransactionProcessingSuspended42221522Unauthorized access to Master Card SendFailed
Transaction Failed42231523No default account is defined for the consumerDeclined
Transaction Failed42241524Card type is not supported for merchantDeclined
Transaction Failed42251525Operation not allowedFailed
Transaction Failed42261526Country not supported for merchantFailed
Transaction Failed42271527Acquiring credential used for the funding transaction is no longer validFailed
Transaction Failed42291529Card declinedDeclined
Transaction Failed42301530Fraud detectedDeclined
Transaction Failed42311531Card expiredDeclined
Transaction Failed42321532Per transaction maximum amount limit reachedDeclined
Transaction Failed42331533Exceeded Daily Load AmountDeclined
Transaction Failed42341534Does Not Meet Per Transaction Load AmountDeclined
Transaction Failed42351535Exceeded Monthly Load AmountDeclined
AuthenticationFailed42361536Authentication FailedFailed
Account is not eligible42371537Partner has exceeded the daily limit configured in the systemDeclined
Account is not eligible42381538Per transaction maximum amount limit reachedDeclined
Account is not eligible42391539Amount is less than the minimum configured for the partnerDeclined
Account is not eligible42401540Consumers monthly transaction limit reachedDeclined
Account is not eligible42411541Per transaction maximum amount limit for the transaction typeDeclined
Account is not eligible42421542Amount is less than the minimum allowed for the transaction typeDeclined
Account is not eligible42431543Account Type not supported for the partnerDeclined
Account is not eligible42441544Partner not on boarded for the network to reach accountDeclined
Account is not eligible42451545Currency is not supported for the accountDeclined
Account is not eligible42461546Country is not supported for the accountDeclined
Declined42471547Transaction DeclinedDeclined
Failed42491549Transaction FailedFailed
Transaction Failed42501550Unauthorized access to Visa DirectFailed
Transaction Failed42521552Transaction Failed in BaaS due to System errorFailed
Declined42541554System Error-Duplicate adjustment identifierDeclined
Transaction Failed42551555BaaS Account is ClosedDeclined
Transaction Failed42561556BaaS Account is LockedDeclined
Transaction Failed42571557BaaS Account is PendingDeclined
Declined42581558System Error-Program code not foundDeclined
Transaction Failed42601560System Error-Invalid InputFailed
Transaction Failed42611561System Error-Missing input valueFailed
Transaction Failed42621562System Error-Duplicate valueFailed
Transaction Failed42651565Load Not AllowedDeclined
Transaction Failed42721572Invalid MerchantFailed
Transaction Failed42731573Visa Direct Limit ExceededDeclined
Transaction Failed42741574Transaction was rejected by VisaNet due to a message validation error.Failed