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

# Cancel Ach Application

POST https://live.tradovateapi.com/v1/achApplication/cancelachapplication
Content-Type: application/json

### Cancel an ACH application.**Available to:** All authenticated users**Environments:** Live**[Rate Limit](/connect/overview/core-concepts/rate-limits):** No endpoint-specific limitCancel an ACH application that the user no longer wants to use for ACH funding. Send the application's ID from [`achApplicationList`](/connect/api/rest-api-endpoints/users/ach-application-list) as `achApplicationId`. A successful response is `{ "ok": true }`.Cancellation archives the application. For a Plaid-linked application, NinjaTrader also removes the stored Plaid connection. An archived application can't be used for ACH funding, and the API has no operation to undo the cancellation. To fund by ACH again, link the bank account again with [`createPlaidLinkToken`](/connect/api/rest-api-endpoints/users/create-plaid-link-token) and [`linkPlaidItem`](/connect/api/rest-api-endpoints/users/link-plaid-item).After you cancel, refresh the user's ACH applications once with `achApplicationList` and confirm the application now shows `archived: true`. Don't call this endpoint again for an application that is already archived.**Warning:** Business failures return `HTTP 200` with `ok: false` and `errorText`. Check `ok` before treating the application as canceled.**Common Failure Scenarios**- The ACH application ID doesn't identify an application.
- The ACH application is already archived.**Error Messages**| Message                                  | Response             | Trigger                                                 |
| ---------------------------------------- | -------------------- | ------------------------------------------------------- |
| `"ACH application not found."`           | 200 (in `errorText`) | `achApplicationId` doesn't identify an ACH application. |
| `"ACH application is already archived."` | 200 (in `errorText`) | The application was canceled or archived earlier.       |

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

## Authentication

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

## Request

### Body (application/json)

This endpoint expects a CancelAchApplication.

- `achApplicationId` (long, required)

## Response

### 200

SimpleResponse

- `ok` (boolean, required)
- `errorText` (string, optional) — Non-empty if the request failed

## Examples

**Request**

```json
{
  "achApplicationId": 1
}
```

**Response**

```json
{
  "ok": true,
  "errorText": "string"
}
```

**SDK Code**

```python
import requests

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

payload = { "achApplicationId": 1 }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://live.tradovateapi.com/v1/achApplication/cancelachapplication';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"achApplicationId":1}'
};

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"
	"strings"
	"net/http"
	"io"
)

func main() {

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

	payload := strings.NewReader("{\n  \"achApplicationId\": 1\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	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/cancelachapplication")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"achApplicationId\": 1\n}"

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.post("https://live.tradovateapi.com/v1/achApplication/cancelachapplication")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"achApplicationId\": 1\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://live.tradovateapi.com/v1/achApplication/cancelachapplication', [
  'body' => '{
  "achApplicationId": 1
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://live.tradovateapi.com/v1/achApplication/cancelachapplication");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"achApplicationId\": 1\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["achApplicationId": 1] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

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

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()
```