Table of Contents

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:

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.

POST https://api-sim.t4login.com/admin/users

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.

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:

  1. All users get a specific exchange(s) by default.
  2. 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
}

Support

For questions, issues, or assistance with the User Creation API, please contact: