Submit Shadow Fund Transaction

View as Markdown
### Submit a deposit or withdrawal against a shadow account. **Available to:** Organization administrators with shadow fund transactions enabled **Environments:** Live **[Rate Limit](/overview/core-concepts/rate-limits):** No endpoint-specific limit Move funds in or out of a shadow account — a customer trading account whose cash is backed by your organization's entity account. Set `outgoing` to `false` for a deposit or `true` for a withdrawal. Unlike standard funding requests, shadow fund transactions are approved and applied immediately: the transaction is created with status `Approved` and the account's cash balance updates right away. Your organization admin user needs the `shadowFundTransactionsEnabled` property to call this endpoint. If your calls return an access denied error, contact your NinjaTrader representative to have it enabled. **Field Details** The `shadowAccountId` identifies the shadow account, which must be linked to an open, unrestricted trading account. The `fundCurrencyId` must correspond to one of the supported currencies: USD, EUR, AUD, GBP, or CAD. Currency IDs are environment-specific — use the `/currency/list` endpoint to retrieve valid IDs. The `transactionIdentifier` is optional but recommended as an idempotency key. It's stored as the transaction description, and submitting a shadow transaction whose identifier already exists on the account is rejected as a duplicate. Set `fullBalance` to `true` on a withdrawal to request the account's entire balance. **Balance Protection** Deposits are checked against your entity account: if the combined cash balance of all shadow accounts plus the deposit would exceed the entity account's balance (including any configured buffer), the request is rejected. Withdrawals are checked against the shadow account's available funds. **Common Failure Scenarios** - Caller is not an organization administrator, or doesn't have `shadowFundTransactionsEnabled` - Linked trading account is closed, restricted, or missing - Deposit would push total shadow balances above the entity account balance - Withdrawal amount exceeds the shadow account's available funds - `transactionIdentifier` was already used on the account **Error Messages** | `errorText` | Trigger | |-------------|---------| | `"Fund transaction with provided identifier already exists."` | Duplicate `transactionIdentifier` (`errorCode: DuplicateShadowTransaction`) | | `"Account not open for funding"` | Linked trading account is closed, restricted, or missing | | `"The selected currency is not supported. Please select either USD, EUR, AUD, or GBP."` | `fundCurrencyId` is not a supported currency | | `"Total shadow accounts cash balance exceeds entity account cash balance."` | Deposit would exceed the entity account's backing balance | | `"You do not have sufficient margin excess to place this request. Please decrease the amount."` | Withdrawal exceeds available funds (`errorCode: InsufficientFunds`) | **Related Endpoints** - Use [`submitManagedFundTransaction`](/api/rest-api-endpoints/funds/submit-managed-fund-transaction) to submit a shadow account transaction through a stored managed funding method with pending approval. - Use [`submitFundTransaction`](/api/rest-api-endpoints/funds/submit-fund-transaction) for standard (non-shadow) account funding.

Authentication

AuthorizationBearer

Bearer authentication of the form Bearer <token>, where token is your auth token.

Request

This endpoint expects an object.
shadowAccountIdlongRequired
outgoingbooleanRequired
fundAmountdoubleRequired
fundCurrencyIdlongRequired
fullBalancebooleanOptional
transactionIdentifierstringOptional<=8192 characters

Response

FundTransactionResponse
errorTextstring<=8192 characters

Non-empty if the request failed

errorHeaderstring<=8192 characters

Non-empty if the request failed

fundTransactionobject
errorCodeenum
AccountLockFailed, AchDepositAboveMaximum, AchDepositBelowMinimum, AchDepositExpected, AchDepositFrequencyExceeded, AchDepositHoldPeriod, AchNoApprovedApplications, AchPendingDepositExists, AchWithdrawalFrequencyExceeded, ApprovalStatusLocked, BankAccountNSF, ConcurrentRequestRejected, DuplicateAchReturn, DuplicateShadowTransaction, FullBalanceRequestPending, FullBalanceWithAchHolds, FullBalanceWithOpenPositions, FullBalanceWithPendingAch, InsufficientFunds, TransactionAlreadyApproved, TransactionAlreadyDeclined, TransactionNotApplicable, TransactionNotFound, Unknown, WireDepositHoldPeriod