====== 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.
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.
''POST https://api-sim.t4login.com/admin/users''
==== Request ====
{
"username": "chad.lowe+test03@plus500.com",
"password": "0ctopus777{",
"firstname": "Test",
"lastname": "User",
"phone": "212-555-0123",
"email": "chad.lowe+test01@plus500.com",
"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": "chad.lowe+test03@plus500.com",
"lastname": "User",
"firstname": "Test",
"enabled": true,
"message": "",
"company": "",
"phone": "212-555-0123",
"email": "chad.lowe+test01@plus500.com",
"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
}
}
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.
''POST http://api-sim.t4login.com/admin/v1/accounts''
==== 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.
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
}
===== Support =====
For questions, issues, or assistance with the User Creation API, please contact:
* Email: T4.API@plus500.com