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 requests must include authentication credentials. Contact [email protected] for integration specifics and access credentials.
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 | 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 |
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 |
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 |
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 |
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 |
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 } }
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.
The onboarding process relies on template users and accounts to streamline configuration:
templateUser
and templateAccount
parameters
Important: Properly configuring firm defaults and templates will significantly reduce the amount of customization needed for each new user.
For a user to successfully log in after onboarding, the following must be complete:
Market data subscriptions configured during onboarding will be billed according to the selected options. Consider the following when implementing:
apptype
field in the User object affects available market data optionsThe API returns standard HTTP status codes along with detailed error information:
Detailed error messages are provided in the response body to assist with troubleshooting.
For questions, issues, or assistance with the Onboarding API, please contact: