Accounts

Accounts APIs can be used for account management and account insights related functions.

Overview

The Accounts API allows Partners to:

  • List the transactions for a specific account
  • Retrieve account details
  • Retrieve user’s primary account balances
  • List available account statements for a specific period
  • Verify user identities through Know Your Customer (KYC) and Green Dot

Accounts API Endpoints

Assigning Custom Account Identifiers

🚧

This feature can only be used if it has been agreed upon during onboarding and included in your onboarding contract.

This optional feature enables partners to assign their own account identifiers to their customer’s accounts. Simply call PUT /programs/{programCode}/accounts/{accountIdentifier} and include your partnerAccountIdentifier. The partnerAccountIdentifier facilitates cross-reference purposes, such as settlement and reconciliation reports.

API Call Structure

PUT /programs/{programCode}/accounts/{accountIdentifier}

Opt In/Out Terms or Agreements

This feature allows any terms or agreements that were opted into during enrollment to be opted out of later. Conversely, any terms or agreements that were opted out of during enrollment can be opted into later.

API Call Structure

PUT /programs/{programCode}/accounts/{accountIdentifier}

Request Parameters

FieldDescription
termsAcceptancesTerms of acceptance that the user must agree to in order to enroll.
termsIdentifierUnique identifier for the daa that was accepted. See Terms Identifiers
termsAcceptanceFlagMay be true or false
fraudDataOptional

Credit Line Decrease (CLD) Eligibility Criteria Change

This feature further determines when an SCC account is eligible for a Credit Line Decrease. And when eligible, this change replaces statement check with funding date, thereby ensuring a statement is generated in 30 days instead of 7.

ConditionsResult
• Customer requests a CLD.
• Request date minus initial successful account funding date is <=30 days.
CLD declined
• Customer requests a CLD.
• Request date minus initial successful account funding date is > 30 days and other criteria are met
CLD approved

Request

GET https://bospart.qa.uw2.gdotawsnp.com/baas/v1/programs/gbr/accounts/07d8ba76-6549-
4903-8434-90a11ae77300/cldEligibilityCheck HTTP/1.1
Accept-Encoding: gzip,deflate
Authorization: Bearer tcanJISPn0GUq4iImRY7Ig==
X-GD-RequestId: bf8b175e-5cfe-46d2-8cf0-fd6aea887e12
Content-Length: 0
Host: bospart.qa.uw2.gdotawsnp.com
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.5.2 (Java/1.8.0_181)

Response – Successful CLD

{
   "isEligible":true,
   "decreaseAmount":200,
   "responseDetails":[
      {
         "code":0,
         "subCode":0,
         "description":"Success",
         "url":"http://tbd"
      }
   ]
}

Response – Unsuccessful CLD

{
   "isEligible":false,
   "decreaseAmount":0,
   "responseDetails":[
      {
         "code":3,
         "subCode":810,
         "description":"Credit line decrease is not allowed since your account was opened less than a month ago.",
         "url":"http://tbd"
      }
   ]
}

Search Account

This endpoint allows partners to search through accounts.

API Call Structure

POST /programs/{programCode}/accounts/search

Update Account Status

🚧

This endpoint can only be used if the Partner is configured to change statuses.

This endpoint allows Partners to update account statuses, account status reasons, and cures under certain conditions. When a valid request is submitted and completed successfully, the updated status, status reason, and kycPendingGate will be returned in GET /accounts/{accountIdentifier} and GET /enrollments/accounts/{accountIdentifier} responses. An Account Updated Webhook will also be published.

📘

Partners can unlock an account on their own IF the lock was performed by the Partner. To unlock accounts, call this API with the status you would like to set. Any accounts locked by Green Dot will remain locked until Green Dot returns status to healthy.

API Call Structure

PUT /programs/{programCode}/accounts/{accountIdentifier}/status

Valid Parameters and Conditions

Note: PUT /accounts/{accountIdentifier}/status can be used to update account status and account status reason under the following conditions.

