---
title: "Add Account Holder"
method: POST
path: "/programs/{programCode}/accounts/{accountIdentifier}/AccountHolder"
tags: ["Account"]
---

# Add Account Holder

`POST /programs/{programCode}/accounts/{accountIdentifier}/AccountHolder`

This endpoint allows an account holder to be added to an existing account.Account must have the ability to be a joint account and not be a corp account.Account holder must first pass a validation check if validation check is successful, the account holder will be created and the request will returned the account holders linked to the account.

## Path parameters

- `programCode` string, required
- `accountIdentifier` string, required

## Headers

- `X-GD-RequestId` string, required

## Request body

- EncryptedAddAccountHolderRequest — Represents a request to add an account holder to an existing account using encrypted user profile data. Inherits standard request metadata from Gd.Bos.DataTransfer.Request.RequestBase.
  - `productMaterialType` string, nullable — The product material type for the account holder (e.g., "plastic", "virtual").
  - `requestPhysicalCard` boolean — Indicates whether a physical card should be requested for the new account holder. Defaults to true.
  - `currency` string, nullable — The currency code (e.g., "USD") for the account holder's account.
  - `termsAcceptances` TermsAcceptance[], nullable — The list of terms and conditions acceptances for the account holder. Each item represents a specific terms acceptance record.
    - `termsIdentifier` string, nullable — The unique identifier for the terms and conditions that were presented to the user.
    - `termsAcceptanceDateTime` string, nullable — The date and time when the user accepted the terms, typically in ISO 8601 format (e.g., "2023-07-01T12:34:56Z").
    - `termsAcceptanceFlag` boolean, nullable — Indicates whether the user accepted the terms (true) or declined (false).
  - `userProfile` EncryptedData — Represents a container for encrypted data used in secure data transfer operations. Contains the encrypted payload and associated cryptographic metadata, including encryption version, ephemeral public key, and public key hash. Used to securely transmit sensitive information such as user data, ensuring confidentiality and integrity during transport.
    - `version` string, nullable — The version of the encryption algorithm used to encrypt the data (e.g., "v1", "v2").
    - `ephemeralPublicKey` string, nullable — The ephemeral public key used in the encryption process, typically for key exchange or session establishment.
    - `publicKeyHash` string, nullable — The hash of the public key used to verify the integrity and authenticity of the encryption key.
    - `data` string, nullable — The encrypted data payload, typically base64-encoded, containing the sensitive information.

## Response `200`

OK

- AddAccountHolderResponse — Represents the response for an account holder addition operation.
  - `accountIdentifier` string, nullable — The unique identifier of the account to which the holder(s) were added.
  - `status` string, nullable — The status of the add account holder operation (e.g., "Success", "Failed").
  - `accountHolders` LinkedAccountHolder[], nullable — The list of linked account holders associated with the account.
    - `firstName` string, nullable — The first name of the account holder.
    - `lastName` string, nullable — The last name of the account holder.
    - `userIdentifier` string, nullable — The unique user identifier for the account holder.
    - `kycStateData` KycStateData — Represents the Know Your Customer (KYC) state data for a user. Contains information about OFAC (Office of Foreign Assets Control) screening status, overall KYC status, and any pending KYC gates. Used to track regulatory compliance and the current state of user verification during onboarding or account management.
      - `ofacStatus` string, nullable — The OFAC (Office of Foreign Assets Control) screening status for the user. Typical values: "Passed", "Failed", "Pending", or other business-specific status indicators.
      - `kycStatus` string, nullable — The overall KYC (Know Your Customer) status for the user. Typical values: "Verified", "Pending", "Failed", or other business-specific status indicators.
      - `kycPendingGate` string, nullable — The name or code of any pending KYC gate or step that must be completed for full verification. Example: "DocumentVerification", "AddressCheck", or null if no gates are pending.
  - `accountStatusReasons` string[], nullable — The list of reasons describing the current status of the account, if applicable.
  - `responseDetails` ResponseDetail[], nullable — Required: A list of response details providing status codes, descriptions, and additional information about the result of the operation.
    - `code` integer — The primary status or error code for the response (e.g., 200 for success, 400 for validation error).
    - `subCode` integer, nullable — An optional subcode providing more granular detail about the response or error.
    - `description` string, nullable — A human-readable description of the response, error, or status.
    - `url` string, nullable — A URL linking to documentation or a web page with more information about the response code.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `500` — Internal Server Error
- `503` — Service Unavailable

---

[API](https://skmtc.net/greendot/apis/baas-apis.md) · [All operations](https://skmtc.net/greendot/apis/baas-apis/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/greendot/baas-apis/versions/666553766b78/schema)
