> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://partner.ninjatrader.com/eval/api/rest-api-endpoints/users/create-evaluation-users/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://partner.ninjatrader.com/_mcp/server. # Create Evaluation Users POST https://live.tradovateapi.com/v1/user/createevaluationusers Content-Type: application/json ### Batch create up to 100 organization users at once.**Available to:** Organization administrators**Environments:** Live**[Rate Limit](/overview/core-concepts/rate-limits):** 100 requests per hour, 1-second back-off, counts failed requests onlyRequests with `firstName` and `lastName` fields exceeding a combined 60 characters are rejected, despite each field individually allowing up to 64 characters.This endpoint can help reduce your application's API usage footprint. It batches the functionality of several calls at once for each `EvaluationUser` configuration object:- Provide a `tradovateSubscriptionPlanId` integer value matching one of your organization-specific Tradovate Subscription plans to assign that membership to the created user without invoking an additional call. - Provide an `entitlementIds` integer array to pre-assign entitlement subscriptions with matching IDs to the user. One common use case is assigning your organization's TradingView entitlement.Do not include entitlement ID 22 (GroupTrade) in `entitlementIds`. Requests that pass entitlement ID 22 fail, and no users are created. Entitlement ID 22 is deprecated: Group Trading is now standard for any user with two or more accounts in the same environment and no longer requires an entitlement.Use this endpoint when creating new users to minimize API traffic.Users are created individually. When a single user fails to create, that user's entry in the `results` array contains an `errorText` describing the failure, and the remaining users are still created; each successful entry includes the new user's `userId`.**Common Failure Scenarios**- The `users` array is empty or contains more than 100 entries. - A `tradovateSubscriptionPlanId` or `entitlementIds` value doesn't match a plan or entitlement available to your organization. This fails the entire request; no users are created. - A user's combined `firstName` and `lastName` exceeds 60 characters. - Your organization is not currently allowed to add new users.**Error Messages**Access failures reject the whole request and are returned as an `HTTP 401` response with the message text as the response body:| `errorText` | Trigger | | ----------------------------------------------- | ---------------------------------------------------- | | `"Users cannot be added for this organization"` | New-user creation is disabled for your organization. |***Note***: This endpoint replaces [/user/signUpOrganizationMember](/api/rest-api-endpoints/users/sign-up-organization-member), [/user/addTradovateSubscription](/api/rest-api-endpoints/users/add-tradovate-subscription), and [/userPlugin/addEntitlementSubscription](/api/rest-api-endpoints/users/add-entitlement-subscription). Reference: https://partner.ninjatrader.com/eval/api/rest-api-endpoints/users/create-evaluation-users ## Authentication - `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer `, where token is your auth token. ## Request ### Body (application/json) This endpoint expects a CreateEvaluationUsers. - `users` (list of EvaluationUser, required) ## Response ### 200 CreateEvaluationUsersResponse - `results` (list of CreateEvaluationUserResponse, required) - `errorText` (string, optional) — Non-empty if the request failed ## Types ### EvaluationUser - `name` (string, required) - `email` (string, required) - `password` (string, required) - `firstName` (string, required) - `lastName` (string, required) - `tradovateSubscriptionPlanId` (long, optional) - `entitlementIds` (list of long, optional) ### CreateEvaluationUserResponse - `errorText` (string, optional) - `userId` (long, optional) ## Examples **Request** ```json { "users": [ { "name": "string", "email": "string", "password": "string", "firstName": "string", "lastName": "string" } ] } ``` **Response** ```json { "results": [ { "errorText": "string", "userId": 1 } ], "errorText": "string" } ``` **SDK Code** ```python import requests url = "https://live.tradovateapi.com/v1/user/createevaluationusers" payload = { "users": [ { "name": "string", "email": "string", "password": "string", "firstName": "string", "lastName": "string" } ] } headers = { "Authorization": "Bearer ", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript const url = 'https://live.tradovateapi.com/v1/user/createevaluationusers'; const options = { method: 'POST', headers: {Authorization: 'Bearer ', 'Content-Type': 'application/json'}, body: '{"users":[{"name":"string","email":"string","password":"string","firstName":"string","lastName":"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/createevaluationusers" payload := strings.NewReader("{\n \"users\": [\n {\n \"name\": \"string\",\n \"email\": \"string\",\n \"password\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\"\n }\n ]\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("Authorization", "Bearer ") 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/createevaluationusers") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["Authorization"] = 'Bearer ' request["Content-Type"] = 'application/json' request.body = "{\n \"users\": [\n {\n \"name\": \"string\",\n \"email\": \"string\",\n \"password\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\"\n }\n ]\n}" response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://live.tradovateapi.com/v1/user/createevaluationusers") .header("Authorization", "Bearer ") .header("Content-Type", "application/json") .body("{\n \"users\": [\n {\n \"name\": \"string\",\n \"email\": \"string\",\n \"password\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\"\n }\n ]\n}") .asString(); ``` ```php request('POST', 'https://live.tradovateapi.com/v1/user/createevaluationusers', [ 'body' => '{ "users": [ { "name": "string", "email": "string", "password": "string", "firstName": "string", "lastName": "string" } ] }', 'headers' => [ 'Authorization' => 'Bearer ', 'Content-Type' => 'application/json', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://live.tradovateapi.com/v1/user/createevaluationusers"); var request = new RestRequest(Method.POST); request.AddHeader("Authorization", "Bearer "); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"users\": [\n {\n \"name\": \"string\",\n \"email\": \"string\",\n \"password\": \"string\",\n \"firstName\": \"string\",\n \"lastName\": \"string\"\n }\n ]\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = [ "Authorization": "Bearer ", "Content-Type": "application/json" ] let parameters = ["users": [ [ "name": "string", "email": "string", "password": "string", "firstName": "string", "lastName": "string" ] ]] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://live.tradovateapi.com/v1/user/createevaluationusers")! 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() ```