Request Parameters
Account Status
Request Parameters
Account Status Reason
Condition Only allowed if current kycPendingGate (aka: cure) isUpdated kycPendingGate (aka: cure) if request is successful
lockedpotentialFirstPartyFraudhealthymanual
lockedconfirmedFirstPartyFraudhealthymanual
lockedpotentialThirdPartyFraudhealthymanual
lockedconfirmedThirdPartyFraudhealthymanual
lockedpotentialAccountTakeoverhealthymanual
lockedconfirmedAccountTakeoverhealthymanual
lockedpotentialIdentityThefthealthymanual
lockedconfirmedIdentityThefthealthymanual
lockedpotentialOtherFraudhealthymanual
lockedconfirmedOtherFraudhealthymanual

Response Codes

ScenarioCodesubCodeDescription
Invalid enum or missing notes. can be Status, Reasons, or Notes.6000Invalid value.
A combination of any of the following:
• Invalid status
• Invalid status response
• Missing notes field
6030Invalid combination of values in the request.
The request was not allowed.5420The status update was declined by fraud.

📘

Status changes initiated by Green Dot (i.e. fraud or manual review) will override any partner-initiated status changes.

Partners must also send notes to the Green Dot Care team when updating an account status. When a valid request including the required notes property, is sent to PUT /accounts/{accountIdentifier}/status, the notes will be saved in CRM. Notes longer than 1000 characters will be truncated.

Obtain Account Fee Summary

This API obtains a fee summary for a specific account.

API Call Structure

GET ​/programs​/{programCode}​/accounts​/{accountIdentifier}​/feeSummary

Return Last Calculated Minimum Payment

After a customer schedules a one-time SCC payment and chooses the minimum-amount option, the BaaS GetSccPayment API returns this amount to Gateway so that it can request FundTransfer or CreateAmmRule with the correct amount.

API Call Structure

GET /programs/{programCode}/accounts/{accountIdentifier}/payments

Obtain Account Details

This endpoint retrieves detailed information about a specific account.

API Call Structure

GET /programs/{programCode}/accounts/{accountIdentifier}

📘

During the GPR > DDA upgrade process, the response will include the UpgradeKycStateData property. If the account is already a DDA account, the response will not include the UpgradeKycStateData property.

Sample Response Parameters

FieldDescription
accountContains detailed account information.
accountHoldersContains all account holders associated with a specific account. Note: An account may have one or more account holders.
userThe user properties of the account holder.
firstNameFirst name of the account holder.
lastNameLast name of the account holder.
dobStatusCan be: • matched - If isDOBMatched is true and isDOBVerified is false, then matched is used • notMatched - If isDOBMatched is false and isDOBVerified is false, then notMatched is used Verified - If isDOBVerified is true then verified is used
Last4IdentityLast 4 digits of the account holder’s social security number.
identityTypeType of identity being used for the account holder (i.e. ssn).
userIdentifierUnique identifier of a user within a program.
peerTransferAcceptPreferenceValue can be manual or automatic. This property is optional and only applies to Partners using the P2P capabilities of the platform. The default value is manual and has no impact to any service other than P2P.

Note: If this value is not provided then it will remain manual.
isPrimaryAccountHolderIdentifies the primary account holder.
statusCurrent status of the account user. Note: Always set to active.
kycStateDataThe current OFAC and KYC status of a user.
ofacStatusLast result of running an OFAC check against a user (i.e. pending, passed, failed).
kycStatusLast result of running a user through a KYC (Know Your Customer) gate (i.e. pending, passed, failed).
kycPendingGateStatus of kycPendingGate (i.e. healthy).
accountHolderIdentifierUnique identifier for an account holder.
accountIdentifierUnique identifier of an account within a program.
accountReferenceNumberFriendly unique identifier of an account that is safe for sharing between intra and intercompany staff.
productCodeUnique identifier of a product within a program.
currencyAlpha-3 ISO Currency Code
statusThe current status of an account.
statusReasonsString value that returns the reason for the status of an account. statusReasons can be:
• verificationNeeded
• registrationNotComplete
• healthy
• closedWithRefund
• underReview
• bankInitiatedClosed
• customerInitiatedSpendDown
• lostStolen
• negativeBalance
• unspecifiedClose
• potentialAccountTakeover
• potentialFraud
• customerReportedIdentityTheft
• spendDown
• writeOff
• returnedMail
• customerInitiatedClose
• registrationFailed
• statusChangedByCsr
• accountEscheated
• unknown
• potentialFirstPartyFraud
• confirmedFirstPartyFraud
• potentialThirdPartyFraud
• confirmedThirdPartyFraud
• confirmedAccountTakeover
• potentialIdentityTheft
• confirmedIdentityTheft
• potentialOtherFraud
• confirmedOtherFraud
accountStatusChangeDateTimeThe date and time (UTC) of the account status change.
directDepositInformationContains the information required to setup direct deposit and ACH In transfers.
accountNumberThe bank account that is required for direct deposit.
routingNumberThe ABA bank routing number of the bank account that is required for direct deposit.
termsAcceptancesRepresents the acceptance of daa by a user.
termsIdentifierUnique identifier for the daa that was accepted. Note: termsAcceptanceFlag must be set to true.
termsAcceptanceDateTimeOptional. Date/time in UTC that the daa was accepted. Note: If not provided, will default to the current date/time.
termsAcceptanceFlagIndicates whether the daa was accepted by the user. Required for opt in/out agreements.
termsIdentifierUnique identifier for the daa that was accepted.
termsAcceptanceDateTimeOptional. Date/time in UTC that the daa was accepted.
Note: If not provided, will default to the current date/time.
termsAcceptanceFlagIndicates whether the daa was accepted by the user. Required for opt in/out agreements.
accountCycleDayThe bill cycle date will be returned as an accountCycleDay, which represents the first day of the statement cycle for an account. The accountCycleDay can be 1-28.
responseDetails, code, subCode, description, urlSee Response Details

