Joint Accounts

Joint Account API

Create Joint Account

This API changes an individual account to become a joint account.

Route

POST /programs/{ProgramCode}/accounts/{AccountIdentifier}/AccountHolder

Route Parameters

Parameter nameTypeValueDescription
ProgramCodestringwfThis property identifies the program type of the account to be created.
AccountIdentifierstringGUIDThe individual account identifier

Headers

X-GD-RequestIduuidvariesThis property is used to uniquely identify each request.
Authorizationbearer tokenvariesthe token get from GD

Request

{
  "requestPhysicalCard": boolean,
  "currency": "string",
  "termsAcceptances": [
    {
      "termsIdentifier": "string",
      "termsAcceptanceDateTime": "string",
      "termsAcceptanceFlag": true
    }
  ],
  "userProfile": {
    "version": "string",
    "ephemeralPublicKey": "string",
    "publicKeyHash": "string",
    "data": "string"
  }
}
Property nameRequiredValueDescription
productMaterialTypeNpvcThis property identifies the type of material to use for the card.
currencyYUSDThis property identifies the currency type of the account.

Uses Alpha-3 ISO-4217 Currency code.
termsAcceptances[].termsIdentifierYSee “Allowed Terms and Conditions” section below for valuesThis property identifies a terms document that the user has accepted.
termsAcceptances[].termsAcceptanceDateTimeY"2024-07-17T03:08:28.067Z"This property identifies the dateTime stamp of when the customer accepted the terms document.

Uses ISO-8601 in UTC format “YYYY-MM-DDTHH:MM:SS.SSSZ“.
termsAcceptances[].termsAcceptanceFlagYtrue or falseThis property identifies the election of a legal terms document accepted by the user.

(See “Allowed Terms and Conditions“ below) For any of the termsIdentifier in the object array, where the “IsRequired” value is set to “false”, then the application will be rejected.
requestPhysicalCardFlagYtrue or falseThis property identifies if the client wants a physical card issued immediately as part of the enrollment process.

To create an account with a virtual payment instrument only, this flag must be set to “false”. Partner can use lifeCycleEvent API to request initialPhysicalCard later
userProfileYobjectEncrypted data.

Addresses, email AND phoneNumbers are optional, if NOT provided use account holder info specified during initial enrollment.

Unencrypted User Data Parameters can be found below.

Allowed termsIdentifier values

Description“termsIdentifier” value“termsAcceptanceFlag“ value
Deposit Account Agreementdaatrue
Privacy PolicyprivPlcytrue
Electronic Communications Agreementecatrue
TCPA Promotional Messaging Express Written ConsentTcpaPromotrue or false
TCPA Informational Messaging Express ConsentTcpaInfotrue

Sample Request

