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

# Request Trading Permission

POST https://live.tradovateapi.com/v1/user/requesttradingpermission
Content-Type: application/json

### Send a request to grant trading permission for your account to another party.
Once this request is reviewed by our accounting and compliance, the other party will be allowed to access your account as if it was one of that party's own accounts.
**_*NOTE*_**: B2B Partners, don't use this endpoint. Instead, prefer [/user/createTradingPermission](#tag/Users/operation/createTradingPermission), or if creating and assinging many accounts, prefer [/user/createEvaluationAccounts](#operation/createEvaluationAccounts).

Reference: https://partner.ninjatrader.com/eval/api/rest-api-endpoints/users/request-trading-permission

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: eval
  version: 1.0.0
paths:
  /user/requesttradingpermission:
    post:
      operationId: request-trading-permission
      summary: Request Trading Permission
      description: >-
        ### Send a request to grant trading permission for your account to
        another party.

        Once this request is reviewed by our accounting and compliance, the
        other party will be allowed to access your account as if it was one of
        that party's own accounts.

        **_*NOTE*_**: B2B Partners, don't use this endpoint. Instead, prefer
        [/user/createTradingPermission](#tag/Users/operation/createTradingPermission),
        or if creating and assinging many accounts, prefer
        [/user/createEvaluationAccounts](#operation/createEvaluationAccounts).
      tags:
        - subpackage_users
      parameters:
        - name: Authorization
          in: header
          description: Bearer authentication
          required: true
          schema:
            type: string
      responses:
        '200':
          description: TradingPermissionResponse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TradingPermissionResponse'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RequestTradingPermission'
servers:
  - url: https://live.tradovateapi.com/v1
    description: https://live.tradovateapi.com/v1
components:
  schemas:
    RequestTradingPermission:
      type: object
      properties:
        accountId:
          type: integer
          format: int64
        ctaContact:
          type: string
        ctaEmail:
          type: string
      required:
        - accountId
        - ctaContact
        - ctaEmail
      title: RequestTradingPermission
    TradingPermissionStatus:
      type: string
      enum:
        - Accepted
        - Approved
        - Declined
        - Requested
        - Revoked
      description: Accepted, Approved, Declined, Requested, Revoked
      title: TradingPermissionStatus
    TradingPermission:
      type: object
      properties:
        id:
          type: integer
          format: int64
        userId:
          type: integer
          format: int64
        accountId:
          type: integer
          format: int64
        accountHolderContact:
          type: string
        accountHolderEmail:
          type: string
        ctaContact:
          type: string
        ctaEmail:
          type: string
        status:
          $ref: '#/components/schemas/TradingPermissionStatus'
          description: Accepted, Approved, Declined, Requested, Revoked
        updated:
          type: string
          format: date-time
        approvedById:
          type: integer
          format: int64
      required:
        - userId
        - accountId
        - accountHolderContact
        - accountHolderEmail
        - ctaContact
        - ctaEmail
        - status
      title: TradingPermission
    TradingPermissionResponse:
      type: object
      properties:
        errorText:
          type: string
          description: Non-empty if the request failed
        tradingPermission:
          $ref: '#/components/schemas/TradingPermission'
      title: TradingPermissionResponse
  securitySchemes:
    bearer_access_token:
      type: http
      scheme: bearer

```

## Examples



**Request**

```json
{
  "accountId": 1,
  "ctaContact": "string",
  "ctaEmail": "string"
}
```

**Response**

```json
{
  "errorText": "string",
  "tradingPermission": {
    "userId": 1,
    "accountId": 1,
    "accountHolderContact": "string",
    "accountHolderEmail": "string",
    "ctaContact": "string",
    "ctaEmail": "string",
    "status": "Accepted",
    "id": 1,
    "updated": "2024-01-15T09:30:00Z",
    "approvedById": 1
  }
}
```

**SDK Code**

```python
import requests

url = "https://live.tradovateapi.com/v1/user/requesttradingpermission"

payload = {
    "accountId": 1,
    "ctaContact": "string",
    "ctaEmail": "string"
}
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/user/requesttradingpermission';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"accountId":1,"ctaContact":"string","ctaEmail":"string"}'
};

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/user/requesttradingpermission"

	payload := strings.NewReader("{\n  \"accountId\": 1,\n  \"ctaContact\": \"string\",\n  \"ctaEmail\": \"string\"\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/user/requesttradingpermission")

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  \"accountId\": 1,\n  \"ctaContact\": \"string\",\n  \"ctaEmail\": \"string\"\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/user/requesttradingpermission")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"accountId\": 1,\n  \"ctaContact\": \"string\",\n  \"ctaEmail\": \"string\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

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

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

```csharp
using RestSharp;

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

```swift
import Foundation

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

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

let request = NSMutableURLRequest(url: NSURL(string: "https://live.tradovateapi.com/v1/user/requesttradingpermission")! 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()
```