Skip to content

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.

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 os
from alter_sdk import App
from 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()
FieldTypePresenceDescription and constraints
$objectRootAdditional keys: not allowed
headersobjectOptionalAdditional keys: not allowed
headers.Idempotency-KeystringOptionalMinimum length: 1
Maximum length: 255
bodyobjectRequired within parentAdditional keys: not allowed
body.billingobjectRequired within parentThe cardholder’s billing address.
body.billing.addressobjectRequired within parent
body.billing.address.citystringRequired within parentMaximum length: 5000
body.billing.address.countrystringRequired within parentMaximum length: 5000
body.billing.address.line1stringRequired within parentMaximum length: 5000
body.billing.address.line2stringOptionalMaximum length: 5000
body.billing.address.postal_codestringRequired within parentMaximum length: 5000
body.billing.address.statestringOptionalMaximum length: 5000
body.companyobjectOptionalAdditional information about a `company` cardholder.
body.company.tax_idstringOptionalMaximum length: 5000
body.emailstringOptionalThe cardholder’s email address.
body.expandarrayOptionalSpecifies which fields in the response should be expanded.
body.expand[]stringEach itemMaximum length: 5000
body.individualModelOptionalExpand Create a cardholder — request body — body individual
body.metadataobjectOptionalSet 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.*stringAdditional keys
body.namestringRequired within parentThe 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_numberstringOptionalThe 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_localesarrayOptionalThe 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[]stringEach itemOne of: de, en, es, fr, it
body.spending_controlsModelOptionalExpand Create a cardholder — request body — body spending controls
body.statusstringOptionalSpecifies whether to permit authorizations on this cardholder’s cards. Defaults to `active`.
One of: active, inactive
body.typestringOptionalOne 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 media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.

FieldTypePresenceDescription and constraints
$ModelRootExpand Create a cardholder — response body

Referenced models: Create a cardholder — response body

12 more schemas are linked from the tables above, on the schema pages.

Create a cardholder — response body
FieldTypePresenceDescription and constraints
$objectRootAn 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)
billingModelRequired within parentExpand Create a cardholder — response body — billing
companyJSONOptional
company (anyOf 1)JSONAlternativeAdditional information about a `company` cardholder.
company (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a cardholder — response body — company value tax id provided
company (anyOf 2)nullAlternative
createdJSONRequired within parent
created (anyOf 1)integerAlternativeTime at which the object was created. Measured in seconds since the Unix epoch.
Format: unix-time
created (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
emailJSONOptional
email (anyOf 1)stringAlternativeThe cardholder's email address.
Maximum length: 5000
email (anyOf 2)nullAlternative
idstringRequired within parentUnique identifier for the object.
Maximum length: 5000
individualJSONOptional
individual (anyOf 1)JSONAlternativeAdditional information about an `individual` cardholder.
individual (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a cardholder — response body — individual value card issuing, dob, first name, last name, verification
individual (anyOf 2)nullAlternative
livemodebooleanRequired within parentIf the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`.
metadataobjectRequired within parentSet 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.*stringAdditional keysMaximum length: 500
namestringRequired within parentThe cardholder's name. This will be printed on cards issued to them.
Maximum length: 5000
objectstringRequired within parentString representing the object's type. Objects of the same type share the same value.
Known values: issuing.cardholder
phone_numberJSONOptional
phone_number (anyOf 1)stringAlternativeThe 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)nullAlternative
preferred_localesJSONOptional
preferred_locales (anyOf 1)arrayAlternativeThe 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)[]stringEach itemKnown values: de, en, es, fr, it
preferred_locales (anyOf 2)nullAlternative
requirementsModelRequired within parentExpand Create a cardholder — response body — requirements
spending_controlsJSONOptional
spending_controls (anyOf 1)JSONAlternativeRules 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)ModelAlternativeExpand 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)nullAlternative
statusstringRequired within parentSpecifies whether to permit authorizations on this cardholder's cards.
Known values: active, blocked, inactive
typestringRequired within parentOne 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
FieldTypePresenceDescription and constraints
$objectRootAdditional information about an `individual` cardholder.
card_issuingobjectOptional
card_issuing.user_terms_acceptanceobjectOptional
card_issuing.user_terms_acceptance.dateintegerOptionalFormat: unix-time
card_issuing.user_terms_acceptance.ipstringOptional
card_issuing.user_terms_acceptance.user_agentJSONOptional
card_issuing.user_terms_acceptance.user_agent (anyOf 1)stringAlternativeMaximum length: 5000
card_issuing.user_terms_acceptance.user_agent (anyOf 2)stringAlternativeOne of:
dobobjectOptional
dob.dayintegerRequired within parent
dob.monthintegerRequired within parent
dob.yearintegerRequired within parent
first_namestringOptional
last_namestringOptional
verificationobjectOptional
verification.documentobjectOptional
verification.document.backstringOptionalMaximum length: 5000
verification.document.frontstringOptionalMaximum length: 5000
Create a cardholder — response body — billing
FieldTypePresenceDescription and constraints
$objectRoot
addressModelRequired within parentExpand Create a Location — response body — address

Referenced models: Create a Location — response body — address

Create a cardholder — response body — company value tax id provided
FieldTypePresenceDescription and constraints
$objectRoot
tax_id_providedbooleanRequired within parentWhether the company's business ID number was provided.
Create a cardholder — response body — requirements
FieldTypePresenceDescription and constraints
$objectRoot
disabled_reasonJSONOptional
disabled_reason (anyOf 1)stringAlternativeIf `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)nullAlternative
past_dueJSONOptional
past_due (anyOf 1)arrayAlternativeArray of fields that need to be collected in order to verify and re-enable the cardholder.
past_due (anyOf 1)[]stringEach itemKnown 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)nullAlternative
Create a Location — response body — address
FieldTypePresenceDescription and constraints
$objectRoot
cityJSONOptional
city (anyOf 1)stringAlternativeCity, district, suburb, town, or village.
Maximum length: 5000
city (anyOf 2)nullAlternative
countryJSONOptional
country (anyOf 1)stringAlternativeTwo-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)).
Maximum length: 5000
country (anyOf 2)nullAlternative
line1JSONOptional
line1 (anyOf 1)stringAlternativeAddress line 1, such as the street, PO Box, or company name.
Maximum length: 5000
line1 (anyOf 2)nullAlternative
line2JSONOptional
line2 (anyOf 1)stringAlternativeAddress line 2, such as the apartment, suite, unit, or building.
Maximum length: 5000
line2 (anyOf 2)nullAlternative
postal_codeJSONOptional
postal_code (anyOf 1)stringAlternativeZIP or postal code.
Maximum length: 5000
postal_code (anyOf 2)nullAlternative
stateJSONOptional
state (anyOf 1)stringAlternativeState, county, province, or region ([ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2)).
Maximum length: 5000
state (anyOf 2)nullAlternative

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"}

Official provider source

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.