> 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.

# Ach Application List

GET https://live.tradovateapi.com/v1/achApplication/list

### List the ACH applications you can access.

**Available to:** All authenticated users

**Environments:** Demo, Live

**[Rate Limit](/connect/overview/core-concepts/rate-limits):** No endpoint-specific limit

Returns every `AchApplication` entity visible to the calling user. The request has no query parameters. An empty array means no ACH applications are visible to the caller. Check `archived` before deciding whether an application is active.

Use `dormanAccountId` to match an application to the `id` returned by the account list. The fields most relevant to a Plaid-linked application are:

- `id`: The ACH application ID used for relinking.
- `status`: The application's current state.
- `dormanAccountId` and `dormanAccountName`: The linked trading account's ID and exact name.
- `financialInstitutionName` and `accountType`: The linked financial institution and bank-account type.
- `accountMask`: The last four characters of the linked account number when Plaid supplies a mask.

After linking a Plaid item, refresh this list once to read the resulting application. `Approved` means the application can be used for ACH funding. `UnderReview` is a valid link result, but it isn't eligible for ACH funding; recheck the application later rather than treating the link as failed or repeatedly polling this endpoint.

The service permits only one active ACH application per trading account. An application is active when it isn't archived and its status is neither `Rejected` nor `RequiresRelink`. Use a `RequiresRelink` application for the relink flow instead of creating a second active application.

**Common Failure Scenarios**

- The access token is missing, expired, or invalid (returns `HTTP 401`).

Reference: https://partner.ninjatrader.com/connect/api/rest-api-endpoints/users/ach-application-list

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Response

### 200

ACH applications visible to the authenticated user

- `list of AchApplication`

## Types

### AchApplication

- `archived` (boolean, required) — Whether the ACH application has been archived
- `id` (long, optional)
- `userId` (long, optional)
- `timestamp` (datetime, optional)
- `status` (enum, optional) — Approved, Created, MicroDepositConfirmed, MicroDepositFailedThreeTimes, MicroDepositPending, MicroDepositPosted, MicroDepositReversed, MicroDepositTenDaysElapsed, MicroDepositTransferFailure, MicroDepositTransferred, Rejected, RequiresRelink, Signed, Suspended, UnderReview
  - Allowed values: `Approved`, `Created`, `MicroDepositConfirmed`, `MicroDepositFailedThreeTimes`, `MicroDepositPending`, `MicroDepositPosted`, `MicroDepositReversed`, `MicroDepositTenDaysElapsed`, `MicroDepositTransferFailure`, `MicroDepositTransferred`, `Rejected`, `RequiresRelink`, `Signed`, `Suspended`, `UnderReview`
- `financialInstitutionName` (string, optional)
- `accountType` (enum, optional) — BrokerageCash, CD, Checking, Educational, EmployeeRetirementAccount401k, HealthSavingsAccount, Individual, IndividualRetirementAccount, JointTenantsWithRightsOfSurvivorship, MoneyMarket, Other, RothIRA, Savings
  - Allowed values: `BrokerageCash`, `CD`, `Checking`, `Educational`, `EmployeeRetirementAccount401k`, `HealthSavingsAccount`, `Individual`, `IndividualRetirementAccount`, `JointTenantsWithRightsOfSurvivorship`, `MoneyMarket`, `Other`, `RothIRA`, `Savings`
- `accountNumber` (string, optional)
- `routingNumber` (string, optional)
- `dormanAccountId` (long, optional) — Dorman Account
- `dormanAccountName` (string, optional)
- `transaction1` (double, optional) — Transaction #1
- `transaction2` (double, optional) — Transaction #2
- `transaction3` (double, optional) — Transaction #3
- `nameAtBank` (string, optional)
- `suspendNotes` (string, optional)
- `microDepositConfirmed` (boolean, optional)
- `titleConfirmed` (boolean, optional)
- `titleUploadTimestamp` (datetime, optional)
- `microDepositPostedTimestamp` (datetime, optional)
- `disclosureId` (long, optional)
- `accountMask` (string, optional)
- `isTokenizedAccountNumber` (boolean, optional)

## Examples

**Response**

```json
[
  {
    "archived": true,
    "id": 1,
    "userId": 1,
    "timestamp": "2024-01-15T09:30:00Z",
    "status": "Approved",
    "financialInstitutionName": "string",
    "accountType": "BrokerageCash",
    "accountNumber": "string",
    "routingNumber": "string",
    "dormanAccountId": 1,
    "dormanAccountName": "string",
    "transaction1": 1.1,
    "transaction2": 1.1,
    "transaction3": 1.1,
    "nameAtBank": "string",
    "suspendNotes": "string",
    "microDepositConfirmed": true,
    "titleConfirmed": true,
    "titleUploadTimestamp": "2024-01-15T09:30:00Z",
    "microDepositPostedTimestamp": "2024-01-15T09:30:00Z",
    "disclosureId": 1,
    "accountMask": "string",
    "isTokenizedAccountNumber": true
  }
]
```

**SDK Code**

```python
import requests

url = "https://live.tradovateapi.com/v1/achApplication/list"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://live.tradovateapi.com/v1/achApplication/list';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://live.tradovateapi.com/v1/achApplication/list"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://live.tradovateapi.com/v1/achApplication/list")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://live.tradovateapi.com/v1/achApplication/list")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://live.tradovateapi.com/v1/achApplication/list', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://live.tradovateapi.com/v1/achApplication/list");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://live.tradovateapi.com/v1/achApplication/list")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```