Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Integrate Consumer Credit Issuing


Private preview

Integrate Consumer Credit Issuing Private preview

Use Consumer Credit Issuing to launch a credit program for your customers.

Create a bank-sponsored credit program that lets you onboard consumers, issue cards, manage repayments, and handle disputes.

Set up a sandbox

Before using Consumer Credit Issuing in production, test it in a sandbox:

  1. When you create a Stripe account, click Go to sandbox .
  2. Go to the Connect page in the Stripe Dashboard.
  3. Click Get started , then click Continue setup .
  4. Select Platform as your business model, then click Use the Accounts v1 API instead .
  5. Click Start testing , then click Create test account and create your test account.
  6. In the top left corner, click your platform’s name, then click Exit sandbox .
  7. Email your Stripe representative the account ID of your sandbox account and live account. To find the account IDs:
  • Sandbox account ID: Go to Settings > Business . Copy the account ID.
  • Live account ID: Go to Settings > Personal Details , and in the Accounts section, copy the account ID.

Set up your platform

To set up your platform with Stripe:

  1. Retrieve your issuing program ID.
  2. Upload the terms of service (TOS) for your issuing program.
  3. Using your issuing program ID, set the TOS for your issuing program.

Retrieve your issuing program ID

Command Line

cURL

Use the id value from the response as the the related setting in later steps.

Example response:

Upload TOS

Command Line

Use the id value from the response as the the related setting when setting TOS for your issuing program.

Example response:

{
 "id": "file_1SPXMDHc09eLP8enFkiWcPNS",
 "object": "file",
 "created": 1762213217,
 "expires_at": null,
 "filename": "tos.pdf",
 ...
 "purpose": "platform_terms_of_service",
 ...
}

Set the TOS for your issuing program

Command Line

cURL

Onboard consumers

To onboard a consumer to your credit program, create a connected account for them, collect their KYC information, run underwriting, and activate their credit policy.

Create a connected account

Create a Custom connected account for the consumer:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

For business_profile, replace https://www.example.com with your platform’s URL. The MCC 5999 is the standard default for general-purpose consumer credit cards. You can use a more specific code for your platform’s vertical. See Merchant categories for the full list.

Next, create an issuing program on the connected account using the platform issuing program ID you retrieved in the previous section:

Command Line

cURL

Collect KYC information

Collect the consumer’s personal information and submit it to the account.

Stripe attempts to verify the consumer’s identity using their name, date of birth, and SSN. See Handle identity verification for instructions about implementing this flow. Use the below endpoint to submit the required information. If programmatic verification isn’t possible, Stripe returns a requirement to upload a government ID.

Command Line

cURL

Note

individual[self_reported_monthly_housing_payment] is only required if the consumer rents their home.

The connected account now has the KYC requirements for Consumer Credit Issuing. You can view them by retrieving the account.

Report the credit decision

Note

This step applies to BYO underwriting integrations only. For hosted underwriting, go to Initiate underwriting.

Create a credit underwriting record for the consumer’s application:

Command Line

cURL

Then report the decision using the credit underwriting record ID from the response:

Command Line

cURL

Negative decisions require Adverse Action Notices. Use the no-code solution to send them automatically.

Initiate underwriting

Note

This step applies to Hosted Underwriting integrations only. For BYO Underwriting, go to Collect terms of service acceptance.

Submit the consumer’s application to Stripe for underwriting:

Command Line

cURL

Stripe sends an issuing.credit_underwriting_record.updated webhook with the result. Check for application.state: pre_approval and a non-null decision.credit_limit_approved to confirm the consumer is pre-approved before proceeding to collect Terms of Service acceptance.

Collect Terms of Service acceptance

Present the consumer with the approved credit limit, APR, and final terms of service. After they accept, record it on the account.

For hosted underwriting integrations, Stripe performs the hard credit pull after TOS acceptance and sends an issuing.credit_underwriting_record.updated webhook confirming the result.

Command Line

cURL

Activate the credit policy

Retrieve the consumer’s credit policy ID:

Command Line

cURL

Then activate it with the approved credit limit and billing cycle:

Command Line

cURL

Test hosted underwriting

You can test different scenarios in your hosted underwriting flow by using a special first name for the consumer. Replace individual[first_name] with one of the magic strings listed below.