Update Account Details

This API updates detailed information about a specific account.

Structure of API Call

PUT​ /programs​/{programCode}​/accounts​/{accountIdentifier}

Obtain Bank Name

This API allows Partners to retrieve the bank name associated with a specific routing number.

Structure of API Call

GET /programs/{programCode}/bankNames?routingNumber={routingNumber}

API Call Structure Parameters

Field NameTypeRequired (Y/N)Description
routingNumberstringYBank routing number: 9-digit ABA routing number for wire
programCodestringYProgram code

How it Works

Call GET …/bankNames?routingNumber={routingNumber} and include the routing number for which the bank name is being requested.

Sample Response Body Parameters

Field NameTypeDescription
bankNamestringMaximum Characters: 18
responseDetailsobjectN/A

Response Codes

ScenarioCodesubCodeDescription
Success00Success
Incorrect routing number3760routingNumber not found
Request validation fails1010Invalid parameter routingNumber

Close Account

This endpoint provides the ability to close accounts without the assistance of the Green Dot Care team.

Structure of API Call

PUT /programs/{programCode}/accounts/{accountIdentifier}/close

How it Works

  • To set an account to restricted customer initiated spend down:
    • Submit a request to close the account by calling PUT /programs/{programCode}/accounts/{accountIdentifier}/close
    • Once the request is processed by the system, the partner will receive a response containing the following account status information:
      • The account status will be changed to restricted
      • The account status reason will be customerInitiatedSpendDown
      • There will not be a kycPendingGate (cure) (i.e. kycPendingGate: none)
    • All funds currently in the spend purses will be moved back to the primary purse automatically.
  • Note: For an account to be closed, it must be set to a restricted customer initiated spend down state.
    • The current status of the account must be normal.
    • An account with a negative balance cannot be closed using the API.

Response Codes

HTTP Status CodeCodesubCodeDescription
2005100Closing an account is not allowed unless account status is normal
2005360An account with a negative balance cannot be closed using the API

Closed Accounts

📘

APIs will be disabled for closed/purged accounts, so they can be placed into a closed terminal state.

How it Works

  • The accountStatus of an account will be set to closed if it meets the following conditions:
    • The current status is restricted, the statusReason is customerInitiatedSpendDown, and the balance has been $0 for 60 days.
    • The current status is restricted, the statusReason is spendDown, and the balance has been $0 for 210 days.
  • All state changing API endpoints will be blocked for a closed account.

Sample Response:

{
   "responseDetails":[
      {
         "code":3,
         "subCode":105,
         "description":"Account is closed.",
         "url":"http://tbd"
      }
   ]
}

Response Codes

📘

If an account is closed and any of the following endpoints are called, the following response details will be returned.

EndpointCodesubCodeDescription
POST /transfers MRDC, achOut, achPull, Purse to Purse, Disbursements, P2P

