Table of Contents

T4 Onboarding API

Introduction

The onboarding API endpoint provides a streamlined method for integrators to create fully functional user accounts in the T4 system with a single request. This endpoint is specifically designed for trading platform vendors who build on top of the T4 backend and handle user onboarding through their own website.

By consolidating the four integration steps (user creation, account creation, market data selection, and EULA acceptance) into a single call, this API significantly simplifies the integration process and reduces development overhead.

API Endpoint

POST https://api.t4login.com/admin/v1/onboarding

Authentication

API requests must include authentication credentials. Contact [email protected] for integration specifics and access credentials.

Request Format

The onboarding request combines all necessary user, account, market data, and EULA information into a single JSON payload:

{
    "User": {
        "username": "[email protected]",
        "password": "SecurePassword123!",
        "firstname": "John",
        "lastname": "Smith",
        "phone": "555-123-4567",
        "email": "[email protected]",
        "street": "123 Main Street",
        "city": "Anytown",
        "county": "Anycounty",
        "state": "IL",
        "postCode": "60001",
        "country": "US",
        "apptype": "NonProfessional"
    },
    "Account": {
        "account": "jsmith01",
        "accountName": "jsmith01",
        "templateAccount": "DefaultTemplate",
        "displayName": "John Smith Account"
    },
    "MarketData": {
        "updates": [{
            "clearingExchange": "DUMMY",
            "marketDataType": "Depth"
        }]
    },
    "Eula": {
        "collectedBy": "",
        "eulaVersion": "2",
        "signatures": [
            {
                "documentName": "LegalEULA",
                "signed": "2025-05-01T10:30:15"
            },
            {
                "documentName": "LegalPP",
                "signed": "2025-05-01T10:30:15"
            },
            {
                "documentName": "LegalMDSA",
                "signed": "2025-05-01T10:30:15"
            },
            {
                "documentName": "LegalUSA",
                "signed": "2025-05-01T10:30:15"
            },
            {
                "documentName": "LegalNPSCF",
                "signed": "2025-05-01T10:30:15"
            },
            {
                "documentName": "CMEInformationLicenseAgreement",
                "signed": "2025-05-01T10:30:15"
            },
            {
                "documentName": "ICESubscriberAgreement",
                "signed": "2025-05-01T10:30:15"
            }
        ]
    }
}

Field Descriptions

User Object

Field Type Description Required
username string Unique username for the user (typically email address) Yes
password string User's password (must meet security requirements) Yes
firstname string User's first name Yes
lastname string User's last name Yes
phone string User's contact phone number Yes
email string User's email address Yes
street string Street address Yes
city string City Yes
county string County Yes
state string State/Province code Yes
postCode string Postal/ZIP code Yes
country string Country code (ISO) Yes
apptype string User type (“Professional” or “NonProfessional”) Yes

Account Object

Field Type Description Required
account string Unique account identifier Yes
accountName string Display name for the account Yes
templateAccount string Template account to base settings on Yes
displayName string User-friendly display name No

MarketData Object

The MarketData object is optional but recommended for most integrations.

Field Type Description Required
updates array Array of exchange data subscriptions No

Each entry in the updates array contains:

Field Type Description Required
clearingExchange string Exchange identifier Yes
marketDataType string Data subscription type (e.g., “Depth”, “TOB”, “Delayed”) Yes

Eula Object

The Eula object is optional but required for a fully functional user account.

Field Type Description Required
collectedBy string Entity collecting the EULA (typically empty string) Yes
eulaVersion string Version of EULA presented to user Yes
signatures array Array of signed document objects Yes

Each signature object contains:

Field Type Description Required
documentName string Identifier for the document Yes
signed string Timestamp when the document was signed (ISO 8601 format) Yes

Response Format

A successful response will include comprehensive information about the created user, account, market data subscriptions, and EULA status:

{
    "result": {
        "value": {
            "data": {
                "user": {
                    "userID": "90E53A07-B293-4805-B848-D91919337D0E",
                    "userName": "[email protected]",
                    "lastname": "Smith",
                    "firstname": "John",
                    "enabled": true,
                    "message": "",
                    "company": "",
                    "phone": "555-123-4567",
                    "email": "[email protected]",
                    "firmID": "2884B215-4A4B-4E9D-A40E-F8212D713E13",
                    "billingRef": "",
                    "street": "123 Main Street",
                    "city": "Anytown",
                    "county": "Anycounty",
                    "state": "IL",
                    "postCode": "60001",
                    "country": "US",
                    "simFirm": "",
                    "simUsername": "",
                    "simLinkedUserID": "",
                    "userCreationDate": "2025-05-15T00:00:00",
                    "appType": "NonProfessional",
                    "cmeMarketDataNetting": "Netting",
                    "trialExpires": "2025-05-29T00:00:00",
                    "iceMarketDataAccount": "",
                    "iceMarketDataParentAccount": "",
                    "euronextMarketDataAccount": "",
                    "euronextMarketDataParentAccount": "",
                    "custOrderHandlingInst": "Electronic",
                    "applications": [
                        {
                            "id": "2B9D2612-7C19-407C-89B4-E813CCD45DD1",
                            "name": "AppName1"
                        },
                        {
                            "id": "030C8C1E-D1FE-4782-81FC-8BC4D13CB122",
                            "name": "AppName2"
                        }
                        // Additional applications omitted for brevity
                    ],
                    "roles": [
                        "TimeEntry",
                        "QueueOrders",
                        "ANTSEditor",
                        "ANTSFastBoard",
                        "MarketProfile",
                        "Strategy",
                        "ModifyOrders",
                        "BasicCharting",
                        "Charting",
                        "ANTS1",
                        "PitTrades",
                        "BillingRetail1",
                        "Trading",
                        "ANTSAccountNet",
                        "StrategyQuotes"
                    ],
                    "accounts": []
                },
                "account": {
                    "accountID": "9526FC9A-0500-4261-8BC9-1FB88F537206",
                    "firmID": "2884B215-4A4B-4E9D-A40E-F8212D713E13",
                    "account": "jsmith01",
                    "accountName": "jsmith01",
                    "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": ""
                },
                "marketData": {
                    "exchangeMarketData": [
                        {
                            "clearingExchange": "DUMMY",
                            "description": "DUMMY",
                            "marketDataType": "Depth",
                            "options": [
                                {
                                    "type": "Depth",
                                    "description": "Depth",
                                    "currency": "USD"
                                },
                                {
                                    "type": "Delayed",
                                    "description": "Delayed",
                                    "currency": "USD"
                                }
                            ],
                            "hasExecutingAccount": true
                        }
                    ],
                    "totalCount": 1
                },
                "eulaSignature": {
                    "collectedBy": "API",
                    "eulaVersion": "2",
                    "signatures": [
                        {
                            "documentName": "LegalEULA",
                            "signed": "2025-05-01T10:30:15"
                        },
                        {
                            "documentName": "LegalPP",
                            "signed": "2025-05-01T10:30:15"
                        },
                        {
                            "documentName": "LegalMDSA",
                            "signed": "2025-05-01T10:30:15"
                        },
                        {
                            "documentName": "LegalUSA",
                            "signed": "2025-05-01T10:30:15"
                        },
                        {
                            "documentName": "LegalNPSCF",
                            "signed": "2025-05-01T10:30:15"
                        },
                        {
                            "documentName": "CMEInformationLicenseAgreement",
                            "signed": "2025-05-01T10:30:15"
                        },
                        {
                            "documentName": "ICESubscriberAgreement",
                            "signed": "2025-05-01T10:30:15"
                        }
                    ]
                }
            },
            "metadata": {
                "timestamp": "2025-05-15T21:58:44.5038392Z",
                "requestId": "0HNCJVEI883I0:00000001"
            }
        },
        "formatters": [],
        "contentTypes": [],
        "statusCode": 200
    }
}

Optional Components

The onboarding endpoint provides flexibility by making certain components optional:

Integrators should discuss their specific requirements with [email protected] to determine which components are necessary for their implementation.

Template Based Provisioning

The onboarding process relies on template users and accounts to streamline configuration:

Important: Properly configuring firm defaults and templates will significantly reduce the amount of customization needed for each new user.

Implementation Notes

User Login Requirements

For a user to successfully log in after onboarding, the following must be complete:

Market Data Billing

Market data subscriptions configured during onboarding will be billed according to the selected options. Consider the following when implementing:

Error Handling

The API returns standard HTTP status codes along with detailed error information:

Detailed error messages are provided in the response body to assist with troubleshooting.

Support

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