This is an old revision of the document!
Integration Walkthrough
This walkthrough demonstrates the process for integrating with the T4 backend to create user accounts for third-party applications.
Overview
Creating a new user in the T4 system involves four essential steps:
- Step 1: Create user account
 - Step 2: Create trading account
 - Step 3: User market data selection
 - Step 4: User signs EULAs
 
The order of these steps is important.
Default User and Account
New users and accounts are created using the firm default user and account as a template. Proper configuration of the firm default will simplify integration by reducing the amount of customization needed for each new user.
Note: 
For different user types, you can override the default by using the templateUser or templateAccount parameter, allowing unlimited pre-configured user and account defaults.
Step 1: Create User Account
This endpoint creates a base user profile in the system.
Request
{
  "username": "[email protected]",
  "password": "0ctopus777{",
  "firstname": "Test",
  "lastname": "User",
  "phone": "212-555-0123",
  "email": "[email protected]",
  "street": "2 Pierce Place",
  "city": "Itasca",
  "county": "Dupage",
  "state": "IL",
  "postCode": "60143",
  "country": "US",
  "apptype": "NonProfessional"
}
Response
{
    "result": {
        "value": {
            "data": {
                "userID": "8C6AC430-3292-4C1D-BE98-F0637B64734F",
                "userName": "[email protected]",
                "lastname": "User",
                "firstname": "Test",
                "enabled": true,
                "message": "",
                "company": "",
                "phone": "212-555-0123",
                "email": "[email protected]",
                "firmID": "2884B215-4A4B-4E9D-A40E-F8212D713E13",
                "billingRef": "",
                "street": "2 Pierce Place",
                "city": "Itasca",
                "county": "Dupage",
                "state": "IL",
                "postCode": "60143",
                "country": "US",
                "simFirm": "",
                "simUsername": "",
                "simLinkedUserID": "",
                "userCreationDate": "2025-04-24T00:00:00",
                "appType": "NonProfessional",
                "cmeMarketDataNetting": "Netting",
                "trialExpires": "2025-05-08T00:00:00",
                "iceMarketDataAccount": "",
                "iceMarketDataParentAccount": "",
                "euronextMarketDataAccount": "",
                "euronextMarketDataParentAccount": "",
                "custOrderHandlingInst": "Electronic",
                "applications": [
                    /* Application list truncated for brevity */
                ],
                "roles": [
                    "TimeEntry",
                    "QueueOrders",
                    "ANTSEditor",
                    "ANTSFastBoard",
                    "MarketProfile",
                    "Strategy",
                    "ModifyOrders",
                    "BasicCharting",
                    "Charting",
                    "ANTS1",
                    "PitTrades",
                    "BillingRetail1",
                    "Trading",
                    "ANTSAccountNet",
                    "StrategyQuotes"
                ],
                "accounts": []
            },
            "metadata": {
                "timestamp": "2025-04-24T18:03:32.2637427Z",
                "requestId": "0HNC3B7647GLB:00000001"
            }
        },
        "formatters": [],
        "contentTypes": [],
        "statusCode": 200
    }
}
Important: 
Make note of the userID value in the response. This will be needed for Step 2.
Step 2: Create Trading Account
This endpoint creates a trading account and links it to the user created in Step 1.
Request
{
  "account": "chadtest13",
  "accountName": "chadtest13",
  "templateAccount": "Chad01",
  "displayName": "Chad Test 13",
  "accountUserId": "8C6AC430-3292-4C1D-BE98-F0637B64734F"
}
Response
{
    "result": {
        "value": {
            "data": {
                "accountID": "33CB0961-CBD8-408F-9EE1-06E34BB78D21",
                "firmID": "2884B215-4A4B-4E9D-A40E-F8212D713E13",
                "account": "chadtest13",
                "accountName": "chadtest13",
                "displayName": "",
                "balance": 0.00000,
                "cash": 0.00000,
                "maxClipSize": 2000,
                "preTradeDisabled": true,
                "deleted": false,
                "enabled": "Disabled",
                "positionRollover": false,
                "plRollover": true,
                "minBalance": 0.00000,
                "marginPC": 100.0,
                "overnightMarginPC": 100.0,
                "lossLimit": 0.00000,
                "lossLimitPC": 0.0,
                "dayLossLimit": 0.00000,
                "dayLossLimitPC": 0.0,
                "maxPosition": -1,
                "noBalanceUpdates": false,
                "noPositionUpdates": false,
                "accountMode": "ByContract",
                "orderRouting": false,
                "groupName": "",
                "activeTimeStart": "",
                "activeTimeStop": "",
                "strategyMaxClipSize": 2000,
                "strategyMaxPosition": -1,
                "warningThresholdPL": -1,
                "warningThresholdLossLimit": -1,
                "warningThresholdMargin": -1,
                "boFirmCode": "",
                "boOfficeCode": "",
                "boSalesCode": "",
                "totalPitTrades": -1,
                "strategyTotalPitTrades": -1,
                "maxContractMargin": -1.00000,
                "maxContractDayMargin": -1.00000,
                "blockExpiring": -1,
                "blockExpiringOptions": -1,
                "maxAccountPosition": -1,
                "usePLForMargin": true,
                "usePremiumForMargin": false,
                "riskAlerts": false,
                "fees": 0.0,
                "commission": 0.00000,
                "eMail": "",
                "wideMarket": -1,
                "priceBanding": -1,
                "riskDebug": "None",
                "tradeImport": false,
                "marginType": "Spec",
                "maxDelta": -1.00000,
                "maxWorkingLongDelta": -1.00000,
                "maxWorkingShortDelta": -1.00000,
                "delayed": false,
                "assignedType": true,
                "optionsSettlement": 0,
                "warningThresholdMinNetEquity": 0.00000,
                "riskDetails": {
                    "comparisonRiskNumber": 0.0,
                    "comparisonNetLiqBalPCRiskNumber": 0.0,
                    "comparisonPCChangeVolatility": 0.2,
                    "comparisonPCChangeUnderlying": 0.1,
                    "comparisonWarningLevel": 0.8,
                    "maxDailyTheoLoss": 0.0,
                    "maxDailyTheoLossPCWarning": 0.8,
                    "greekDelta": 0.0,
                    "greekDeltaWarning": 0.8,
                    "greekVega": 0.0,
                    "greekVegaWarning": 0.8,
                    "greekGamma": 0.0,
                    "greekGammaWarning": 0.8,
                    "greekTheta": 0.0,
                    "greekThetaWarning": 0.8
                },
                "firm": "",
                "parentFirmID": ""
            },
            "metadata": {
                "timestamp": "2025-04-24T19:14:58.7012103Z",
                "requestId": "0HNC3CH5EIF80:00000001"
            }
        },
        "formatters": [],
        "contentTypes": [],
        "statusCode": 200
    }
}
Step 3: User Market Data Selection
This step configures the market data feeds accessible to the user.
GET https://api-sim.t4login.com/admin/v1/users/{USERID}/marketdata
PATCH https://api-sim.t4login.com/admin/v1/users/{USERID}/marketdata
We bill for market data based on the selection made in this step. Therefore these values are not copied from a default or template user.
How to proceed with this step depends on how you plan to assign market data to a user:
- All users get a specific exchange(s) by default.
 - User is presented with an interface to choose.
 