POST /transfers/assessment P2P o IFT, achOut
3105Source account is closed or Target account is closed.
PUT /transfers/{transferIdentifier} PUT /transfers/mrdc POST /accounts/{accountIdentifier}/adjustments POST /billpayPayees PUT /billpayPayees/{payeeIdentifier} DELETE /billpayPayees/{payeeIdentifier} POST /billpayPayments DELETE /billpayPayments/{paymentIdentifier} PUT/billPayPayments/{paymentIdentifier}3105Account is Closed.
POST /kycGates/idv2105Account is Closed.
PUT /accounts/{accountIdentifier} PUT /accounts/{accountIdentifier}/users/{userIdentifier} PUT /accounts/{accountIdentifier}/paymentInstruments/{p aymentInstrumentIdentifier} POST /accounts/{accountIdentifier}/activateCard DELETE /purses/{purseIdentifier}4105Account is Closed.
PUT /accounts/{accountIdentifier}/close5100Closing an account is not allowed unless Account Status is Normal.
POST /accounts/{accountIdentifier}/purses5100An account must be in a normal status to add a purse.
PUT /accounts/{accountIdentifier}/paymentInstruments/{p aymentInstrumentIdentifier}/lifecycleEvent4105Replacement request was not allowed due to closed account status.
PUT /accounts/{accountIdentifier}/paymentInstruments/{p aymentInstrumentIdentifier}/lifecycleEvent4313Cannot Pause card.
PUT /accounts/{accountIdentifier}/purses/{purseIdentifier}5100An account must be in a normal status to update a purse.

Obtain List of Fund Fulfillment MRDC Transfers

This endpoint accesses a list of MRDC transfers based on specific dates.

Structure of API Call

GET /programs/{programCode}/accounts/{accountIdentifier}/fundfulfillment/{transferIdentifier}/mrdc[?startDate][&endDate][&offset][&limit]

Obtain Fund Fulfillment MRDC Transfer

This endpoint accesses a specific MRDC transfer.

Structure of API Call

GET /programs/{programCode}/accounts/{accountIdentifier}/fundfulfillment/{transferIdentifier}/mrdc

Wire Out Transactions

🚧

This feature must be explicitly requested and configured on a per-partner basis. Contact your Green Dot Account Liaison for assistance.

This endpoint allows partners to wire out transactions and test in PIE (Partner Integration Environment).

Structure of API Call

POST /programs/{programCode}/accounts/{accountIdentifier}/wires

Request Body Parameters

Field NameTypeRequired (Y/N)Description
wireIdentifierguidYUnique identifier for the wire transaction.
amountdecimalYThe amount of the wire transaction excluding fees.

Minimum Amount: 0.01
currencyenumYUSD
obistringNOriginator to Beneficiary Information: used to convey information to the beneficiary regarding the transaction.

Also known as OBI.

Maximum Characters: 140
memostringNReason for the wire transaction.

Maximum Characters: 100
encryptedBeneficiaryDataencrypted objectYBeneficiary information Refer below to encryptedBeneficiaryData Object Description.
intermediaryBankobjectNIntermediary Bank information:

routingNumber: Optional, Intermediary bank routing number, 9-digit ABA routing number

bankName: Optional, Maximum Characters: 18

encryptedBeneficiaryData Parameters

FieldDescription
versionVersion of encryption algorithm used.
ephemeralPublicKeyBase64 encoded ephemeral public key. Needed for key agreement.
publicKeyHashBase64 encoded SHA-256 hash of the X509 encoded public key bytes used during encryption.
dataBase64 encrypted data of an object or property.

Refer to Crypto Primer for Banking as a Service (BaaS) for encryption details.

Sample Decrypted Data Parameters

Field NameTypeRequired (Y/N)Description
firstNamestringYBeneficiary’s first name.

Must be 1 - 35 characters long.
lastNamestringYBeneficiary’s first name.

Must be 1 - 35 characters long.
beneficiaryBankobjectYBeneficiary’s bank information: routingNumber: o Beneficiary’s routing number o 9-digit ABA routing number bankName: o Beneficiary’s Bank Name o Maximum Characters - 18
beneficiaryAccountNumberstringYBeneficiary’s account number
citystringYCity where Beneficiary lives.

