Enrollments API Endpoints

This is a full list of our API enrollments endpoints, that can also be found in our API Reference.

Enrollments API Endpoints

📘

The following endpoints are used for the enrollment process. For technical reference of all Enrollments API endpoints, please refer to the API Reference section.

This API enrolls a user into a product and creates the account and card. It is also used to upgrade a GPR (General Purpose Reloadable) account to a DDA (Direct Deposit Account) when the upgradeFlag is set to true.

Note: If POST /enrollments is called with a valid request and enrollment fails during processing, the request will be automatically completed if the customer clears OFAC.

API Call Structure

POST /programs/{programCode}/enrollments

Request & Response - Parameters & Examples

These can be found in the API reference linked above in the API title.

First/Last Name Allowable Characters

  • Uppercase letters: A-Z
  • Lowercase letters: a-z
  • Space ( )
  • Single quote/apostrophe (')
  • Hyphen (-)
  • Period (.)
  • Diacritics
    • Grave (À, à)
    • Acute (Á, á)
    • Tilde (Ã, ã, Ñ, ñ)
    • Cedilla (Ç, ç)
    • Circumflex (Î, î)
    • Diaeresis/Umlaut (Ü, ü)

Rules:

  1. No consecutive special characters: Spaces, apostrophes, hyphens, and periods cannot appear twice or more in a row.
  2. Diacritics must be paired with an alphabetic character (cannot be displayed alone).
  3. Start and end with a letter: Names must begin and end with an alphabetic character (diacritics are allowed).
  4. Maximum length: Each name field (First, Middle, Last) can be up to 25 characters.
  5. Disallowed: All other characters (including emojis, numbers, and other symbols) are not permitted.

Sample Unencrypted User Data

To execute Know Your Customer (KYC) successfully, the profileData, identifyingData, email, and phoneNumbers fields are required.

Field

Description

profileData

Value contains the name and addresses of a user.

firstName

Required. Must be 1-35 characters. Refer to the Valid Characters for Names, Cities, and Addresses table for details.

middleName

Optional. Max 100 characters

lastName

Required. Must be 2-35 characters. Refer to the Valid Characters for Names, Cities, and Addresses table for details.

addresses

  • Object containing the full address of the user, along with the type.
  • A home address must be provided, and it must be the default address.
  • If KYC is requested and the home address does not contain addressLine1 and either (city and state) or zipCode, then the following description will be returned:
    • KYC requires a home address that contains addressLine1 and either (city and state) or zipCode.
  • Address types are:
    • home
    • work
    • billing (Case insensitive)
    • Currently, work and billing do not have any specific use cases for the debit account products. They will only be stored and retrieved.

addressLine1

Required value containing the home address of the user.

addressLine2

Home address continued

city

Required value containing the city where user lives.

state

Required value containing the state where user lives. Must be a two-character state code.

zipCode

Required value containing the user’s zipCode. Note: Must be only 5 digits. No extended zip codes allowed. If an extended zip code is provided, the extended digits will be stripped off by the system.

countryCode

Value containing the user’s countryCode. Default is USA

type

Value containing the type of address provided, which is required to be the “home” address.

isDefault

Field used to determine if a default value is used for email, phone, address, phone.

  • true = Use default.
  • false = Do not use default. For an address, false indicates to use a business address.

identifyingData

Field containing restricted personal identifying data. If included in payload, dateOfBirth and ssn or ssnSuffix is required. Becomes immutable once KYC is completed.

ssnSuffix

The last 4 digits of the user’s ssn. Products will require full ssn or the ssnSuffix only. Both ssn & ssnSuffix are mutually exclusive.

ssn

Must be exactly 9 digits, the full ssn of the user. Products will require full ssn or the ssnSuffix only. Both ssn & ssnSuffix are mutually exclusive. A non-US ssn will fail KYC2.

dateOfBirth

Must be between 1901 and current date and provided in the form YYYY-MM-DD

email

Field contains the email address of the user, along with its verification and data entered. Since only one user profile email address is allowed, the isDefault flag is ignored and the provided email address will always be the default.

emailAddress

String value with a max length of 255 characters. Note: In the Partner Integration Environment (PIE), we allow enrollment requests which include an e-mail address containing a “+” character in the username portion. This is to facilitate easier QA by our BaaS partners. In production environments this is not allowed. If the username portion of an e-mail address being attempted for enrollment contains a “+” character, then that request will fail. In production, the partner’s front-end application should use a mechanism that looks for that character and returns guidance to the customer to change the requested e-mail address and remove any disallowed characters.

phoneNumbers

The user’s phone number.

One default phone number (valid with 10 digits) must be provided or the first phone number in the list of phone numbers will be set to the default.

If more than one default phone number is provided, the following response will be returned:

  • HTTP Status: 400
  • Code: 1040
  • subCode: 0
  • Description: There can only be one default phone.Note: International codes are not supported at this time.

number

Optional

type

Value that Returns the type of phoneNumber provided by the user. Valid phone types are mobile, home, and work.

Upgrade Response Error Codes

ScenarioHttp StatusCodeSubcodeMessage
Missing/invalid account identifier4003500Account Identifier is invalid
Change user profile40045020User profile can‘t be changed
Account status not normal40045030Account status is not healthy
Target product code same with current product code40045040Target productCode not matched
Same request ID, account ID is different40045050Account not matched
Target product code not allowed for upgrade40045060Account already upgrade success
Account not found400100Account or account holder or user not found
Invalid product material type4004312Invalid Product Material type
CPM upgrade service return error40050300A downstream provider did not return success for Upgrade Account

KYC Verification

Note: To perform KYC verification checks on users, the userData object must have the following fields completed.

FieldRequired (Y/N)Description
firstNameYMust contain 1-35 characters.
lastNameYMust contain 2-35 characters.
address1YMust contain 2-40 characters. Must be the user's home address. Cannot be a PO Box or non-U.S. address. Note: Discuss any restrictions for selling in U.S. Territories with your Green Dot onboarding team.
address2NIf provided, must contain 1-40 characters.
CityYCity is required if there are any physical cards (payment instruments) associated with the product
StateYMust be two characters. Values can include: GU - Guam (Note: Will be rejected during enrollment requests) , PR - Puerto Rico (Note: Will be rejected during enrollment requests), VI - Virgin Islands, DC - District of Columbia
zipCodeYMust be 5 digits only (i.e., 99999). No extended zip codes are allowed. If they are provided, the system removes them
dateOfBirthYMust be YYYY-MM-DD.
ssnSuffix or ssnYMust be exactly 9 digits. Non-US SSNs will fail KYC2. Note: Products require a full ssn or a ssnSuffix only. Do not enter both.
phoneNumberYMust contain the user's 10-digit phone number.

Note: For more information, refer to Sample Unencrypted User Data.

KYC Verification Response Codes

ScenarioHTTP Status CodeCodeDescription
If the dateOfBirth is not provided in the format: YYYY-MM-DD.400700identifyingData.dateOfBirth must be in the form YYYY-MM-DD
If a ssn and a ssnSuffix are both provided.400630Cannot pass both last4SSN & SSN
If duplicate address types are provided. Note: Duplicate address types are not allowed.4001020Duplicated type is not allowed
• If more than one address is set as the default. • Note: Only one default address is allowed.4001040For card shipment, either a home or business address can be the default. • For home address, isDefault=true. • For business address, isDefault=false.
If a home address is not provided. Note: The default address is home. So, if isDefault is not provided, then the home address will be set as the default.4001042Home address is missing
If POST /enrollments is called and a phone number is not provided, but KYC is required400101phoneNumbers userData sections missing, check your JSON
📘

More information about KYC can be found on the KYC Page.

Currency Response Codes

ScenarioCodesubCodeDescription
An invalid ISO currency code is provided.6500Invalid Currency Code
A valid ISO currency code is provided, but it is not valid for the program.650430This product does not support this currency

User Data Response Codes

PropertyConstraints/ScenarioHTTP Status CodeCodesubCode
addressLine1> = 2 characters and <= 40 characters400400505
addressLine2<= 40 characters400400506
city<= 25 characters400400504
firstName<=35 characters400400501
lastName> =2 characters and <=35 characters400400502
addressLine1Invalid Characters400640505
addressLine2Invalid Characters400640506
middleNameInvalid Characters400640503
cityInvalid Characters400640504
firstNameInvalid Characters400640501
lastNameInvalid Characters400640502

Terms Acceptance Response Codes

ScenarioCodesubCodeDescription
POST /enrollments is called and the termsAcceptanceDateTime is before or after the 30-day (720 hours) timeframe for terms acceptance.6200termsAcceptanceDateTime must be within 720 hours of the time it was submitted

Bill Cycle Date (BCD)

Active accounts will return a bill cycle date when POST /enrollments is called.

  • The 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.
{
  "account":{
    "accountIdentifier":"58787933-9076-4f51-a217-8a2187033625",
    "accountReferenceNumber":"ACCP0000000",
    "status":"normal",
    "accountStatusChangedDateTime":"2020-04-02T16:46:20.13Z",
    "statusReasons":["healthy"],
    "directDepositInformation":{
      "accountNumber":"15**********00",
      "routingNumber":"******100"
    },
    "purses":[
      {
        "purseIdentifier":"d940751b-8208-4d18-9240-58e6ab8b6cfb",
        "purseType":"primary",
        "availableBalance":0.0,
        "ledgerBalance":0.0,
        "availableBalanceAsOfDateTime":"2020-04-02T14:46:19Z",
        "ledgerBalanceAsOfDateTime":"2020-04-02T14:46:19Z",
        "isHidden":false,
        "status":"active"
      }
    ],
    "accountHolders":[
      {
        "paymentInstruments":[
          {
            "encryptedPrivatePaymentInstrumentData":{
              "version":"EC_v1",
              "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEVMFTbdmLF5fffpAhSc99HgLvn7xOqbhMjXnTxCFOt5L1VomD3FHtFY7F128AuUDXEIDBLH0YwU42qzizyJBAqQ==",
              "publicKeyHash":"PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
              "data":"UhYFhBTSX6w/0LOTDfa5O0c+hy9exHIjrqJ6uNvi+Gf4kaut81Tvb9vdVTaFn8BpfGMscEx5QNzvxrh377PGD96bdpfhM0eJL9KjqmY8Rtv6/xC5ZqyzF92uYBkkZbFZ"
            },
            "paymentInstrumentIdentifier":"df2a43c1-2469-4cd4-b468-d1b51cac0059",
            "paymentInstrumentType":"virtual",
            "status":"activated",
            "isPinSet":true,
            "last4Pan":"0000",
            "activatedDateTime":"2020-04-02T16:46:19Z",
            "issuedDateTime":"2020-04-02T16:46:19Z",
            "isPrivateDataViewable":true
          },
          {
            "encryptedPrivatePaymentInstrumentData":{
              "version":"EC_v1",
              "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEn+LEayHfNDYMokvYnD7SsAL4dzyfbZ19NZCHsIaqd07KDIkpZh7T4W3QilkYQDOqRJvAKRiINuh5KcPeDoxLSA==",
              "publicKeyHash":"PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
              "data":"XbyTkaysIEcIQnppkDq8W8namlB9J96UvRVyt1TYYUpUn1OY7wrtFpC1HPRibPQZup8NfWp/7l5sq8ker1rvZqBo8Mw8QQIDH3QsXKj9kr7SwZY2"
            },
            "paymentInstrumentIdentifier":"2adba9d0-4f30-43f8-aa20-0a286ba4bd13",
            "paymentInstrumentType":"emv",
            "status":"notActivated",
            "isPinSet":true,
            "last4Pan":"0000",
            "issuedDateTime":"2020-04-02T16:46:20Z",
            "isPrivateDataViewable":false
          }
        ],
        "user":{
          "userIdentifier":"079c8dde-71c1-4ac7-b93a-cb187eb44ae2",
          "peerTransferAcceptPreference":"manual",
          "status":"active",
          "isPrimaryAccountHolder":true,
          "kycStateData":{
            "ofacStatus":"passed",
            "kycStatus":"passed",
            "kycPendingGate":"healthy"
          }
        }
      }
    ],
    "accountCycleDay":2 – The first day of the statement cycle for an account.
  },
  "responseDetails":[
    {
      "code":0,
      "subCode":0,
      "description":"Success",
      "url":"http://tbd"
    }
  ]" "
}

Idempotent Retry and Billing Cycle Dates

Note: Accounts must have a billing cycle date to have a normal account status.

  • Typically, the Billing Cycle Date (BCD) returned as an accountcycleday is automatically created at the time of enrollment, but in conditions where it cannot be created, the account will be left in a pending state.

Partners should make an idempotent call in these situations. The idempotent call for POST /enrollments will populate the BCD when the idempotent retry process is completed. The account status will also be set to normal.

Example: Using a POST /enrollments idempotent call to populate the BCD.

1st POST /enrollments call fails, and the BCD is null. The paymentIdentifier and the payment instruments are not created. The account is in a pending/registration not complete state.

Sample Request Body:-
{
  "user":
  {
    "encryptedUserData":
	{
      "version":"EC_v1",
      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEF+93ZmoH5cG5W30Lf8MIMeoOAd2BZJ1sLWUBsKrGqMT/fnTjN1MwqLFBiZwhICEX95uxdyuPuKgy05FObHm6hw==",
      "publicKeyHash":"kMhnzB6afrTdRvVFjhOQ5kjUTrPKvkygSCZQXQzNHYo=",      "data":"dJBb3AFMxUbyet1NDAkHVEKhFCFtsoLoQ+muuPBQnCfJjY4jfEBTjUcRVSKIjDgrUsgbwUv2p5le9bGWVFdLArny9SAPcBOtqzrawT+vk0UQApskdhAdrTZsp7Ecs3VOHZiLHUki/Rd5U6qH4cp2SLAskJRCmn7WmpK/C3++hBZZAVallw+htp/EUPUjl4hrowSoMzk/pZHlI9XWqm1kNGwEQG7GYuxCm7G86ff9Cnz+zOAKSN+nJD3rxXWSPV8CplkvoF7c4yWXAxB5Zjy5Ce7fqrknMTV6Na3TqZjxbF73YB45fUEETHPyaD5xCAK7fDztW16lRsKX2tSADxlajVzM6eeXoaksK2+IvXktJmEieqoUGLoDYOsWT9jJfwAOSvswZV+4t5WyOWJYugBFqI+hX2v/+XjgY7POwWXew5zOa7rTQm54Vr1DOoP3I8U0zmB/zys5CrlSV/FYdwlIZxAub2a8X2jUrG5yjPyRkmO0Bxjv0imj8VcCQR0wKD1CFDyzSLqUhMqqwTIcV5uPo0szdZQcwca2ODUHPzco7DUiVNTJA74RWEllaV5QkgFf7GW/sTUnBG1In4WXAxjJRXaydWsLcCYH/ZSiqWHGmXrHNpPjr6vXCNRxi5/X5wPgOZ8lFmoyVrafvAmQXqSzU4Kdg7TPEaQ8EuEiOH+M6Gp9UQNrtD0OKvHuZN3aAlBwH2H9cuLH0dniZbaemcGjJlcRH1nz"
    },
    "termsAcceptances":
	[{
        "termsIdentifier":"termsAndConditions",
        "termsAcceptanceDateTime":"2020-08-22T00:17:07.318Z"
    }]
  },
  "account":
  {
    "productCode":"50400",
    "productMaterialType":"pvc",
    "currency":"USD",
    "termsAcceptances":
	[
      {
        "termsIdentifier":"termsAndConditions",
        "termsAcceptanceDateTime":"2020-08-22T00:17:07.318Z",
        "termsAcceptanceFlag":"true"
      },
      {
        "termsIdentifier":"privPlcy",
        "termsAcceptanceDateTime":"2020-08-22T00:17:07.318Z",
        "termsAcceptanceFlag":"false"
      }
    ]
  },
  "requestPhysicalCardFlag":true,
  "executeKycFlag":true
}

Sample Response:-
{
  "account":{    
  },
  "responseDetails":[
    {
      "code":503,
      "subCode":0,
      "description":"Fail",
      "url":"http://tbd"
    }
  ]
}

The 2nd POST /enrollments call that is Idempotent puts the account into a normal healthy state once the idempotent retry process is completed. The BCD is populated and the paymentIdentifier and payment instruments are created. An Account Updated Webhook is sent.

Sample Request Body:-
{
  "user":{
    "encryptedUserData":{
      "version":"EC_v1",
      "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEF+93ZmoH5cG5W30Lf8MIMeoOAd2BZJ1sLWUBsKrGqMT/fnTjN1MwqLFBiZwhICEX95uxdyuPuKgy05FObHm6hw==",
      "publicKeyHash":"kMhnzB6afrTdRvVFjhOQ5kjUTrPKvkygSCZQXQzNHYo=",      "data":"dJBb3AFMxUbyet1NDAkHVEKhFCFtsoLoQ+muuPBQnCfJjY4jfEBTjUcRVSKIjDgrUsgbwUv2p5le9bGWVFdLArny9SAPcBOtqzrawT+vk0UQApskdhAdrTZsp7Ecs3VOHZiLHUki/Rd5U6qH4cp2SLAskJRCmn7WmpK/C3++hBZZAVallw+htp/EUPUjl4hrowSoMzk/pZHlI9XWqm1kNGwEQG7GYuxCm7G86ff9Cnz+zOAKSN+nJD3rxXWSPV8CplkvoF7c4yWXAxB5Zjy5Ce7fqrknMTV6Na3TqZjxbF73YB45fUEETHPyaD5xCAK7fDztW16lRsKX2tSADxlajVzM6eeXoaksK2+IvXktJmEieqoUGLoDYOsWT9jJfwAOSvswZV+4t5WyOWJYugBFqI+hX2v/+XjgY7POwWXew5zOa7rTQm54Vr1DOoP3I8U0zmB/zys5CrlSV/FYdwlIZxAub2a8X2jUrG5yjPyRkmO0Bxjv0imj8VcCQR0wKD1CFDyzSLqUhMqqwTIcV5uPo0szdZQcwca2ODUHPzco7DUiVNTJA74RWEllaV5QkgFf7GW/sTUnBG1In4WXAxjJRXaydWsLcCYH/ZSiqWHGmXrHNpPjr6vXCNRxi5/X5wPgOZ8lFmoyVrafvAmQXqSzU4Kdg7TPEaQ8EuEiOH+M6Gp9UQNrtD0OKvHuZN3aAlBwH2H9cuLH0dniZbaemcGjJlcRH1nz"
    },
    "termsAcceptances":[
      {
        "termsIdentifier":"termsAndConditions",
        "termsAcceptanceDateTime":"2020-08-22T00:17:07.318Z"
      }
    ]
  },
  "account":{
    "productCode":"50400",
    "productMaterialType":"pvc",
    "currency":"USD",
    "termsAcceptances":[
      {
        "termsIdentifier":"termsAndConditions",
        "termsAcceptanceDateTime":"2020-08-22T00:17:07.318Z",
        "termsAcceptanceFlag":"true"
      },
      {
        "termsIdentifier":"privPlcy",
        "termsAcceptanceDateTime":"2020-08-22T00:17:07.318Z",
        "termsAcceptanceFlag":"false"
      }
    ],
    "fraudData":{
      "key":"string",
      "key":{
        "prop1":"val1",
        "prop2":"val2"
      }
    }
  },
  "requestPhysicalCardFlag":true,
  "encryptedPin":{
    "version":"EC_v1",
    "ephemeralPublicKey":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmx9T4EJNQHNWHRnf+U48rFWlrUwhXyivdkZrUl2rD4wVVJInEs8MRP7ISABTKEqh8NDdWAsc8hsKtGtxHgYA4A==",
    "publicKeyHash":"kMhnzB6afrTdRvVFjhOQ5kjUTrPKvkygSCZQXQzNHYo=",
    "data":"n8V1k4aSNNqsZWebsq2BKqkWGgFbf2lmS7mklbJo"
  },
  "executeKycFlag":"true"

Sample Response:-
{
    "account":{
      "accountIdentifier":"90edb081-299c-44f1-9a59-f8ddf5ba6155",
      "accountReferenceNumber":"UNP5639733",
      "status":"normal",
      "accountStatusChangedDateTime":"2020-08-22T00:20:19.560Z",
      "statusReasons":[
        "healthy"
      ],
      "directDepositInformation":{
        "accountNumber":"10157253856458",
        "routingNumber":"096017418"
      },
      "purses":[
        {
          "purseIdentifier":"a4b2e6e4-0e80-4e7a-91ca-7ede3913b2ed",
          "purseType":"primary",
          "availableBalance":0.0000,
          "ledgerBalance":0.0000,
          "availableBalanceAsOfDateTime":"2020-08-21T22:20:16Z",
          "ledgerBalanceAsOfDateTime":"2020-08-21T22:20:16Z",
          "isHidden":false,
          "status":"active"
        }
      ],
      "accountHolders":[
        {
          "paymentInstruments":[
            {
              "paymentIdentifier":"6a69336f-78df-40ec-998b-1a0cc4ea1d1b",
              "paymentInstrumentIdentifier":"30f5874d-1e33-4ea4-94fd-4ed47185c14e",
              "paymentInstrumentType":"virtual",
              "status":"activated",
              "isPinSet":false,
              "last4Pan":"7186",
              "activatedDateTime”: "2020-08-22T00":"20":16Z",             
			  "issuedDateTime": "2020-08-22T00":"20":16Z",             
			  "isPrivateDataViewable": false          
			  }],       
			  "user": 
			  {          
				  "firstName": "ZdzYPOIT",          
				  "lastName": "GIiQqxEo",          
				  "dobStatus": "matched",          
				  "last4Identity": "2353",          
				  "identityType": "ssn",          
				  "userIdentifier": "41545272-7f24-4703-bab5-5ae5bae2a303",          
				  "status": "active",          
				  "isPrimaryAccountHolder": true,          
				  "kycStateData": 
				  {             
					  "ofacStatus": "passed",             
					  "kycStatus": "passed",             
					  "kycPendingGate": "healthy"          
				  }       
			  }    
		}], 
		accountCycleDay": 21
   },
   "responseDetails":[
	{
	  "code":0,
	  "subCode":0,
	  "description":"Success",
	  "url":"http://tbd"
	}]

Active Consumer Account Limits

An account is considered active when it has been activated and either has an account status of normal or a kycPendingGate (aka: Cure) with a value other than none. There is a limit to the number of active accounts allowed per social security number for Consumer Accounts.

When the Active Account Limit rule is encountered during a POST /enrollments call and the date of births match, the most recent active enrollment details will be returned. If the date of births do not match, only the response details will be returned.

Social Security Number (SSN) Limits

  • Up to 1 active accounts with the same SSN per program is allowed
  • Up to 3 lifetime accounts with the same SSN per program are allowed

Phone Limits - Default or Primary Phone Number on Account

The following phone limits will be implemented (during enrollment) only for the phone number that is listed as the default for the account:

  • Up to 2 active accounts with the same phone number per program are allowed
  • Up to 10 lifetime accounts with the same phone number per program are allowed

Note: Updates requested for phone numbers that exceed the current phone limits will be declined.

ITIN Limits

  • Up to 1 active accounts with the same ITIN per program are allowed
  • Up to 3 lifetime accounts with the same ITIN per program are allowed

Refer to Active Small Business Account Limits for details about small business account limit thresholds.

Response Codes

ScenarioCodesubCodeDescription
More than 1 active account is created with the same SSN or ITIN per program.260Number of Active Accounts Exceeded.
More than 3 lifetime accounts are created with the same SSN or ITIN per program.261Number of Activated Accounts over Lifetime exceeded.
More than 2 active accounts are created with the same phone number per program.263Number of Active Accounts Exceeded.
More than 10 lifetime accounts are created with the same phone number.266Number of Activated Accounts over Lifetime exceeded.

Sample Response – Date of Births Match

Sample Response – Date of Births Match:-
{
  "account":{
    "accountIdentifier":"8e1bd112-661b-473f-acad-4ed6181c4c21",
    "accountReferenceNumber":"OXF2701925",
    "status":"normal",
    "statusReasons":[
      "healthy"
    ],
    "directDepositInformation":{
      "accountNumber":"101034163709758",
      "routingNumber":"096017418"
    },
    "purses":[
      {
        "purseIdentifier":"252d1bc1-754f-46e8-95df-aade9bcf25c3",
        "         ""purseType":"primary",
        "availableBalance":0.0,
        "ledgerBalance":0.0,
        "availableBalanceAsOfDateTime":"2018-10-18T21:10:32Z",
        "ledgerBalanceAsOfDateTime":"2018-10-18T21:10:32Z"
      }
    ],
    "accountHolders":[
      {
        "user":{
          "userIdentifier":"1b19ffb1-e869-4c83-8eaa-4af6e5e867c2",
          "status":"active",
          "isPrimaryAccountHolder":true,
          "kycStateData":{
            "ofacStatus":"passed",
            "kycStatus":"passed",
            "kycPendingGate":"healthy"
          }
        },
        "paymentInstruments":[
          {
            "paymentInstrumentIdentifier":"1e5ea745-d3ac-41e6-a703-29c9974c9e49",
            "paymentInstrumentType":"virtual",
            "status":"activated",
            "isPinSet":false,
            "last4Pan":"3782",
            "activatedDateTime":"2018-10-18T23:10:32Z",
            "issuedDateTime":"2018-10-18T23:10:32Z",
            "isPrivateDataViewable":"false"
          }
        ]
      }
    ]
  },
  "responseDetails":[
    {
      "code":2,
      "subCode":60,
      "description":"Number of Active Accounts Exceeded.",
      "url":"http://tbd"
    }
  ]
}

Sample Response – Date of Births do not Match:-
{
  "responseDetails":[
    {
      "code":2,
      "subCode":60,
      "description":"Number of Active Accounts Exceeded.",
      "url":"http://tbd"
    }
  ]
}

Business Rule Response Sub-Codes

Refer to Business Rule Response Sub-Codes for details.

This API obtains enrollment details.

📘

This API will return two account holders for a joint account.

Note: 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.

API Call Structure

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

Joint Account Enrollment Details

This API will return two account holders for a joint account.

Route Parameters

Parameter nameTypeValueDescription
programCodestringwfThis value identifies the program type of the account to be created.
accountIdentifieruuidvalue variesProperty and value provided in response of Enrollment call.

Headers

Header nameTypeValuedescription
X-GD-RequestIduuidvalue variesThis property is used to uniquely identify each request.
Authorizationbearer tokenvalue variesthe token get from GD

Response

{
  "account": {
    "accountIdentifier": "55881304-e02f-4048-a176-5efb4f6c8a79",
    "accountReferenceNumber": "APM8757797",
    "productCode": "50400",
    "productTierKey": 32,
    "currency": "USD",
    "status": "normal",
    "instantIssue": false,
    "statusReasons": [
      "healthy"
    ],
    "accountStatusChangedDateTime": "2025-02-04T07:53:34.140Z",
    "directDepositInformation": {
      "accountNumber": "11150794159285",
      "routingNumber": "124303214"
    },
    "purses": [
      {
        "purseIdentifier": "2201b224-fa8b-48cc-bcd6-4afa55033190",
        "purseType": "primary",
        "availableBalance": 0,
        "ledgerBalance": 0,
        "availableBalanceAsOfDateTime": "2025-02-04T05:53:06Z",
        "ledgerBalanceAsOfDateTime": "2025-02-04T05:53:06Z",
        "isHidden": false,
        "status": "active",
        "interestRateTier": "",
        "isRoundUp": false
      }
    ],
    "accountHolders": [
      {
        "paymentInstruments": [
          {
            "paymentIdentifier": "6e9b39ec-d7f3-4303-a64d-568de0ebccae",
            "paymentInstrumentIdentifier": "6e289520-79a9-4da4-8444-6a9868f094f0",
            "paymentInstrumentType": "virtual",
            "status": "activated",
            "isPinSet": false,
            "last4Pan": "2557",
            "activatedDateTime": "2025-02-04T07:53:06Z",
            "issuedDateTime": "2025-02-04T07:53:06Z",
            "isPrivateDataViewable": false
          },
          {
            "paymentIdentifier": "6e9b39ec-d7f3-4303-a64d-568de0ebccae",
            "paymentInstrumentIdentifier": "1674c927-1d73-4948-957c-f4f1eb20cc14",
            "paymentInstrumentType": "emv",
            "status": "notActivated",
            "isPinSet": false,
            "last4Pan": "2557",
            "issuedDateTime": "2025-02-04T07:53:08Z",
            "isPrivateDataViewable": false,
            "productMaterialType": "pvc",
            "cardIssueSource": "mailer"
          }
        ],
        "user": {
          "firstName": "First h1MYC1v",
          "lastName": "First 3ymkEem",
          "dobStatus": "matched",
          "last4Identity": "1128",
          "identityType": "ssn",
          "userIdentifier": "bf607fdd-536b-40e8-82f2-165f6e7c4ff3",
          "peerTransferAcceptPreference": "manual",
          "status": "active",
          "isPrimaryAccountHolder": true,
          "kycStateData": {
            "ofacStatus": "passed",
            "kycStatus": "passed",
            "kycPendingGate": "healthy"
          }
        },
        "accountHolderIdentifier": "adfe56b1-9732-4ce1-a8a7-aa06bb263135"
      },
      {
        "paymentInstruments": [
          {
            "paymentIdentifier": "fe73761b-e064-4876-9800-c481df68a028",
            "paymentInstrumentIdentifier": "a4724482-215b-412f-ad88-e88697641cd3",
            "paymentInstrumentType": "virtual",
            "status": "activated",
            "isPinSet": false,
            "last4Pan": "4036",
            "activatedDateTime": "2025-02-04T07:53:46Z",
            "issuedDateTime": "2025-02-04T07:53:46Z",
            "isPrivateDataViewable": false
          }
        ],
        "user": {
          "firstName": "Second YQ41JQQM",
          "lastName": "Second TlFe8NRz",
          "dobStatus": "matched",
          "last4Identity": "8436",
          "identityType": "ssn",
          "userIdentifier": "5c24d7e5-8b8f-4b3c-816e-d56fbcf97fee",
          "peerTransferAcceptPreference": "manual",
          "status": "active",
          "isPrimaryAccountHolder": false,
          "kycStateData": {
            "ofacStatus": "passed",
            "kycStatus": "passed",
            "kycPendingGate": "healthy"
          }
        },
        "accountHolderIdentifier": "dabfa22f-0570-4cfa-9868-353daca958cb"
      }
    ],
    "termsAcceptances": [
      {
        "termsIdentifier": "privPlcy",
        "termsAcceptanceDateTime": "2025-02-04T07:53:01.857Z",
        "termsAcceptanceFlag": false
      },
      {
        "termsIdentifier": "daa",
        "termsAcceptanceDateTime": "2025-02-04T07:53:01.857Z",
        "termsAcceptanceFlag": true
      },
      {
        "termsIdentifier": "eca",
        "termsAcceptanceDateTime": "2025-02-04T07:53:01.857Z",
        "termsAcceptanceFlag": true
      }
    ],
    "accountCycleDay": 3,
    "productClass": "Perso",
    "enrollmentSource": "OnlineSales"
  },
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "Success",
      "url": "http://tbd"
    }
  ]
}

Update Consumer Profile

This endpoint updates an enrollment account's consumer profile.

Structure of API Call:

PUT /programs/{programCode}/enrollments/account/{accountIdentifier}

Accepting Matricula Consular Identification

This feature allows partners to use Matricula Consular IDs to enroll Mexican Citizens, living in the US, who may not have a Social Security Number (SSN) or an Individual Taxpayer Identification Number (ITIN).

Note: The Matricula Consular ID cannot be used along with an SSN or ssnSuffix (last4ssn). They are mutually exclusive, so if used together, the following error will be returned :

  • HTTP Status Code: 400
  • Code: 630
  • subCode: 0
  • Description: Cannot pass both matriculaId and SSN or last4ssn

To enroll a customer using a Matricula Consular ID:

  • Call POST /programs/{programCode}/enrollments and include the onboardingID received from the POST /kycGates/scanCapture call you completed
  • Note: You must call POST /kycGates/scanCapture before calling POST /enrollments

Sample Unencrypted User Data

{
  "profileData":{
    "firstName":"Alice",
    "middleName":"Mary",
    "lastName":"Jones",
    "addresses":[
      {
        "addressLine1":"215 Main St.",
        "addressLine2":"Suite 200",
        "city":"Pasadena",
        "state":"CA",
        "zipCode":"91107",
        "countryCode":"USA",
        "type":"home",
        "isDefault":true
      }
    ]
  },
  "identifyingData":{
    "dateOfBirth":"1990-01-20",
    "onboardingID":"string"
  },
  "email":{}    
}

Add Taxpayer ID to Customer Account Originally Enrolled Using Mexican Matricula ID

This endpoint allows an Individual Taxpayer Identification Number (ITIN) to be added to a customer’s account that originally enrolled using a Mexican Matricula ID only. This is primarily for U.S. tax purposes.

Structure of API Call:

POST /accounts/{accountIdentifier}/users/{userIdentifier}/identity

How it Works

If a customer successfully enrolls using a Mexican Matricula ID only and they would like to add an ITIN to their account, submit a request containing the ITIN to POST /accounts/{accountIdentifier}/users/{userIdentifier}/identity.

ITIN Limits

  • Up to 1 active account with the same ITIN per consumer program is allowed
  • Up to 3 lifetime accounts with the same ITIN per consumer program are allowed

Response Codes

ScenarioCodeHTTP Status CodesubCodeDescription
A request is submitted with an ITIN that does not start with a 9, is not in 9- digit format, or is not in non-numeric values.7614000Invalid ITIN
A request is submitted to add an ITIN to an account, but a Matricula ID was not used for enrollment.5200380An Identity can only be added to a Matricula based enrollment.
The limit of active accounts with the same ITIN is exceeded.2N/A60Number of Active Accounts Exceeded.
The limit of lifetime accounts with the same ITIN is exceeded.2N/A61Number of Activated Accounts over Lifetime exceeded

Diacritic Character Substitution

Customers can use Spanish characters to properly spell their name during enrollment and replace card requests.

How it Works

Partner will allow identified Spanish characters to be used in the first and last names of their customers.

During enrollment, when the customer enters the allowed Spanish characters for their first and last name, the name embossed onto the card will be substituted with identified replacement characters, by the system.

Refer to the Valid Characters for Names, Cities, and Addresses table for details.

Retrieve Account and Payment Instrument Information

This endpoint retrieves information regarding an account and payment instrument.

API Call Structure

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

Response Parameters

  • account – Value that returns the user’s account information.
  • accountIdentifier – String value that returns a unique identifier for the account.
  • accountReferenceNumber – String value that is a friendly unique identifier of an account that is safe for sharing between intra and intercompany staff.
  • productCode – Unique identifier of a product within a program.
  • currency – Alpha-3 ISO Currency Code.
  • Status – String value that returns the status of an account.
  • statusReasons – String value that returns the reason for the status of an account.
  • accountStatusChangedDateTime – Date and time of the account status change in UTC format.
  • directDepositInformation – Value that identifies the account that will be used for direct deposits, along with the account number and routing number.
  • accountNumber – Value Returns the account number of the account being used for direct deposit.
  • routingNumber – String value Returns the routing number of the account being used for direct deposit.
  • purses – A balance holding object that returns the following information about the primary purse (used for general spending activities).
  • purseIdentifier – Value that is read only and set to true. It is a unique identifier of a purse within an account.
  • purseType – Value used to indicate the purpose of the purse.
  • availableBalance – Number value representing the amount of funds available for use. Pending transactions are included.
  • ledgerBalance – Number value that represents the balance of the account based on all activities that have been posted to the associated ledger.
  • availableBalanceAsOfDateTime – The date/time (UTC) that the available balance is reflective of.
  • ledgerBalanceAsOfDateTime – The date/time (UTC) that the ledger balance is reflective of.
  • isHidden – True or False
  • status – Purse status
  • accountHolders – Value that contains detailed information about the account holders.
  • paymentInstruments – Used by an accountholder to conduct transactions and make payments. A payment instrument will typically be a physical or virtual card. Contactless EMV cards are also available. Contact your Green Dot Representative to request configuration.
  • paymentIdentifier – Unique identifier for a payment instrument if a payment instrument was created.
  • paymentInstrumentIdentifier – Unique identifier of a payment instrument for an account.
  • paymentInstrumentType – Indicates the type of payment instrument (card) being used. See your Green Dot Representative to request configuration for contactless EMV.
  • status – Payment Instrument Status
  • isPinSet – Indicates if the ATM pin has been set for this card.
  • last4Pan – Last 4 digits of the card number
  • issuedDateTime – The date/time (UTC) that the card was requested by the user.
  • isPrivateDataViewable – Indicates if privatePaymentInstrumentData can be returned and viewed.
    Note: If this field is true, then the privatePaymentInstrumentData field will be viewable. This field will not be returned for non-virtual cards.
    Note: Partners who are not configured for encryption will have encrypted data, such as encryptedPrivatePaymentInstrumentData, omitted from the data objects in their responses.
  • user – Field Returns information about the user of an account.
  • firstName – First name of an account holder.
  • lastName – Last name of an account holder.
  • dobStatus – Can 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
  • last4Identity – Last 4 digits of the account holder’s social security number.
  • identityType – Type of identity being used for the account holder (i.e. ssn).
  • userIdentifier – Unique identifier of a user within a program.
  • peerTransferAcceptPreference – Value 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.
  • isPrimaryAccountHolder – Identifies the primary accountHolder.
  • status – Current status of the user. It is set to active, which means that the user is fully active.
  • kycStateData – Current OFAC and KYC status of the user.
  • ofacStatus – Result of most recent OFAC check on the user of the account (pending, passed, or failed).
  • kycStatus – Result of most recent KYC check on the user of the account (pending, passed, or failed).
  • kycPendingGate – kycGate that the user must pass through to successfully complete KYC (none, kyc2, idv, healthy, manual).
  • accountHolderIdentifier –
  • termsAcceptances – Represents the acceptance of daa by a user.
  • termsIdentifier – Unique identifier for the daa that was accepted.
    Note: termsAcceptanceFlag must be set to true.
  • termsAcceptanceDateTime – Optional. Date/time in UTC that the daa was accepted.
    Note: If not provided, will default to the current date/time.
  • termsAcceptanceFlag – Indicates whether the terms were accepted by the user. Required for opt in/out agreements.
  • accountCycleDay – The 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 – Includeds code, subcode, description, URL. See Response Details

Sample Response Bill Cycle Date (BCD)

Active accounts will return a bill cycle date when GET /enrollments is called.

The 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.

{
  "account":{
    "accountIdentifier":"cab629b7-9b3e-4a31-9ada-a9fa4023eb34",
    "accountReferenceNumber":"NRT0000000",
    "productCode":"00000",
    "currency":"USD",
    "status":"restricted",
    "statusReasons":[
      "potentialFraud"
    ],
    "accountStatusChangedDateTime":"2020-04-02T16:49:21.4Z",
    "directDepositInformation":{
      "accountNumber":"10**********00",
      "routingNumber":"******000"
    },
    "purses":[
      {
        "purseIdentifier":"c0bcab94-ba24-4fc7-a65a-eb914ac65611",
        "purseType":"primary",
        "availableBalance":50.0,
        "ledgerBalance":50.0,
        "availableBalanceAsOfDateTime":"2020-04-02T14:49:06Z",
        "ledgerBalanceAsOfDateTime":"2020-04-02T14:49:06Z",
        "isHidden":false,
        "status":"active"
      }
    ],
    "accountHolders":[
      {
        "paymentInstruments":[
          {
            "paymentInstrumentIdentifier":"beb01ec5-d2a3-4db6-b098-a5974c7c31bd",
            "paymentInstrumentType":"emv",
            "status":"notActivated",
            "isPinSet":true,
            "last4Pan":"7672",
            "issuedDateTime":"2020-04-02T16:49:06Z",
            "isPrivateDataViewable":false
          }
        ],
        "user":{
          "userIdentifier":"39250690-2b55-43da-8b7b-24567b1a1a1c",
          "peerTransferAcceptPreference":"manual",
          "status":"active",
          "isPrimaryAccountHolder":true,
          "kycStateData":{
            "ofacStatus":"passed",
            "kycStatus":"passed",
            "kycPendingGate":"none"
          }
        }
      }
    ],
    "termsAcceptances":[
      {
        "termsIdentifier":"privPlcy",
        "termsAcceptanceDateTime":"2020-04-02T16:49:04.483Z",
        "termsAcceptanceFlag":false
      },
      {
        "termsIdentifier":"daa",
        "termsAcceptanceDateTime":"2020-04-02T16:49:04.483Z",
        "termsAcceptanceFlag":true
      },
      {
        "termsIdentifier":"eca",
        "termsAcceptanceDateTime":"2020-04-02T16:49:04.483Z",
        "termsAcceptanceFlag":true
      }
    ],
    "accountCycleDay":2 -- The first day of the statement cycle for an account.
  },
  "responseDetails":[
    {
      "code":0,
      "subCode":0,
      "description":"Success",
      "url":"http://tbd"
    }
  ]
}

Unblock Card Retry Process

If a fraud block is removed from an account and the payment instrument remains blocked, the request to unblock the payment instrument will be retried up to 3 times.

Note: All three retries will be completed in 15 minutes.

Retry Process

  1. A BaaS account is locked due to suspicion of fraud.
  2. A request to update the account and payment instrument to a healthy and normal state is submitted.
  3. The account is updated to healthy and normal, but the payment instrument remains blocked.
  4. The request to unblock the payment instrument is automatically retried up to 3 times.
  5. The retry process is successful and the card is unblocked OR the retry process is unsuccessful and the kycPendingGate is set to manual with the statusReason underReview.
  6. If the retry process is unsuccessful, the payment instrument will need to be unblocked by the Green Dot Care team.

Sample Response – GET Enrollment After Unsuccessful Retry Process

{
  "responseHeader":{
    "responseId":"06a1cc33-48ce-451e-afc0-fb2ba578ea38",
    "statusCode":0,
    "subStatusCode":0,
    "message":"Success"
  },
  "account":{
    "accountIdentifier":"cb9a242c-5dc2-4810-aeb2-d20a463273f9",
    "accountReferenceNumber":"CCC6782110",
    "productCode":"00000",
    "productName":"Super Product",
    "currency":"USD",
    "status":"locked",
    "accountStatusChangedDateTime":"2020-12-29T23:04:11.030Z",
    "statusReasons":[
      "underReview"
    ],
    "directDepositInformation":{
      "accountNumber":"000071784780522",
      "routingNumber":"000017410"
    },
    "purses":[
      {
        "purseIdentifier":"b199d612-80ef-4c46-9544-442578f8fd5e",
        "purseType":"primary",
        "availableBalance":0.0000,
        "ledgerBalance":0.0000,
        "availableBalanceAsOfDateTime":"2020-12-29T14:28:09.34",
        "ledgerBalanceAsOfDateTime":"2020-12-29T14:28:09.34",
        "isHidden":false,
        "status":"active"
      }
    ],
    "accountHolders":[
      {
        "user":{
          "firstName":"John",
          "lastName":"Doe",
          "dobStatus":"matched",
          "last4Identity":"1111",
          "identityType":"ssn",
          "userIdentifier":"b3b4c380-1015-41a7-89a8-6656da521009",
          "peerTransferAcceptPreference":"manual",
          "isPrimaryAccountHolder":true,
          "status":"active",
          "kycStateData":{
            "ofacStatus":"passed",
            "kycStatus":"passed",
            "kycPendingGate":"manual"
          }
        },
        "paymentInstruments":[
          {
            "paymentInstrumentIdentifier":"72a88759-ede1-4913-9758-5982713fbcd0",
            "paymentIdentifier":"886e8c65-5e52-427c-8677-013ac9d11233",
            "paymentInstrumentType":"virtual",
            "status":"blocked",
            "last4Pan":"2222",
            "issuedDateTime":"2020-12-29T22:28:09.333Z",
            "activatedDateTime":"2020-12-29T22:28:09.333Z",
            "isPinSet":false,
            "isPrivateDataViewable":"false",
            "customCardImageIdentifier":null,
            "paymentInstrumentStatusReasons":[
              "accountBlock"
            ]
          },
          {
            "paymentInstrumentIdentifier":"ac978783-d6eb-491f-9047-1c035cda5366",
            "paymentIdentifier":"886e8c65-5e52-427c-8677-013ac9d11233",
            "paymentInstrumentType":"emv",
            "status":"blocked",
            "last4Pan":"2222",
            "issuedDateTime":"2020-12-29T22:28:10.88Z",
            "isPinSet":false,
            "isPrivateDataViewable":"false",
            "customCardImageIdentifier":null,
            "paymentInstrumentStatusReasons":[
              "accountBlock"
            ]
          }
        ],
        "accountHolderIdentifier":"26122e71-fa5e-4de0-931b-3e7936a2a49f"
      }
    ],
    "termsAcceptances":[
      {
        "termsIdentifier":"daa",
        "termsAcceptanceDateTime":"2020-12-29T22:28:07.000Z",
        "termsAcceptanceFlag":true
      },
      {
        "termsIdentifier":"privPlcy",
        "termsAcceptanceDateTime":"2020-12-29T22:28:07.000Z",
        "termsAcceptanceFlag":true
      },
      {
        "termsIdentifier":"eca",
        "termsAcceptanceDateTime":"2020-12-29T22:28:07.000Z",
        "termsAcceptanceFlag":true
      }
    ],
    "accountCycleDay":1
  }
}

Get Activation Link

This API generates a custom URL to complete account activation after a customer has enrolled for a partner DDA account in store.

API Call Structure

GET /programs/{programCode}/enrollments/fsc/activationlink

Error Codes

ErrorHttp StatusCodeSub CodeDescription
Empty accountIdentifier, idType, or countryCode4002000AccountIdentifier/ IdType/CountryCode is required.