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
Call the GET endpoint to get the available options and associated fees in a document that you can build an interface with.
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 4: User Signs EULAs
This step completes the user creation process by confirming acceptance of required End User License Agreements.
GET https://api-sim.t4login.com/admin/v1/users/{USERID}/eula
POST https://api-sim.t4login.com/admin/v1/users/{USERID}/eula
Always GET the lastest EULA document before POST'ing for the user.
The GET response includes a “signatureTemplate”. Use this and add timestamps to POST the EULA for the user.
Important: The user will not be able to log into the T4 system without valid signed EULA document.
GET Response
{
"data": {
"documents": [
{
"documentName": "LegalEULA",
"title": "End User License Agreement",
"url": "https://admin.sim.t4login.com/disclaimers/EULA_Updated_Plus500US_Futures_Technologies_2025-02.pdf"
},
{
"documentName": "LegalPP",
"title": "Privacy Policy",
"url": "https://futures-technologies.plus500.com/privacy-policy/"
},
{
"documentName": "LegalMDSA",
"title": "Market Data Subscription Agreement",
"url": "https://admin.sim.t4login.com/disclaimers/MDSA.html"
},
{
"documentName": "LegalUSA",
"title": "Uniform Subscriber Addendum",
"url": "https://admin.sim.t4login.com/disclaimers/USA.html"
},
{
"documentName": "LegalNPSCF",
"title": "Non-Professional Self-Certification Form",
"url": "https://admin.sim.t4login.com/disclaimers/NPSCF.html",
"nonProfessionalOnly": true
},
{
"documentName": "CMEInformationLicenseAgreement",
"title": "CME Information License Agreement",
"url": "https://admin.sim.t4login.com/disclaimers/CME%20information-license-agreement-september-2024.pdf"
},
{
"documentName": "ICESubscriberAgreement",
"title": "ICE Subscriber Agreement",
"url": "https://admin.sim.t4login.com/disclaimers/ICE_Subscriber_Addendum.pdf"
}
],
"lastUserSignature": {
"signatures": []
},
"signatureTemplate": {
"collectedBy": "",
"eulaVersion": "2",
"signatures": [
{
"documentName": "LegalEULA",
"signed": null
},
{
"documentName": "LegalPP",
"signed": null
},
{
"documentName": "LegalMDSA",
"signed": null
},
{
"documentName": "LegalUSA",
"signed": null
},
{
"documentName": "LegalNPSCF",
"signed": null
},
{
"documentName": "CMEInformationLicenseAgreement",
"signed": null
},
{
"documentName": "ICESubscriberAgreement",
"signed": null
}
]
},
"isNonProfessional": true
},
"metadata": {
"timestamp": "2025-04-24T18:04:18.1844784Z",
"requestId": "0HNC3B7647GLB:00000004"
}
}
POST Request
{
"collectedBy": "",
"eulaVersion": "2",
"signatures": [
{
"documentName": "LegalEULA",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalPP",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalMDSA",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalUSA",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalNPSCF",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "CMEInformationLicenseAgreement",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "ICESubscriberAgreement",
"signed": "2025-04-24T09:17:15"
}
]
},
"isNonProfessional": false
}
Response
{
"data": {
"collectedBy": "API",
"eulaVersion": "2",
"signatures": [
{
"documentName": "LegalEULA",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalPP",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalMDSA",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalUSA",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "LegalNPSCF",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "CMEInformationLicenseAgreement",
"signed": "2025-04-24T09:17:15"
},
{
"documentName": "ICESubscriberAgreement",
"signed": "2025-04-24T09:17:15"
}
]
},
"metadata": {
"timestamp": "2025-04-24T18:04:54.942152Z",
"requestId": "0HNC3B7647GLB:00000006"
}
}
Request
{
// EULA acceptance configuration
// Documentation coming soon
}
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