Magic stringScenario
frozen_file_at_credit_bureauCredit report returns a frozen file.
final_approval_frozen_file_at_credit_bureauThe consumer is initially pre-approved and accepts the Terms of Service, but is rejected when the hard credit pull reveals a credit freeze.
alert_final_approval_initial_fraud_phoneA hard pull detects a fraud alert and Stripe has the consumer’s phone number on record.
alert_final_approval_initial_fraud_no_phoneA hard pull detects a fraud alert and Stripe doesn’t have the consumer’s phone number on record.
alert_final_approval_extended_fraud_phoneAn extended fraud alert during final approval. Stripe contacts the consumer by phone.
alert_final_approval_extended_fraud_no_phoneAn extended fraud alert during final approval. Stripe contacts the consumer by email.
alert_pre_approval_initial_fraud_phoneA soft pull finds a fraud alert and Stripe has the consumer’s phone number.
alert_pre_approval_initial_fraud_no_phoneA soft pull finds a fraud alert and Stripe doesn’t have the consumer’s phone number.
alert_pre_approval_extended_fraud_phoneAn extended fraud alert during pre-approval. Stripe contacts the consumer by phone.
alert_pre_approval_extended_fraud_no_phoneAn extended fraud alert during pre-approval. Stripe contacts the consumer by email.

Command Line

When you initiate consumer underwriting in the next step, set underwriting_policy to any value.

Command Line

Suspend a credit policy

Platforms can suspend a cardholder’s credit policy for suspected fraud pending investigation. All changes to credit policy status require a supporting credit underwriting record.

First, create a credit underwriting record for suspension:

Command Line

Select a language

cURL

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Next, change the credit policy’s status to suspended with a supporting status reason of suspected fraud pending investigation.

Use the cardholder’s credit policy ID, and the credit underwriting record ID obtained in the previous step.

Command Line

Lift suspension on a credit policy

Platforms might lift suspension on a cardholder’s credit policy if they’re removing the last platform_controlled suspension status_reason, and no other status reasons, whether platform-controlled or stripe-controlled, are present.

For example, platforms can suspend a credit policy for suspected fraud and later lift that suspension. However, if the account also goes delinquent while suspended, the platform can remove their fraud-related suspension status reason, but can’t transition the credit policy back to active.

First, create a credit underwriting record to lift the platform-controlled suspension:

Command Line

Select a language

cURL

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Next, transition the credit policy back to active.

In this case, the credit underwriting record ID isn’t needed. The call works if the credit underwriting record was created first. Additionally, you don’t have to indicate removal of the status reason through API parameters.

Use the cardholder’s credit policy ID.

Command Line

Close a credit policy

Platforms can permanently close a cardholder’s credit policy for suspected fraud or terms of service violations.

All changes to credit policy status require a supporting credit underwriting record.

First, create a credit underwriting record for closure. Valid credit_line_closed reasons include suspected_fraud or terms_of_use_violation.

Command Line

Select a language

cURL

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Next, change the credit policy’s status to permanently_closed with the proper supporting status reason.

Valid status reason type enums include suspected_fraud and tos_violation.

Use the cardholder’s credit policy ID, and the credit underwriting record ID obtained in the previous step.

Command Line

Set up payment method for accepting repayments

If you use Stripe to collect repayments, collect bank account details and configure a Customer and Payment Method.

First, create a Stripe bank account token from the cardholder’s bank account. Collect the consumer’s authorization to perform an ACH direct debit. Alternatively, use Stripe Financial Connections where Stripe requests authorization.

Next, create a Customer object on your platform account to save the payment method for reuse. Store the connected account ID in the customer’s metadata to link the customer back to the consumer.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Next, update the metadata on the connected account to point to the Customer object.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Then create a SetupIntent to prepare for later payments.

Command Line

Save the PaymentMethod from the response. You’ll use it to create repayments.

Finally, confirm the SetupIntent.

Command Line

Issue a card

To issue a card, follow these guides. You can also add cards to digital wallets.

You can also enable spend controls. Spend controls let you configure spend limits on cards and cardholders, such as the max amount for specific types of businesses per day. If no spend limits are configured when creating a card, Stripe implements a 500 USD daily spend limit by default as a layer of protection.

If a physical card is lost or expires, you can replace it.

Fund the cards

The funds flow uses three balances:

  • Consumer (CA) Issuing Balance/Credit Ledger : The Credit Ledger tracks a consumer’s obligations to the platform. The related Issuing Balance ensures compliant funds flows between platforms and consumers, and is 0 USD in steady state.
  • Platform Issuing Balance/Funding Obligation : The Platform Funding Obligation tracks the platform’s obligations to Stripe (to be post-funded). The related Issuing Balance receives post-funding funds from the platform.
  • Platform Issuing Reserve : This is a special balance that Stripe draws from only if repayment for platform obligations is overdue. Drawing from the reserve affects credit limits and might affect authorizations.

Learn how to manage your Platform Issuing Reserve.

Authorization

