---
title: "Create a new customer profile in the Green Dot system."
method: POST
path: "/programs/{programCode}/externalAccounts/customers"
tags: ["ExternalAccount"]
---

# Create a new customer profile in the Green Dot system.

`POST /programs/{programCode}/externalAccounts/customers`

This API creates a customer profile. Afterwards, the customer must go through Green Dot's verification process before initiating any further API calls.

**Business Logic**

**CustomerToken** -- Depending on the partner configuration, this field can be mandatory or optional. 
- When this field is mandatory, the partner must provide a unique value.
- 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 the Instant Transfer service generates.

## Path parameters

- `programCode` string, required

## Headers

- `X-GD-RequestId` string, required
- `X-GD-CustomerType` string

## Request body

- CreateCustomerProfileGlobalFundTransferRequest — Create Customer Profile Global Fund Transfer Request – Represents the data required to create a new customer profile for global fund transfer operations. Used to submit encrypted customer information for profile creation, supporting idempotency, partner-specific tokens, and secure data handling. Inherits standard request metadata from Gd.Bos.DataTransfer.Request.RequestBase.
  - `salt` string, nullable — Unique id in GUID format, must match the RequestID in the headers. Used for idempotency and encryption.
  - `customerToken` string, nullable — Unique Id for an existing customer profile. Use an empty string to create a new customer profile. Used for idempotency and partner-specific logic.
  - `encryptedData` 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 `201`

Customer profile created successfully.

- CreateCustomerProfileGlobalFundTransferResponse — Represents the response returned after creating a customer profile for global fund transfer operations. Contains the unique customer token for future actions (such as linking cards or banks) and the status of the profile creation. Inherits standard response metadata from Gd.Bos.DataTransfer.Response.ResponseBase.
  - `customerToken` string, nullable — Unique token generated to identify the customer profile. Used for subsequent operations such as linking cards or banks.
  - `status` string, nullable — The status of the customer profile after creation (e.g., Pending, Active, Suspended).
  - `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

- `400` — Invalid or missing parameters.
- `401` — Unauthorized access.
- `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)
