> This page is for NT Connect.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://partner.ninjatrader.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://partner.ninjatrader.com/_mcp/server.

# Debit-card funding

NinjaTrader Connect supports deposits from an approved saved debit card. The flow uses Stripe in the user's client and NinjaTrader's live REST API. For deposits funded with Apple Pay or Google Pay, see [Wallet Pay Funding](/connect/overview/funding/wallet-pay-funding).

> **Warning**
>
> These endpoints are Live-only. Do not send them to the Demo base URL.

## Prerequisites

Your integration needs:

* a bearer access token for the user
* the user's eligible live `accountId`, user ID, and the USD `currencyId`
* Stripe.js or an applicable Stripe client integration

## Complete the funding disclosures

Before the saved-card flow, the user must review and sign both funding disclosures:

1. **Form of Risk Disclosure and Customer Authorization**
2. **Payment Processor Disclosure and Authorization**

Both disclosures must be signed, but the signing order is not enforced. `addStripeDebitCard` and `startStripeFunding` reject requests when either disclosure is missing. Use the published `signUserDocument` operation by following [Funding disclosures](/connect/overview/funding/funding-disclosures). If you prefer a hosted signing and funding flow, see [Embedding the Funding Page with an iframe](/connect/overview/partner-integration/embedding-funding-page-with-i-frame).

## Get the Stripe publishable key

Call [`getStripeConfiguration`](/connect/api/rest-api-endpoints/users/get-stripe-configuration) to obtain the Stripe publishable key. Never send Stripe secret keys to the browser.

## Check eligibility and limits

Call [`checkStripeFundingEligibility`](/connect/api/rest-api-endpoints/funds/check-stripe-funding-eligibility) before the saved-card flow:

```json
{
  "accountId": 123456,
  "currencyId": 1
}
```

Use the returned `minimumAmount` and `maximumAmount` for the amount UI. Do not hard-code them. To validate a specific deposit, repeat the request with `amount`.

Stop when `errorText` is non-empty. While a deposit is still `Pending`, `Suspended`, `Locked`, or `InTransit`, a check without `amount` returns a `maximumAmount` lowered by that deposit's amount, and an amount-specific check that is otherwise within limits returns a non-empty `errorText` and no `maximumAmount`. Reconcile that deposit and wait for it to settle instead of retrying.

## Saved debit-card flow

1. Before registering the card, call [`stripeFundingMethodDependents`](/connect/api/rest-api-endpoints/users/stripe-funding-method-dependents) with the user's ID:

   ```http
   GET /v1/stripeFundingMethod/deps?masterid=654321
   ```

   If the result already contains a non-archived record with `status: Approved`, don't call `addStripeDebitCard`. A user can have only one non-archived approved funding method. To fund from the saved card, use that record's numeric `id` as `fundingMethodId` and continue to the Start Stripe Funding/Withdrawal section below. To replace it, call [`deleteStripeFundingMethod`](/connect/api/rest-api-endpoints/users/delete-stripe-funding-method), read `stripeFundingMethod/deps` again, and confirm that the same numeric `id` now has `archived: true` and is no longer a non-archived approved method before continuing.

   Otherwise, record the numeric `id` of every existing funding method so you can identify the new record later.

2. Use Stripe.js in the user's browser to collect the billing details and create a Stripe PaymentMethod.

3. Call [`addStripeDebitCard`](/connect/api/rest-api-endpoints/funds/add-stripe-debit-card) with the Stripe string PaymentMethod ID:

   ```json
   {
     "accountId": 123456,
     "stripePaymentMethodId": "pm_example"
   }
   ```

4. If the response is `HTTP 429` or contains a `p-ticket`, stop, do not retry with the ticket, and follow [Rate limits](/connect/overview/core-concepts/rate-limits) and [Penalty tickets](/connect/overview/core-concepts/penalty-tickets).

5. Inspect the final registration response to choose the next step. Do not use `errorText` as the branch discriminator:

   | Response                                                            | ANI result                          | Next step                                                                                                                                                                                   |
   | ------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
   | `{}`                                                                | Pass                                | Registration is complete; resolve the approved numeric ID                                                                                                                                   |
   | Contains `last4`, `nameOnCard`, and numeric `stripeFundingMethodId` | Not approved; the method is pending | Stop; do not call `startStripeFunding`. Use the [NinjaTrader-hosted funding flow](/connect/overview/partner-integration/embedding-funding-page-with-i-frame) or contact NinjaTrader support |
   | Non-empty `errorText`, or another response shape                    | Registration failed                 | Stop; do not call `startStripeFunding`                                                                                                                                                      |

### Resolve the approved funding-method ID

After `addStripeDebitCard` returns `{}`, call `stripeFundingMethodDependents` again with the same request. Compare the result with the IDs captured before registration. Continue only when there is exactly one new record and it has `status: Approved`.

Use the new record's numeric `id` as `fundingMethodId`. Do not use Stripe's `pm_...` identifier as the funding-method ID.

If there are zero or multiple new records, or the one new record is not `Approved`, stop the API flow. Do not call `startStripeFunding` or call `addStripeDebitCard` again for the same card. Use the [NinjaTrader-hosted funding flow](/connect/overview/partner-integration/embedding-funding-page-with-i-frame) or contact NinjaTrader support.

### Start Stripe Funding/Withdrawal

Call [`startStripeFunding`](/connect/api/rest-api-endpoints/funds/start-stripe-funding) with NinjaTrader's approved numeric ID:

```json
{
  "accountId": 123456,
  "amount": 250,
  "currencyId": 1,
  "fundingMethodId": 98765
}
```

Before sending this request, and to reconcile the deposit afterward, follow [Reconcile the funding outcome](/connect/overview/funding/reconcile-the-funding-outcome).

## Next steps

* Call `startStripeFunding` with the approved numeric `fundingMethodId` to start the saved-card deposit, then [reconcile the funding outcome](/connect/overview/funding/reconcile-the-funding-outcome).
* Do not use `submitDebitCardFunding` as the deposit operation.
* If you prefer a NinjaTrader-hosted flow, see [Embedding the Funding Page with an iframe](/connect/overview/partner-integration/embedding-funding-page-with-i-frame).
* To fund a deposit with Apple Pay or Google Pay instead, see [Wallet Pay Funding](/connect/overview/funding/wallet-pay-funding).