Retirement accounts
Retirement accounts are tax advantaged brokerage accounts offered exclusively to US taxpayers each carrying their own limitations and taxing qualifications. Today, DriveWealth supports two types of tax advantaged accounts:
- Traditional IRAs — contributions may be tax deductible and earnings grow tax deferred
- Roth IRAs — contributions are not tax deductible and offer tax-free qualified withdrawals in retirement
DriveWealth currently supports the ability to trade in equities, fixed income and mutual funds within retirement accounts.
To open a retirement account, the customer must meet the following criteria:
- Age 18 or older
- A U.S. taxpayer
- Provide a valid SSN
Once these steps are completed, opening an Account looks identical to any non-tax-advantaged Account, just with a new management type.
POST /back-office/accounts
{
"userID": "cc07f91b-7ee1-4868-b8fc-823c70a1b932",
"accountType": "LIVE",
"accountManagementType": "RETIREMENT_ROTH_SELF",
"tradingType": "CASH"
}
Assigning beneficiaries
Utilize the User Beneficiaries endpoint to assign beneficiaries to a retirement account. Please refer to Create Beneficiaries API for request and response details.
Contributions and Distributions
Due to the tax benefits associated with retirement accounts, there are additional requirements to properly identify contributions (money in to) and distributions (money out from) a retirement account. DriveWealth has simplified the selections available for contribution or distribution from a retirement account. A transaction selection is either RETIREMENT_CONTRIBUTION or RETIREMENT_DISTRIBUTION. DriveWealth currently supports monetary contributions and distributions at this time.
Contributions
While making deposits to a customer’s retirement account, DriveWealth provides the ability to properly classify the contribution in line with federal tax reporting. The iraContribution object is provided and includes the list of enumerations that can be provided. A selection of an iraContribution type is required for all retirement account contributions.
In instances where the iraContribution type is either a POSTPONED_CONTRIBUTION or a REPAYMENT, an iraContributionSubType is required.
Refer: Deposit ENUMs for a comprehensive list of all Contribution and Sub-contribution types
Contribution API request and response
POST back-office/funding/deposits
{
"accountNo": "DWJY000118",
"amount": 200,
"currency": "USD",
"bankAccountID": "bank_152579f3-9787-45d9-a730-047de1bb07c4",
"iraContribution": "POSTPONED_CONTRIBUTION",
"iraContributionSubType": "SC",
"type": "ACH",
"note": "Here's some money"
}{
"id": "DWJY000118-1758686781303-DVEQJ",
"accountNo": "DWJY000118",
"category": "DEPOSIT",
"currency": "USD",
"amount": 200,
"status": {
"id": 1,
"message": "Pending",
"updated": "2025-09-24T04:06:21.303Z"
},
"source": {
"id": "ACH",
"brand": "ACH",
"meta_info": "Here's some money|Karthick's spending account|****2971"
},
"created": "2025-09-24T04:06:21.303Z",
"iraContribution": "POSTPONED_CONTRIBUTION",
"iraContributionSubType": "SC",
"accountID": "527e55a5-2d67-4854-bdec-4b7b47e2c6ad.1758619903960",
"userID": "527e55a5-2d67-4854-bdec-4b7b47e2c6ad",
"transactionCode": "RETIREMENT_CONTRIBUTION",
"wlpFinTranTypeID": "4df8c5df-7b5c-4a62-b564-6885a20d853b",
"batch": true,
"account_number": "DWJY000118"
}DriveWealth will also require the completion and recording of a form for the following asset movement types:
- Direct Rollovers or Indirect Rollovers via form “Retirement Rollover Request Form”.
- Internal Transfer, Recharacterization, or Roth Conversion via form “IRA Internal Asset Movement Request Form”.
- Inherited IRA, Alternate Payee Payments, or Asset Transfers to another institution via form “IRA Distribution & External Movement Request Form”.
Contributions Limits & Distributions
DriveWealth validates contribution eligibility and maximum limits for Traditional and Roth IRA accounts in real-time to prevent over-contributions. Traditional and Roth IRAs are subject to a combined annual contribution limit per individual user ID. DriveWealth aggregates posted and pending contributions for the applicable tax year across accounts associated with the same individual user ID within each partner's program independently. DriveWealth does not enforce contribution limits across multiple partners or external providers.
| 2026 | 2025 | |
|---|---|---|
| If customer is 49 or younger | $7,500 | $7,000 |
| If customer is 50 or older | $8,600 | $8,000 |
(Note: Catch-up age eligibility is calculated as of December 31st of the target tax year.)
- Tax year determination: The target tax year is derived dynamically based on the transaction date and the contribution type (e.g.,
CURRENT_YEARorPRIOR_YEAR). Prior year contributions must be submitted before the federal tax deadline (typically April 15th). - Multi-year contributions: Between January 1 and the tax deadline, customers may submit contributions for both the prior and current tax years. These are tracked independently against their respective annual limits.
- Catch-up validation: Customers turning 50 or older by December 31st of the target tax year are eligible for an increased catch-up limit.
- Transaction impacts: Direct contributions add to the utilized limit, while return of excess contributions subtract from it. Asset movements such as recharacterizations, rollovers, transfers, and conversions are not classified as new contributions and do not impact the annual limit.
DriveWealth does not validate income-based restrictions, such as MAGI phase-outs or earned income requirements. It is the partner's responsibility to ensure customer suitability for IRA contributions prior to submission.
Warnings & Rejections
- When a contribution meets or crosses the annual limit (Approved):
- If a deposit reaches the exact annual limit, OR if a single deposit pushes the combined total over the limit, the transaction is approved with a standard success message.
The API will always accept the single contribution that meets or crosses the maximum limit. However, once the limit is met or exceeded, any subsequent contributions will be rejected.
- If a deposit reaches the exact annual limit, OR if a single deposit pushes the combined total over the limit, the transaction is approved with a standard success message.
"status": {
"id": 14,
"message": "Approved",
"comment": "Payment successfully submitted. Moved to Approved",
"updated": "2026-04-29T16:09:30.111Z"
}
- When a user has already met or exceeded their annual limit (including catch-up eligibility) and attempts to submit an additional contribution:
- The request is rejected entirely with an
E032error code.
- The request is rejected entirely with an
{
"errorCode": "E032",
"message": "Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Already contributed amount of $9,000.00 meets or exceeds the annual limit of $7,500.00 for tax year 2026"
}
Distributions
All retirement account disbursement requests are facilitated through the withdrawal API. Like contributions, disbursements require additional information for tax reporting and the appropriate handling of tax withholding. The iraDistribution object includes the list of enumerations that can be provided. A selection of an iraDistribution type is required for all retirement account contributions.
In instances where the iraDistribution type is EARLY_DISTRIBUTION_PENALTY_EXCEPTION an iraDistributionSubType is required.
Refer: Redemption ENUMs for a comprehensive list of all Distribution and Sub-distribution types
Distribution request and response
POST back-office/funding/redemptions
{
"accountNo": "FAGX000996",
"amount": 10,
"type": "ACH",
"bankAccountID": "bank_5dcfe4a1-2536-4496-a87a-c461bedbb783",
"iraDistribution": "NORMAL_DISTRIBUTION",
"iraTaxWithholdings": {
"federalTaxPercentage": 0.1,
"stateTaxPercentage": 0.1
},
"note": "I need some funds pls kbye"
}{
"id": "FAGX000996-1758687628755-RDZ4Y",
"accountNo": "FAGX000996",
"category": "REDEMPTION",
"currency": "USD",
"amount": -10,
"status": {
"id": 14,
"message": "Approved",
"updated": "2025-09-24T04:20:28.755Z"
},
"source": {
"id": "ACH",
"meta_info": "I need some funds pls kbye|FAGX000996's Virtual Account|****2035"
},
"paymentRef": "FAGX000996-1758687628755-RDZ4Y",
"created": "2025-09-24T04:20:28.755Z",
"iraDistribution": "NORMAL_DISTRIBUTION",
"accountID": "19b75b9e-2528-448c-b3f6-e2b2361c4ee9.1755186779936",
"userID": "19b75b9e-2528-448c-b3f6-e2b2361c4ee9",
"transactionCode": "RETIREMENT_DISTRIBUTION",
"wlpFinTranTypeID": "862732fa-42f2-45a1-acbc-bdc48ff56e10",
"batch": true,
"account_number": "FAGX000996"
}Tax withholding
For distributions from a retirement account, there are also tax withholding requirements. At a federal level, the IRS requires a 10% withholding rate by default. Depending on the state of residency on record for the customer at time of withdrawal, state withholding may also be required by default.
Federal tax
Through the withdrawal API, the customer provides a federal tax withholding election. By default, this withholding rate is set to 10% in accordance with the requirements set by the IRS. The customer may elect to withhold the default rate of 10% or change this withholding amount to a rate of their preference including not withholding at all (0%). DriveWealth will withhold the elected amount (deducted from the distribution amount) and remit payment to the IRS. The withholding amounts will be reported to the IRS and electronically to the customer through Forms 1099R and 5420. Typically, the Forms become available in late February for the relevant tax year. For non-qualified disbursements, it is the customer's responsibility to file and pay the correct taxes and penalties to the IRS.
State tax
DriveWealth will provide the ability to withhold state tax based on each individual state’s tax withholding rules. State withholding falls within one of three categories:
- Conditional Mandatory: when federal withholding is applied, the state withholding default rate is applied. This rate can be changed by the customer.
- Voluntary: the election to withhold for state tax purposes is solely at the discretion of the customer. By default, the state withholding rate is set to 0%
- Not allowed: in select states, withholding is neither allowed nor is the customer able to elect withholding of monies for state tax purposes.
For monies that are withheld, DriveWealth will remit the monies to the state taxation body on the remittance schedule defined by each state. If the customer elects to not withhold taxes, zero state tax withholding will be reported. It is the Customer's responsibility to file and pay the correct state taxes to their state taxation body.
"iraTaxWithHoldings": {
"type": "object",
"properties": {
"federalTaxPercentage": {
"type": "number",
"example": 0.1,
"description": "The percentage amount that should be withheld for federal taxes."
},
"stateTaxPercentage": {
"type": "number",
"example": 0.1,
"description": "The percentage amount that should be withheld for state taxes."
}
}
}
Reference
Contribution warnings
-
When a user uses invalid reason code for the contribution category:
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Invalid
iraContributionSubTypeDDforiraContributionTypePOSTPONED_CONTRIBUTION. Allowed values: [SC, PO, FD, EO, PL] - Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Invalid
iraContributionSubTypePOforiraContributionTypeREPAYMENT. Allowed values: [QR, DD, BA, EP, DA, TI]
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Invalid
-
When a user is missing reason code:
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
iraContributionSubTypeis required foriraContributionTypePOSTPONED_CONTRIBUTION - Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
iraContributionSubTypeis required foriraContributionTypeREPAYMENT
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
-
When a user provides reason code for the category where code is not required:
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
iraContributionSubTypemust benullforiraContributionTypeCURRENT_YEAR,DIRECT_ROLLOVER,INDIRECT_ROLLOVER,DIRECT_TRANSFER,CONVERSION,RECHARACTERIZATION
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
-
When a user attempts to make a
PRIOR_YEARcontribution outside the allowed contribution window of January 1 to April 15 of the current year.- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Prior year contributions can only be made between January 1 and April 15
-
Distribution warnings
- When a user creates distribution with category and with reason code that is not required for the distribution type:
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
iraDistributionSubTypemust be null foriraDistributionTypeNORMAL_DISTRIBUTION,EARLY_DISTRIBUTION,DIRECT_ROLLOVER,DIRECT_TRANSFER,CONVERSION,RECHARACTERIZATION,REQUIRED_MINIMUM_DISTRIBUTION,RETURN_OF_EXCESS_CONTRIBUTION,QUALIFIED_CHARITABLE_CONTRIBUTION
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details:
- When a user creates distribution without distribution category:
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Missing required field:
iraDistribution, for account management type
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Missing required field:
- When a user creates distribute funds from the retirement account with category
EARLY_DISTRIBUTION_PENALTY_EXCEPTIONand without a reason code:- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Missing required field:
iraDistributionSubType, foriraDistributionTypeEARLY_DISTRIBUTION_PENALTY_EXCEPTION
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Missing required field:
- When a user attempts to distribute funds from the retirement account with only
iraDistributionSubType- Invalid or missing parameters in the request body. Refer to the API documentation for details.
- When a user attempts to withhold state taxes in a state that does not permit withholding
- Invalid requested amount for state withholding as the state of residence does not allow withholding. The following states do not allow withholding as of January 1, 2025: Alaska, Arizona, Florida, Nevada, New Hampshire, South Dakota, Tennessee, Texas, Washington, Wyoming.
- When a user attempts to withdrawal an amount inclusive of withholding and fees that exceed cash available for withdrawal:
- Invalid requested amount as the amount exceeds cash available for withdrawal. CAFW must be greater or equal to the sum of withdrawal amount + federal withholding + state withholding (if applicable) + processing fee (if applicable)
- When a user specifies federal withholding, lives in a state where withholding is required if federal withholding is applied, and attempts to enter a state withholding amount below the state withholding minimum:
- Invalid state withholding percentage. In conditional mandatory withholding states, if federal withholding is requested, the state withholding percentage cannot be less than the state's default rate. The following states enforce this rule as of January 1, 2026: California, Delaware, Iowa, Kansas, Maine, Massachusetts, Nebraska, North Carolina, Oklahoma, Vermont.
- When a user attempts a withdrawal when entering a negative value for federal and/or state withholding percentage:
- Invalid or missing parameters in the request body. Refer to the API documentation for details. Details: Federal or state percentage should not be negative.