# Manage credit terms Learn how to manage the credit terms for connected accounts. Change a connected account’s credit terms by updating the CreditPolicy [credit_limit_amount](https://docs.stripe.com/api/issuing/credit_policy/object.md#issuing_credit_policy_object-credit_limit_amount) or [credit_period_interval](https://docs.stripe.com/api/issuing/credit_policy/object.md#issuing_credit_policy_object-credit_period_interval). You can also deactivate a connected account’s ability to spend funds supported by your platform’s Issuing account by setting status to `inactive`. ## Update the credit limit You can change a connected account’s credit limit by updating the CreditPolicy `credit_limit_amount`, but first you must report the underwriting decision through CreditUnderwritingRecord. If you try to update `credit_limit_amount` without first reporting the same amount through CreditUnderwritingRecord, you’ll get an error. There are three scenarios to report underwriting decisions to change a credit limit through the CreditUnderwritingRecord API: #### Approve credit limit increase ## Approve an account’s request for a credit limit increase If a connected account requests a higher credit limit, then first report their request as an application, and then report the decision to approve or reject. Record the account’s request through the CreditUnderwritingRecord API’s [create_from_application](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_application.md) endpoint. Set the application’s [purpose](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_application.md#create_from_application-application-purpose) to `credit_limit_increase`, and use `submitted_at` to report the date and time the customer submitted their request. Even though this is an existing user, you must provide their `name` and `email` in the `credit_user` hash. ```curl curl https://api.stripe.com/v1/issuing/credit_underwriting_records/create_from_application \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "credit_user[name]"="Barbell Gym" \ --data-urlencode "credit_user[email]"="barbell-gym@gmail.com" \ -d "application[purpose]"=credit_limit_increase \ -d "application[submitted_at]"=1681138952 ``` ### Example response ```json { "object": "issuing.credit_underwriting_record", "id": "cur_1NiHAD2eZvKYlo2CmWGpt5OX", "credit_user": { "name": "Barbell Gym", "email": "barbell-gym@gmail.com" }, "created_from": "application", "application": { "purpose": "credit_limit_increase", "submitted_at": 1681138952, "application_method": "online" }, "decision_deadline": 1683601352 // 30 days after submission } ``` The second step is to approve or reject the application using the [report_decision](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/report_decision.md) endpoint. Be sure to report the decision before the [decision_deadline](https://docs.stripe.com/api/issuing/credit_underwriting_record/object.md#credit_underwriting_record_object-decision_deadline), which is 30 days after the customer submits their application. To approve the application set the [decision type](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/report_decision.md#report_decision-decision-type) to `credit_limit_approved`, and provide the approved amount. ```curl curl https://api.stripe.com/v1/issuing/credit_underwriting_records/{{CREDITUNDERWRITINGRECORD_ID}}/report_decision \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d decided_at="{{DECISIONTIMESTAMP_ID}}" \ -d "decision[type]"=credit_limit_approved \ -d "decision[credit_limit_approved][amount]"=200000 \ -d "decision[credit_limit_approved][currency]"=usd ``` To reject an application instead, follow the same steps above, but set the decision type to `application_rejected` and provide the reasons for rejection in [application_rejected.reasons](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/report_decision.md#report_decision-decision-application_rejected-reasons). For more details on this scenario, see [Reject an application for an increased credit limit and report rejection reasons](https://docs.stripe.com/issuing/credit/report-credit-decisions-and-manage-aans.md#reject-application). #### Proactively increase credit limit ## Increase a credit limit proactively, without a customer request To increase a connected account’s credit limit without receiving an application from the customer, report the decision in one step through the CreditUnderwritingRecord [create_from_proactive_review](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_proactive_review.md) endpoint (see [Reporting proactive underwriting decisions](https://docs.stripe.com/issuing/credit/report-credit-decisions-and-manage-aans.md#make-proactive-decisions) to learn more). Set the [decision type](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_proactive_review.md#create_from_proactive_review-decision-type) to `credit_limit_approved`, and provide the new amount in [credit_limit_approved.amount](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/report_decision.md#report_decision-decision-credit_limit_approved-amount). ```curl curl https://api.stripe.com/v1/issuing/credit_underwriting_records/create_from_proactive_review \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "credit_user[name]"="Barbell Gym" \ --data-urlencode "credit_user[email]"="barbell-gym@gmail.com" \ -d decided_at="{{DECISIONTIMESTAMP_ID}}" \ -d "decision[type]"=credit_limit_approved \ -d "decision[credit_limit_approved][amount]"=2000000 \ -d "decision[credit_limit_approved][currency]"=usd ``` ### Example response ```json { "object": "issuing.credit_underwriting_record", "id": "cur_1NiHAD2eZvKYlo2CmWGpt5OX", "credit_user": { "name": "Barbell Gym", "email": "barbell-gym@gmail.com" }, "created_from": "proactive_review", "decided_at": 1681138965, "decision": { "type": "credit_limit_approved", "credit_limit_approved": { "amount": 2000000, "currency": "usd" } }, "decision_deadline": null // no deadline for proactive review } ``` #### Proactively decrease credit limit ## Decrease a credit limit and report the reasons why To decrease a connected account’s credit limit, report your platform’s decision in one step through the CreditUnderwritingRecord [create_from_proactive_review](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_proactive_review.md) endpoint (see [Reporting proactive underwriting decisions](https://docs.stripe.com/issuing/credit/report-credit-decisions-and-manage-aans.md#make-proactive-decisions) to learn more). Set the [decision type](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_proactive_review.md#create_from_proactive_review-decision-type) to `credit_limit_decreased`, and provide the new amount in [credit_limit_approved.amount](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/report_decision.md#report_decision-decision-credit_limit_approved-amount). Because reducing a credit limit is an adverse action, you must also provide at least one `reason` for the decrease (and up to four), from the list of reasons in [credit_limit_decreased.reasons](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_proactive_review.md#create_from_proactive_review-decision-credit_limit_decreased-reasons). These must be the “principal” reasons for rejecting the application and they must be consistent with the rejection reasons defined in your bank-approved credit policy. Adverse action notices must include all of the reasons you provided (see [Sending adverse action notice emails](https://docs.stripe.com/issuing/credit/report-credit-decisions-and-manage-aans.md#sending-adverse-action-notice-emails)). ```curl curl https://api.stripe.com/v1/issuing/credit_underwriting_records/create_from_proactive_review \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "credit_user[name]"="Barbell Gym" \ --data-urlencode "credit_user[email]"="barbell-gym@gmail.com" \ -d decided_at="{{DECISIONTIMESTAMP_ID}}" \ -d "decision[type]"=credit_limit_decreased \ -d "decision[credit_limit_decreased][reasons][]"=debt_to_cash_balance_ratio_too_high \ -d "decision[credit_limit_decreased][reasons][]"=runway_too_short \ -d "decision[credit_limit_decreased][amount]"=500000 \ -d "decision[credit_limit_decreased][currency]"=usd ``` ### Example response ```json { "object": "issuing.credit_underwriting_record", "id": "cur_1NiHAD2eZvKYlo2CmWGpt5OX", "credit_user": { "name": "Barbell Gym", "email": "barbell-gym@gmail.com" }, "created_from": "proactive_review", "decided_at": 1681138965, "decision": { "type": "credit_limit_decreased", "credit_limit_decreased": { "reasons": ["debt_to_cash_balance_ratio_too_high", "runway_too_short"], "amount": 500000, "currency": "usd" } }, "decision_deadline": null // no deadline for proactive review } ``` > Use caution when decreasing the `credit_limit_amount` on an account because it can lead to immediate authorization declines if the account has already spent more than the new `credit_limit_amount`. In each scenario, after reporting the decision, update `credit_limit_amount` with the CreditPolicy API to the same amount you approved. ```curl curl https://api.stripe.com/v1/issuing/credit_policy \ -u "<>:" \ -H "Stripe-Version: 2026-02-25.preview; issuing_credit_beta=v1; issuing_underwritten_credit_beta=v1" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d credit_limit_amount=200000 ``` This action triggers an `issuing_credit_policy.updated` webhook event and immediately updates the `credit_limit_amount` field on the `CreditPolicy`. ### Example response ```json { "livemode": true,"credit_limit_amount": 200000, // 2,000.00 USD "credit_limit_currency": "usd", "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, "last_effective_attributes": { "effective_until": 1681138965, "credit_limit_amount": 100000, "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, "status": "active", }, "upcoming_attributes": null } ``` ## Update the credit period The credit period that you set must always match the credit period that is defined in your bank-approved credit policy document. Before you can change a credit period through the API, you must first get approval through Stripe to adjust the credit period in your written credit policy document. You may also be required to send a change in terms notice to the population of impacted account holders. Please reach out to [platform-compliance@stripe.com](mailto:platform-compliance@stripe.com) to collect the requisite approvals before taking any actions. Once you’ve received approval from Stripe, follow the steps below to change a credit period in the CreditPolicy API. You don’t need to use CreditUnderwritingRecord when changing a credit period. You can change a connected account’s credit period by updating the fields in the [upcoming_attributes](https://docs.stripe.com/api/issuing/credit_policy/update.md#update_issuing_credit_policy-upcoming_attributes) hash. You must pass in an `effective_at` timestamp when setting the `upcoming_attributes` to schedule when you want the changes to take effect. Using our previous example, let’s say that Gymbox, a platform, decides to change their customer’s credit period interval from monthly to 15 days, and the platform wants this change to take effect at the start of the next month. The `effective_at` timestamp must be 10 digits and end in 00, because Stripe requires all changes through `upcoming_attributes` to take effect at 00:00 UTC. The platform updates the connected account’s `CreditPolicy` as follows, using the `upcoming_attributes` hash: ```curl curl https://api.stripe.com/v1/issuing/credit_policy \ -u "<>:" \ -H "Stripe-Version: 2026-02-25.preview; issuing_credit_beta=v1; issuing_underwritten_credit_beta=v1" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "upcoming_attributes[credit_period_interval]"=day \ -d "upcoming_attributes[credit_period_interval_count]"=15 \ -d "upcoming_attributes[effective_at]"="{{EFFECTIVEATTIMESTAMP_ID}}" \ -d "upcoming_attributes[days_until_due]"=0 ``` ### Example response ```json { "livemode": true, "credit_limit_amount": 200000, "credit_limit_currency": "usd", "status": "active", "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, "last_effective_attributes": { "effective_until": 1681138965, // time of previous update to credit period "credit_limit_amount": 200000, "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, "status": "active", }, "upcoming_attributes": {"effective_at": 1693526400, // 1st day of the next month, 00:00 UTC "credit_period_interval": "day", "credit_period_interval_count": 15, "days_until_due": 0, } } ``` At the `effective_at` timestamp, the `CreditPolicy` will automatically update to what was in the `upcoming_attributes` hash, and the `last_effective_attributes` hash will update to reflect the values prior to the change. ### Example response ```json { "livemode": true, "credit_limit_amount": 200000, "credit_limit_currency": "usd", "status": "active","credit_period_interval": "day", "credit_period_interval_count": 15, "days_until_due": 0, "last_effective_attributes": { "effective_until": 1693526400, // 1st day of the next month, 00:00 UTC "credit_limit_amount": 200000, "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, "status": "active" }, "upcoming_attributes": null } ``` This triggers an `issuing_credit_policy.updated` event. At the `effective_at` timestamp when the credit period changes take effect, the [FundingObligation](https://docs.stripe.com/api/issuing/funding_obligations.md) for the current period is finalized and a new `FundingObligation` is created to mark the start of a new credit period on the new credit terms. ## Close the credit line and report the reasons You can close the connected account’s credit line by following these two steps. First, use the CreditUnderwritingRecord API to submit details of the decision through the [create_from_proactive_review](https://docs.stripe.com/api/issuing/credit_underwriting_record_api/create_from_proactive_review.md) endpoint. Set the decision type to `credit_line_closed` and provide at least one reason, and you can provide up to four. These must be the “principal” reasons for rejecting the application and they must be consistent with the rejection reasons defined in your bank-approved credit policy. [Closing a credit line is an adverse action](https://docs.stripe.com/issuing/credit/report-credit-decisions-and-manage-aans.md#credit-line-closed), so sending a notice is required with the applicable reasons for closure. See the [complete list of valid decision reasons](https://docs.stripe.com/api/issuing/credit_underwriting_record/object.md#credit_underwriting_record_object-decision-credit_line_closed-reasons) for `credit_line_closed` decisions. ```curl curl https://api.stripe.com/v1/issuing/credit_underwriting_records/create_from_proactive_review \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "credit_user[name]"="Barbell Gym" \ --data-urlencode "credit_user[email]"="barbell-gym@gmail.com" \ -d decided_at="{{DECISIONTIMESTAMP_ID}}" \ -d "decision[type]"=credit_line_closed \ -d "decision[credit_line_closed][reasons][]"=incomplete_application ``` ### Example response ```json { "object": "issuing.credit_underwriting_record", "id": "cur_1NiHAD2eZvKYlo2CmWGpt5OX", "credit_user": { "name": "Barbell Gym", "email": "barbell-gym@gmail.com" }, "created_from": "proactive_review", "decided_at": identifier("decisionTimestamp"), "decision": { "type": "credit_line_closed", "credit_line_closed": { "reasons": ["incomplete_application"] } }, "decision_deadline": null // no deadline for proactive review } ``` Next, set the account’s CreditPolicy [status](https://docs.stripe.com/api/issuing/credit_policy/update.md#update_issuing_credit_policy-status) to `inactive`. ```curl curl https://api.stripe.com/v1/issuing/credit_policy \ -u "<>:" \ -H "Stripe-Version: 2026-02-25.preview; issuing_credit_beta=v1; issuing_underwritten_credit_beta=v1" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d status=inactive ``` ### Example response ```json { "livemode": true, "credit_limit_amount": 200000, "credit_limit_currency": "usd","status": "inactive", "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, "last_effective_attributes": { "effective_until": "time_of_deactivation", "credit_limit_amount": 200000, "status": "active", "credit_period_interval": "month", "credit_period_interval_count": 1, "days_until_due": 1, }, "upcoming_attributes": null } ``` This status change triggers an `issuing_credit_policy.updated` event. When you deactivate a `CreditPolicy`, you’ll continue to receive `FundingObligation` updates for the next 31 days to account for any cleared [Transactions](https://docs.stripe.com/api/issuing/transactions/object.md), because authorizations that happened before deactivation can be captured up to 31 days later. If the connected account’s [issuing balance](https://docs.stripe.com/issuing/connect/funding.md) is below 0 (indicating the account owes money to Stripe) when you attempt to set CreditPolicy to `inactive` you’ll receive an error, and you should topup the balance to return it to zero to deactivate the CreditPolicy. After the CreditPolicy status is `inactive`, authorization attempts on the account’s cards are funded by the account’s [issuing balance](https://docs.stripe.com/issuing/connect/funding.md), and will be declined if the balance is insufficient. Once you’ve closed the credit line by setting status to `inactive`, you can’t reopen the line by changing status back to `active` unless you receive a new application from the customer. In that case, follow the steps to [report a new, approved credit application](https://docs.stripe.com/issuing/credit/connect-credit-setup.md#record-application-details). ## Revoke the card_issuing_charge_card capability If you have stopped using your platform Issuing account to support a connected account because they no longer meet the underwriting criteria of your bank-approved credit policy or are in violation of the Terms of Service, leave their `CreditPolicy` inactive. You must also revoke the `card_issuing_charge_card` capability by un-requesting it. ```curl curl https://api.stripe.com/v1/accounts/{{CONNECTED_STRIPE_ACCOUNT_ID}} \ -u "<>:" \ -d "capabilities[card_issuing_charge_card][requested]"=false ``` You can request the `card_issuing_charge_card` capability again in the future for the same connected account if the user submits a new application by following the steps to [set up a connected account with credit](https://docs.stripe.com/issuing/credit/connect-credit-setup.md#activate-funding-credit). If the connected account maintains an active `card_issuing` capability, you can still issue cards for the connected account. However, you must add funds into the connected account’s [Issuing balance](https://docs.stripe.com/issuing/connect/funding.md) for their cards to work. ## Summary of webhooks As a reminder, you can monitor these two webhooks: - `issuing_credit_policy.created`: Triggers whenever a `CreditPolicy` is created, which happens when the capability is requested for the connected account. - `issuing_credit_policy.updated`: Triggers whenever a `CreditPolicy` is updated, which can happen when the platform updates the connected account’s policy.