Maximum Characters: 25
statestringYState where Beneficiary lives.

Must be a 2-letter state code.
addressLine1stringYStreet address where beneficiary lives,

Must be 2 - 40 characters.
addressLine2stringNOptional address where beneficiary lives.

Maximum Characters: 40
zipCodestringY5 digit US postal code

Response Codes

ScenarioCodesubCodeDescription
Success00Success
Insufficient Funds3103Insufficient Funds
Invalid Account Status3105Invalid Account Status
Agreement not signed355Agreement must be signed
Request validation failed1010Invalid parameter xxxxx
Decryption error50An encrypted data block on the payload was not decrypted successfully
Incorrect routing number for Intermediary3761Intermediary bank routingNumber not found
Incorrect routing number for beneficiary3762Beneficiary bank routingNumber not found
Intermediary Bank Name routing number does not match routing number provided3763Intermediary bank routingNumber and Routing Number not matched
Beneficiary Bank Name routing number does not match routing number provided3764Beneficiary bank routingNumber and Routing Number not matched
Only business accounts can wire out.3765Individual Account Is Not Allowed

Update User Identity

This API updates the identity for a specific user.

Structure of API Call

POST /programs​/{programCode}​/accounts​/{accountIdentifier}​/users​/{userIdentifier}​/identity

Obtain MRDC Transfer

This API retrieves the information for a specific MRDC transfer.

Structure of API Call

GET /programs​/{programCode}​/accounts​/{accountIdentifier}​/transfers​/{transferIdentifier}​/mrdc

Set Feature Eligibility

This API establishes the eligibility of a specific feature for a specific account.

Structure of API Call

PUT ​/programs​/{programCode}​/accounts​/{accountIdentifier}​/featureeligibility​/{featureId}

Obtain All Feature Eligibility

This API obtains feature eligibility details.

Structure of API Call

GET ​/programs​/{programCode}​/accounts​/{accountIdentifier}​/featureeligibility

Create Customer Profile (external account)

This API creates a customer profile for an external account.

Structure of API Call

POST​ /programs​/{programCode}​/externalAccounts

Update Customer Profile (external account)

This API updates a customer profile for an external account.

Structure of API Call

PUT​ /programs​/{programCode}​/externalAccounts/customers/{customerToken}

Link Customer Profile with Card (external account)

This API links a customer profile with a specific card for an external account.

Structure of API Call

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

Obtain Transfer from GFT Service (external account)

This API obtains a transfer from the GFT service for an external account.

Structure of API Call

GET​ /programs​/{programCode}​/externalAccounts/{externalAcctID}/transfers/{transferID}

Return List Link (external account)

This API returns a list link for an external account.

Structure of API Call

POST​ /programs​/{programCode}​/account/{accountIdentifier}/externalbankaccount

ACH Return Codes

ACH Return CodeDescription
1ACH Transaction exceed load limit
2ACH Account was closed
3ACH Transaction has invalid ACHTranCode
4ACH Customer Account Not Found
5ACH Direct Deposit Not Allowed on This Account
6ACH Card Not Activated
9ACH Transaction was Temp Card Without Perso
10ACH Transaction was NPNR
11ACH Transaction has CRV blocked
12ACH Transaction was rejected by card processor
13ACH Transaction debit funding response insufficient funds
14ACH Debit funding response reject (General)
15ACH Credit funding response reject (General)
16ACH Debit Transaction was rejected per the Durbin Amendment
17TaxRefundReject-IRS#800-829-1954
18TaxRefundReject-IRS#800-829-1954
19Tax Refund Reject: Non-Tax Season
20Tax Refund Reject: Payee Deceased
21ACH transaction is sent from prohibited sender
22Invalid Routing Number
23TaxRefundReject-IRS#800-829-1954
24ACH Transaction is voided and exported by rule
25Invalid CardExternalId
26ACH transaction exceeded the daily debit limit
27AccountNow ACH Transaction is funding via FIS
28ACH Transaction rejected due customer name/ssn mismatch
29ACH Transaction rejected due customer name/ssn mismatch
30ACH Transaction rejected during non-tax season
31ACH Transaction rejected due to credit rating
32Account Locked
33Spend Down
34Write Off
35Changed by CSR

What’s Next

For Accounts API Reference, click the link below.