Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 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. <bootnote> For different user types, you can override the default by using the ''templateUser'' or ''templateAccount'' parameter, allowing unlimited pre-configured user and account defaults. </bootnote> ===== Step 1: Create User Account ===== This endpoint creates a base user profile in the system. ''POST https://api-sim.t4login.com/admin/users'' ==== Request ==== <code> { "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" } </code> ==== Response ==== <code> { "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 } } </code> <bootnote important> Make note of the ''userID'' value in the response. This will be needed for Step 2. </bootnote> ===== 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 ==== <code> { "account": "chadtest13", "accountName": "chadtest13", "templateAccount": "Chad01", "displayName": "Chad Test 13", "accountUserId": "8C6AC430-3292-4C1D-BE98-F0637B64734F" } </code> ==== Response ==== <code> { "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 } } </code> ===== 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 ==== <code> { "updates": [ { "clearingExchange": "CME", "marketDataType": "Depth" } ] } </code> ==== Response ==== <code> { "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" } } </code> ==== 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 ==== <code> { "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" } } </code> ===== 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. <bootnote critical> The user will not be able to log into the T4 system without valid signed EULA document. </bootnote> ==== GET Response ==== <code> { "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" } } </code> ==== POST Request ==== <code> { "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 } </code> ==== Response ==== <code> { "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" } } </code> ==== Request ==== <code> { // EULA acceptance configuration // Documentation coming soon } </code> ===== Support ===== For questions, issues, or assistance with the User Creation API, please contact: * Email: T4.API@plus500.com developers/admin/walktrhough.txt Last modified: 2025/04/24 21:13by 127.0.0.1