Approve or decline the authorization, then process the issuing authorization notification. When Stripe processes an Issuing authorization, it sends an issuing_authorization.created webhook. The authorization is available in the Issuing Authorization API. Stripe sends an issuing_transaction.created webhook when it processes a capture, which includes the final amount actually captured for an authorization.

Manage post-funding

The diagram below shows the main integration points to post-fund consumer card spend.

Settlement

Stripe sends an issuing_funding_obligation.updated webhook for each FundingObligation update (a record of the platform’s obligation to Stripe) each day. When a funding obligation’s status transitions to unpaid, the amount is final and ready for repayment.

To confirm the platform obligation amount, call the FundingObligations API to list obligations. Obligations that are in states of unpaid and past_due need to be paid.

Command Line

cURL

Example response:

To retrieve bank account details for wiring funds to Stripe, call the Funding Instructions API:

Command Line

cURL

Issue rewards

To record a reward on a consumer’s credit ledger, first retrieve the consumer’s current pending funding obligation, then create a credit ledger adjustment:

Command Line

cURL

Command Line

cURL

You can also use credit ledger adjustments to make other corrections to a consumer’s credit ledger. For debits, use reason=platform_issued_debit_memo and set amount_type to "debit".

Display account information

Show available balance

Retrieve the consumer’s credit ledger to show their current available credit, statement balance, and payment status:

Command Line

cURL

Example response:

{
 "credit_limit": 100000,
 "amount_pending": 10000,
 "obligations": {
 "accruing": 5000,
 "unpaid": 15000
 },
 "credit_available": 70000,
 "currency": "usd",
 "statement_balance": 15150,
 "minimum_payment_amount": 5000,
 "due_at": 12345678,
 "remaining_minimum_payment": 100,
 "remaining_statement_balance": 10250,
 "payment_status": "good_standing"
}

List transactions

List credit ledger entries to show a consumer’s transaction history. Optionally filter by a specific credit statement:

Command Line

cURL

To retrieve additional detail about each entry, call the API corresponding to its source.type:

  • For issuing _ transaction , call the Issuing Transaction API . If the transaction has an associated authorization, retrieve the authorization for enriched merchant data.
  • For issuing _ credit _ ledger _ adjustment , call the /the relevant part of the product _ ledger _ adjustments API.

View statements

Stripe sends an issuing_credit_statement.finalized webhook when a billing statement is generated. The webhook includes a statement_pdf URL for the statement PDF.

To list all finalized statements for a consumer:

Command Line

cURL

To retrieve the current (not yet finalized) statement:

Command Line

cURL

To generate an unauthenticated download link for a statement PDF, create a file link using the file ID from the statement object.

Test statements

To test statements in test mode, create backdated transactions using the test helper APIs. Create a new connected account for each scenario you want to test, because backdated transactions can only be created before any statements are finalized for a line of credit.

Command Line

After creating backdated transactions, re-enable statement generation for the credit policy:

Command Line

Stripe sends issuing_credit_statement.created and issuing_credit_statement.finalized webhooks for each backdated statement period.

View finance charges

List finance charges (interest and fees) applied to a consumer’s credit account:

Command Line

cURL

Example response:

{
 "object": "list",
 "data": [
 {
 "id": "iflfc_123",
 "object": "issuing.credit_ledger_finance_charge",
 "amount": 100,
 "applied_to_ledger_at": 1773532800,
 "currency": "usd",
 "description": "Interest charge",
 "type": "interest"
 }
 ]
}

Finance charge types include interest, interest_adjustment, late_fee, platform_initiated_fee, and returned_payment_fee. Negative amount values represent credits or adjustments.

Collect repayments

Create a one-off repayment

Create a repayment using the payment method and customer set up during consumer onboarding:

Command Line

Stripe sends webhooks as the repayment progresses: issuing.credit_repayment.processing when the ACH debit is initiated, issuing.credit_repayment.succeeded when it settles, and issuing.credit_repayment.failed if it fails (for example, insufficient funds or a bank return).

If a repayment fails, retrieve failure details from the Payment Records API using the payment_record ID from the repayment object:

Command Line

cURL

Schedule recurring repayments

Create a repayment schedule to automatically initiate recurring ACH repayments. This example configures a fixed amount repayment on the 15th of each month:

Command Line

Supported amount_details types include fixed_amount, current_balance, remaining_minimum_balance, and remaining_statement_balance. The next_repayment.scheduled_on field on the schedule shows when the next repayment will be initiated.

Scheduled repayments send the same webhooks as one-off repayments. The Credit Repayment object includes a credit_repayment_schedule field linking back to the schedule.

Handle disputes

Use the Create Dispute API to submit a dispute raised by a cardholder to the card network. See Issuing disputes for the full dispute lifecycle and webhook events.

Last verified 2026-09-24

Is this helpful?