> ## Documentation Index
> Fetch the complete documentation index at: https://ramps-edd-individual-expected-jurisdictions.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Cardholder Setup

> Prepare a customer to receive a card

Before you can issue a card, the cardholder must be a Grid `Customer`
in good standing with a funded internal account. This page
covers the requirements and the order they must be satisfied in.

## KYC must be APPROVED

`POST /cards` is rejected with `400 CARDHOLDER_KYC_NOT_APPROVED` if the
cardholder's `kycStatus` is anything other than `APPROVED`. There is no
"issue and verify later" path.

If you're a regulated platform that creates customers directly with
KYC data, the customer reaches `APPROVED` as soon as the verification
returns approved. If you're using the hosted KYC link flow, gate
issuance on the `CUSTOMER.KYC_APPROVED` webhook.

```bash theme={null}
# Check KYC status before issuing
curl -X GET "$GRID_BASE_URL/customers/Customer:019542f5-b3e7-1d02-0000-000000000001" \
  -u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```

## The cardholder needs a funding source

Every card must be bound to one `InternalAccount` at issue time. The
account must:

* Belong to the cardholder (no cross-customer funding in v1).
* Be denominated in a card-eligible currency. In v1 this is USDB; the
  request is rejected with `400 FUNDING_SOURCE_INELIGIBLE` otherwise.

If the cardholder doesn't have an internal account yet, internal
accounts are created automatically when the customer is created based
on your platform configuration. You can list them with:

```bash theme={null}
curl -X GET "$GRID_BASE_URL/customers/internal-accounts?customerId=Customer:019542f5-b3e7-1d02-0000-000000000001&currency=USDB" \
  -u "$GRID_CLIENT_ID:$GRID_CLIENT_SECRET"
```

## Pre-fund before authorizations arrive

Grid does not check the funding source balance when it decides an
authorization. An authorization against an underfunded source is approved to
the card network, and the pull against the funding source fails afterwards.
The transaction resolves as `EXCEPTION` for you to reconcile, and it carries
no `cardDeclinedReason`, because nothing was declined. Fund the source the same
way you would for any other internal account — via the funding
payment instructions or, in Sandbox, with
`/sandbox/internal-accounts/{id}/fund`.

<Note>
  Just-in-time funding works the same as for other Grid flows: receive a
  deposit into the funding source, let it confirm, then expect the
  cardholder to transact. There is no separate JIT path for cards in v1.
</Note>

## Ready to issue

Once the cardholder is `APPROVED` and a funded internal account exists,
issue the card with `POST /cards`. See
[Issuing cards](/cards/card-management/issuing-cards) for the request
shape and lifecycle states.