{
  "requestHeader": {
    "requestId": "8a218080-cd0b-e948-18cb-8ec919a0b3d4"
  },
  "userProfile": {
    "version": "EC_v1",
    "ephemeralPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3ju/a8kC8G8IIzIbhWtfNmkkOs+DmCAp1vCqnX2FrmpyWiRwLt+q4slTf40ICGWCbK4tcon1aGLcS6R3TkMxTw==",
    "publicKeyHash": "PiRV5ko8JYGxAtcNb9WV4aVg7aXIp8EsstmeUqqWzT8=",
    "data": "kFNmPZi3KoR3pSV7EO3I1/M4Ss4zd5Zhia2dJhI9DGu03d5M9pwrMSVlmG21NqvR9cN9pSi592dgkQOmQhY01nU/IzV1FnKcdVmnhManjtsrwAe4u2S464gAraBtTWaVMbnHirTEJDE4WgKu/kIh+FpCE8kuzf/A+6XRJdsUraF/iu38fn+IzkwIGqiIjyAc92TM7hTA/pPToRL4dXhi/9dpBsr3F+6kjKbezoC9cMlHQMBG+Ulzb7R3ksLihfiI586X2EXYQ197zb1cZ3P4qcAr3a3tyKx1/6XJs8i+hB5mZHWy0108/XBi4RGg3et8H+h4RtVogqNMptw4oxzNR72UxAg65+LqZZx96M+ITPme33Jgjz2LWk3G3X4cx4Zox60PHh4siWPCW4OvuwtnuqpL/EldWavhR6ZVPoM1DU5p/VCnIPZy4Ilvh3XJFv0hmsOHDZnRQvrceH88KU/iyD3yweUtQbhJOIl0ZpL2KSuSMi42/kv0aOnYKgPTdCjgqJd99Sb1UBtpmqi3JU3OITTWjvUNjaZe0k3EuncTYfBDLsHXbCbORqRkMaMIgoCenhFF1g2bBBiQ6Yn/47cxthZBMmdpNkhsO+YDNNuxdghwR3Eqm2VMDa/HgkiDSgZEoisUWO6LfcMlcPC6Mb/fwWt1rKkIeQnQroFTTBhd8qxdH/Dxmmxpx3WlD8TtrLVB9eJ5VU7oNmmv1QYPTROuyFMgKg=="
  },
  "productMaterialType": "pvc",
  "requestPhysicalCard": false,
  "currency": "USD",
  "termsAcceptances": [
    {
      "termsIdentifier": "termsAndConditions",
      "termsAcceptanceDateTime": "2025-01-16T05:53:52.184Z",
      "termsAcceptanceFlag": true
    },
    {
      "termsIdentifier": "privPlcy",
      "termsAcceptanceDateTime": "2025-01-16T05:53:52.184Z",
      "termsAcceptanceFlag": true
    },
    {
      "termsIdentifier": "daa",
      "termsAcceptanceDateTime": "2025-01-16T05:53:52.184Z",
      "termsAcceptanceFlag": true
    },
    {
      "termsIdentifier": "eca",
      "termsAcceptanceDateTime": "2025-01-16T05:53:52.184Z",
      "termsAcceptanceFlag": true
    }
  ]
}

Sample Encrypted User Data

📘

This object is to be serialized as a string, and then encrypted using the public key provided by Green Dot Corporation.

{
  "DateOfBirth": "1988-02-02",
  "FirstName": "Second JWFA0ur4",
  "MiddleName": "Second",
  "LastName": "Second HSFrUNde",
  "Addresses": [
    {
      "AddressLine1": "16506 Cornell Rd",
      "AddressLine2": "SUITE 652",
      "City": "Cincinnati",
      "State": "OH",
      "ZipCode": "40983",
      "Type": "home",
      "IsDefault": true,
      "IsVerified": true
    }
  ],
  "email": {
    "emailAddress": "Qg7mX@gd.com",
    "isDefault": true,
    "IsVerified": true
  },
  "phoneNumbers": [
    {
      "number": "2153415457",
      "type": "Mobile",
      "isDefault": true,
      "IsVerified": true
    }
  ],
  "ssn": "103553311"
}    

Response

{
  "accountIdentifier": "16c6252f-0677-4fcd-8983-9d5375316a14",
  "status": "normal",
  "accountHolders": [
    {
      "firstName": "First IlVSPY4",
      "lastName": "First KqNGAL4",
      "userIdentifier": "e2c747de-8798-441f-9b8c-970d2ccfd406",
      "kycStateData": {
        "ofacStatus": "passed",
        "kycStatus": "passed",
        "kycPendingGate": "healthy"
      }
    },
    {
      "firstName": "Second Srb77Y6z",
      "lastName": "Second VLaHlcXE",
      "userIdentifier": "ae7a58b0-9ae1-44de-b163-e91aec6023f1",
      "kycStateData": {
        "ofacStatus": "passed",
        "kycStatus": "passed",
        "kycPendingGate": "healthy"
      }
    }
  ],
  "accountStatusReasons": [
    "healthy"
  ],
  "responseDetails": [
    {
      "code": 0,
      "subCode": 0,
      "description": "API operation was successful.",
      "url": "http://tbd"
    }
  ]
}