Step 3a: Fixed Market Data Selection
In this case, simply PATCH the same Json for all users.
Request
{
 "updates": [
   {
     "clearingExchange": "CME",
     "marketDataType": "Depth"
   }
 ]
}
Response
{
    "data": {
        "exchangeMarketData": [
            {
                "clearingExchange": "CBOT",
                "description": "CBOT",
                "marketDataType": "None",
                "options": [
                    {
                        "type": "TOB",
                        "description": "Top Of Book",
                        "fee": 3.0,
                        "currency": "USD"
                    },
                    {
                        "type": "Depth",
                        "description": "Depth",
                        "fee": 12.0,
                        "currency": "USD"
                    },
                    {
                        "type": "Delayed",
                        "description": "Delayed",
                        "currency": "USD"
                    }
                ],
                "hasExecutingAccount": true
            },
            {
                "clearingExchange": "CFE",
                "description": "CFE",
                "marketDataType": "None",
                "options": [
                    {
                        "type": "TOB",
                        "description": "Top Of Book",
                        "fee": 8.0,
                        "currency": "USD"
                    },
                    {
                        "type": "Depth",
                        "description": "Depth",
                        "fee": 16.0,
                        "currency": "USD"
                    },
                    {
                        "type": "Delayed",
                        "description": "Delayed",
                        "currency": "USD"
                    }
                ],
                "hasExecutingAccount": true
            },
            {
                "clearingExchange": "CME",
                "description": "CME",
                "marketDataType": "None",
                "options": [
                    {
                        "type": "TOB",
                        "description": "Top Of Book",
                        "fee": 3.0,
                        "currency": "USD"
                    },
                    {
                        "type": "Depth",
                        "description": "Depth",
                        "fee": 12.0,
                        "currency": "USD"
                    },
                    {
                        "type": "Delayed",
                        "description": "Delayed",
                        "currency": "USD"
                    }
                ],
                "hasExecutingAccount": true
            },
             ...            
             
        ],
        "totalCount": 40
    },
    "metadata": {
        "timestamp": "2025-04-24T18:05:55.0110086Z",
        "requestId": "0HNC3B7647GLB:00000007"
    }
}
Step 3d: Dynamic Market Data Selection
Request
{
  // Market data selection configuration
  // Documentation coming soon
}
Step 4: User Signs EULAs
This step completes the user creation process by confirming acceptance of required End User License Agreements.
Request
{
  // EULA acceptance configuration
  // Documentation coming soon
}
User Creation Flowchart
Common Parameters
| Parameter | Description | Type | Required | 
|---|---|---|---|
| username | Unique identifier for the user | String | Yes | 
| account | Trading account identifier | String | Yes | 
| templateUser | Optional user template override | String | No | 
| templateAccount | Optional account template override | String | No | 
| apptype | User market data permissions type | String | Yes | 
Common Response Codes
| Code | Description | 
|---|---|
| 200 | Success | 
| 400 | Bad Request - Check request format | 
| 401 | Unauthorized - Authentication failed | 
| 404 | Not Found - Resource doesn't exist | 
| 500 | Server Error - Contact support | 
Support
For questions, issues, or assistance with the User Creation API, please contact:
- Email: T4.API@plus500.com
 
