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