Stripe: Create a cardholder
Stripe issuing.postIssuingCardholders: arguments, response, policy and SDK examples.
← Issuing operations · Get started
Operation stripe.postissuingcardholders
Provider route: POST /v1/issuing/cardholders. Alter supplies the connection’s credentials and routing.
Call through Alter
Section titled “Call through Alter”Install @alter-ai/sdk @alter-ai/stripe with npm, or alter-sdk-stripe with pip. Supply your connected customer’s grant ID and the arguments described below.
import { App } from "@alter-ai/sdk";import { StripeIntegration } from "@alter-ai/stripe";
async function execute(input: Parameters<StripeIntegration["issuing"]["postIssuingCardholders"]>[0]) { const app = new App({ apiKey: process.env.ALTER_API_KEY! }); try { const provider = new StripeIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! }); const call = await provider.issuing.postIssuingCardholders(input); const result = await call.wait(); return result.bodyJson(); } finally { await app.close(); }}import osfrom alter_sdk import Appfrom alter_sdk_stripe import StripeIntegration
async def execute(arguments): async with App(api_key=os.environ["ALTER_API_KEY"]) as app: provider = StripeIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]}) call = await provider.issuing.post_issuing_cardholders(arguments) result = await call.wait() return result.body_json()| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional keys: not allowed |
headers | object | Optional | Additional keys: not allowed |
headers.Idempotency-Key | string | Optional | Minimum length: 1 Maximum length: 255 |
body | object | Required within parent | Additional keys: not allowed |
body.billing | object | Required within parent | The cardholder’s billing address. |
body.billing.address | object | Required within parent | |
body.billing.address.city | string | Required within parent | Maximum length: 5000 |
body.billing.address.country | string | Required within parent | Maximum length: 5000 |
body.billing.address.line1 | string | Required within parent | Maximum length: 5000 |
body.billing.address.line2 | string | Optional | Maximum length: 5000 |
body.billing.address.postal_code | string | Required within parent | Maximum length: 5000 |
body.billing.address.state | string | Optional | Maximum length: 5000 |
body.company | object | Optional | Additional information about a `company` cardholder. |
body.company.tax_id | string | Optional | Maximum length: 5000 |
body.email | string | Optional | The cardholder’s email address. |
body.expand | array | Optional | Specifies which fields in the response should be expanded. |
body.expand[] | string | Each item | Maximum length: 5000 |
body.individual | Model | Optional | Expand Create a cardholder — request body — body individual |
body.metadata | object | Optional | Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. Additional keys: see wildcard field |
body.metadata.* | string | Additional keys | |
body.name | string | Required within parent | The cardholder’s name. This will be printed on cards issued to them. The maximum length of this field is 24 characters. This field cannot contain any special characters or numbers. |
body.phone_number | string | Optional | The cardholder’s phone number. This will be transformed to [E.164](https://en.wikipedia.org/wiki/E.164) if it is not provided in that format already. This is required for all cardholders who will be creating EU cards. See the [3D Secure documentation](https://docs.stripe.com/issuing/3d-secure#when-is-3d-secure-applied) for more details. |
body.preferred_locales | array | Optional | The cardholder’s preferred locales (languages), ordered by preference. Locales can be `de`, `en`, `es`, `fr`, or `it`. This changes the language of the [3D Secure flow](https://docs.stripe.com/issuing/3d-secure) and one-time password messages sent to the cardholder. |
body.preferred_locales[] | string | Each item | One of: de, en, es, fr, it |
body.spending_controls | Model | Optional | Expand Create a cardholder — request body — body spending controls |
body.status | string | Optional | Specifies whether to permit authorizations on this cardholder’s cards. Defaults to `active`. One of: active, inactive |
body.type | string | Optional | One of `individual` or `company`. See [Choose a cardholder type](https://docs.stripe.com/issuing/other/choose-cardholder) for more details. One of: company, individual |
Referenced models: Create a cardholder — request body — body individual, Create a cardholder — request body — body spending controls
Response
Section titled “Response”Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | Model | Root | Expand Create a cardholder — response body |
Referenced models: Create a cardholder — response body
Schemas
Section titled “Schemas”12 more schemas are linked from the tables above, on the schema pages.
Create a cardholder — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | An Issuing `Cardholder` object represents an individual or business entity who is [issued](https://docs.stripe.com/issuing) cards. Related guide: [How to create a cardholder](https://docs.stripe.com/issuing/cards/virtual/issue-cards#create-cardholder) |
billing | Model | Required within parent | Expand Create a cardholder — response body — billing |
company | JSON | Optional | |
company (anyOf 1) | JSON | Alternative | Additional information about a `company` cardholder. |
company (anyOf 1) (anyOf 1) | Model | Alternative | Expand Create a cardholder — response body — company value tax id provided |
company (anyOf 2) | null | Alternative | |
created | JSON | Required within parent | |
created (anyOf 1) | integer | Alternative | Time at which the object was created. Measured in seconds since the Unix epoch. Format: unix-time |
created (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
email | JSON | Optional | |
email (anyOf 1) | string | Alternative | The cardholder's email address. Maximum length: 5000 |
email (anyOf 2) | null | Alternative | |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
individual | JSON | Optional | |
individual (anyOf 1) | JSON | Alternative | Additional information about an `individual` cardholder. |
individual (anyOf 1) (anyOf 1) | Model | Alternative | Expand Create a cardholder — response body — individual value card issuing, dob, first name, last name, verification |
individual (anyOf 2) | null | Alternative | |
livemode | boolean | Required within parent | If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`. |
metadata | object | Required within parent | Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Additional keys: see wildcard field |
metadata.* | string | Additional keys | Maximum length: 500 |
name | string | Required within parent | The cardholder's name. This will be printed on cards issued to them. Maximum length: 5000 |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: issuing.cardholder |
phone_number | JSON | Optional | |
phone_number (anyOf 1) | string | Alternative | The cardholder's phone number. This is required for all cardholders who will be creating EU cards. See the [3D Secure documentation](https://docs.stripe.com/issuing/3d-secure#when-is-3d-secure-applied) for more details. Maximum length: 5000 |
phone_number (anyOf 2) | null | Alternative | |
preferred_locales | JSON | Optional | |
preferred_locales (anyOf 1) | array | Alternative | The cardholder’s preferred locales (languages), ordered by preference. Locales can be `de`, `en`, `es`, `fr`, or `it`. This changes the language of the [3D Secure flow](https://docs.stripe.com/issuing/3d-secure) and one-time password messages sent to the cardholder. |
preferred_locales (anyOf 1)[] | string | Each item | Known values: de, en, es, fr, it |
preferred_locales (anyOf 2) | null | Alternative | |
requirements | Model | Required within parent | Expand Create a cardholder — response body — requirements |
spending_controls | JSON | Optional | |
spending_controls (anyOf 1) | JSON | Alternative | Rules that control spending across this cardholder's cards. Refer to our [documentation](https://docs.stripe.com/issuing/controls/spending-controls) for more details. |
spending_controls (anyOf 1) (anyOf 1) | Model | Alternative | Expand Create a cardholder — response body — spending controls value allowed card presences, allowed categories, allowed merchant countries, blocked card presences, blocked categories, blocked merchant countries, spending limits, spending limits currency |
spending_controls (anyOf 2) | null | Alternative | |
status | string | Required within parent | Specifies whether to permit authorizations on this cardholder's cards. Known values: active, blocked, inactive |
type | string | Required within parent | One of `individual` or `company`. See [Choose a cardholder type](https://docs.stripe.com/issuing/other/choose-cardholder) for more details. Known values: company, individual |
Referenced models: Create a cardholder — response body — billing, Create a cardholder — response body — spending controls value allowed card presences, allowed categories, allowed merchant countries, blocked card presences, blocked categories, blocked merchant countries, spending limits, spending limits currency, Create a cardholder — response body — company value tax id provided, Create a cardholder — response body — individual value card issuing, dob, first name, last name, verification, Create a cardholder — response body — requirements
Create a cardholder — request body — body individual
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional information about an `individual` cardholder. |
card_issuing | object | Optional | |
card_issuing.user_terms_acceptance | object | Optional | |
card_issuing.user_terms_acceptance.date | integer | Optional | Format: unix-time |
card_issuing.user_terms_acceptance.ip | string | Optional | |
card_issuing.user_terms_acceptance.user_agent | JSON | Optional | |
card_issuing.user_terms_acceptance.user_agent (anyOf 1) | string | Alternative | Maximum length: 5000 |
card_issuing.user_terms_acceptance.user_agent (anyOf 2) | string | Alternative | One of: |
dob | object | Optional | |
dob.day | integer | Required within parent | |
dob.month | integer | Required within parent | |
dob.year | integer | Required within parent | |
first_name | string | Optional | |
last_name | string | Optional | |
verification | object | Optional | |
verification.document | object | Optional | |
verification.document.back | string | Optional | Maximum length: 5000 |
verification.document.front | string | Optional | Maximum length: 5000 |
Create a cardholder — response body — billing
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
address | Model | Required within parent | Expand Create a Location — response body — address |
Referenced models: Create a Location — response body — address
Create a cardholder — response body — company value tax id provided
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
tax_id_provided | boolean | Required within parent | Whether the company's business ID number was provided. |
Create a cardholder — response body — requirements
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
disabled_reason | JSON | Optional | |
disabled_reason (anyOf 1) | string | Alternative | If `disabled_reason` is present, all cards will decline authorizations with `cardholder_verification_required` reason. Known values: listed, rejected.listed, requirements.past_due, under_review |
disabled_reason (anyOf 2) | null | Alternative | |
past_due | JSON | Optional | |
past_due (anyOf 1) | array | Alternative | Array of fields that need to be collected in order to verify and re-enable the cardholder. |
past_due (anyOf 1)[] | string | Each item | Known values: company.tax_id, individual.card_issuing.user_terms_acceptance.date, individual.card_issuing.user_terms_acceptance.ip, individual.dob.day, individual.dob.month, individual.dob.year, individual.first_name, individual.last_name, individual.verification.document |
past_due (anyOf 2) | null | Alternative |
Create a Location — response body — address
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | |
city | JSON | Optional | |
city (anyOf 1) | string | Alternative | City, district, suburb, town, or village. Maximum length: 5000 |
city (anyOf 2) | null | Alternative | |
country | JSON | Optional | |
country (anyOf 1) | string | Alternative | Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). Maximum length: 5000 |
country (anyOf 2) | null | Alternative | |
line1 | JSON | Optional | |
line1 (anyOf 1) | string | Alternative | Address line 1, such as the street, PO Box, or company name. Maximum length: 5000 |
line1 (anyOf 2) | null | Alternative | |
line2 | JSON | Optional | |
line2 (anyOf 1) | string | Alternative | Address line 2, such as the apartment, suite, unit, or building. Maximum length: 5000 |
line2 (anyOf 2) | null | Alternative | |
postal_code | JSON | Optional | |
postal_code (anyOf 1) | string | Alternative | ZIP or postal code. Maximum length: 5000 |
postal_code (anyOf 2) | null | Alternative | |
state | JSON | Optional | |
state (anyOf 1) | string | Alternative | State, county, province, or region ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)). Maximum length: 5000 |
state (anyOf 2) | null | Alternative |
Policy, approvals and errors
Section titled “Policy, approvals and errors”SDK function policy ID: stripe.postissuingcardholders. Catalog operation: PostIssuingCardholders. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.
Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.
Pinned headers: {"Stripe-Version": "2026-09-30.endive"}