Unencrypted User Data Parameters

Object or property nameTypeIs RequiredDescription
firstNamepropertyrequiredMust be 1-35 characters only. Refer to the “Valid Characters for Names, Cities, and Addresses” table for allowed characters.
middleNamepropertyoptionalMax 100 characters, if provided.
lastNamepropertyrequiredMust be 2-35 characters only. Refer to the “Valid Characters for Names, Cities, and Addresses” table for allowed characters.
addressesobject arrayrequiredThis object identifies the full residential address for the user.

A home address must be provided, and it must be set as the default address in the isDefault property.
addresses.typepropertyrequiredThis property identifies the type of the address.

Must set value as “home” for tax products.
addressLine1propertyrequiredThis property identifies the street address of the user.

Must contain 2-40 characters only. Cannot be a PO Box or non-U.S. address. All U.S. Protectorates, U.S. Military (by state codes AA, AB, AP), or Canadian addresses are not allowed.

Warning: Must not include addressLine2 information.
addressLine2propertyrequiredThis property identifies the apartment, unit, suite, etc, associated with the user’s address.

Max length 40 characters, if provided.
citypropertyrequiredThis property identifies the city of the address.
statepropertyrequiredThis property identifies the state of the address.

Must be a two-character state code. Acceptable codes are limited to the 50 U.S. states plus the District of Columbia (DC). All U.S. Protectorates and Military state codes (AA, AB, AP) are not allowed. Canadian province codes are not allowed.
zipCodepropertyrequiredThis property identifies the ZIP code of the address.

Must be only 5 digits. No extended zip codes allowed.
isDefaultpropertyrequiredThis property identifies the default object to use used for email, phone, or address items.
ssnpropertyrequiredThis property identifies the full Social Security number (SSN) of the user.
dateOfBirthpropertyrequiredThis property identifies the Date of Birth (DOB) of the user.

Must be between 1901 and current date and provided in the form YYYY-MM-DD.
emailobjectrequiredThis object identifies the email address of the user, along with its verification status.
emailAddresspropertyrequiredThis property identifies the email address of the user.

String value with a max length of 255 characters.

Note: In the Partner Integration Environment (PIE), a lower environment, enrollment requests allow email addresses containing a “+” character in the username portion. In production environments this is not allowed. If the username portion of an email 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 email address and remove any disallowed characters.
phoneNumbersobjectrequiredThis object identifies the phone number of a user.
numberpropertyrequiredThis property identifies the phone number of the user.

- Only one phone number (10 digits) must be provided.
phoneNumbers.typepropertyrequiredThis property identifies the type of number provided by the user.

type property value must be “mobile”. Any phone number that is not a mobile phone number will be declined.
isVerifiedpropertyoptionalThis property identifies the verification status for ownership and possession of the contact channel.

E.g. if a One-Time Passcode is sent as a Multi-Factor Authentication via SMS, and has successfully been submitted back to the partner, then a mobile device is considered verified.

Related APIs Affected by Joint Accounts

This is an existing API and no contract changes, but will return two account holders for a joint account.

This is an existing API and no contract changes, but will return two account holders for a joint account.

This is an existing API and no contract changes, but will return two account holders' payment instruments for a joint account.

This is an existing API and no contract changes for non-Joint Accounts, but has an added request validation on joint accounts. When the transfer type is achPull / achOut for joint accounts, userIdentifier field is required. If this field is missing, this property will get an error response.

This is an existing API, wherein the property userIdentifier is now added in the request body. When calling add BillPay payment for joint accounts, userIdentifier is required only for Joint Accounts and, if missing, this property will get error response.

This is an existing API that for joint accounts has a response that is enhanced to include the userIdentifier who initiated the transaction.

For joint account, there is one more property userIdentifier to the webhooks request payload posted in certain scenarios. See link for more.