All API calls in this section are made by the broker’s backend to the cTrader backend.
Method | URL |
---|---|
POST |
/webserv/managers/token |
Creates a manager token required for API authentication. This token does not have an expiration period.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
hashedPassword |
Yes | string | The MD5 of the manager’s password. |
login |
Yes | integer | The unique ID of the manager. |
Output
Key | Data Type | Description |
---|---|---|
webservToken |
string | A long-term token authenticating the manager. |
Request Example
curl -X POST ‘https://HOST:PORT/v2/webserv/managers/token’ -H ‘Accept:application/json’ -H ‘Content-Type: application/json’ -d ‘{"hashedPassword": "0f94e246908667af85916300c57f74b6", "login": 2309}’
Expected Response Status Code
200
Response Example
{
"webservToken": "04d95575-c9af-42fba72e-2f0ce93f01d4"
}
Method | URL |
---|---|
POST |
/oauth2/ctid/create |
Creates a new user via the SSO (OAuth) flow.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
brokerCrmName |
Yes | string | See Section 2.3. |
email |
Yes | string | The user’s email address. |
firstName |
No | string | The user’s first name. The value of this parameter can be used for sending notifications (e.g., ‘Dear {name}’). |
nickName |
No | string | The user’s cTID name. |
preferredLanguage |
No | string | The user’s preferred language. The parameter takes Alpha-2 (ISO 369-2) codes as values. |
If the specified
nickName
is unique, it is set from the request. However, if the specifiednickName
is not unique or invalid (e.g., too long, contains forbidden characters, etc), it is inferred from theuserId
. If anickName
is not specified, it is inferred from the user’s email. If thenickName
from the user’s email already exists, it is inferred from theuserId
.
Output
Key | Data Type | Description |
---|---|---|
userId |
integer | The unique ID of a specific user. |
Request Example
curl -X POST 'https://HOST:PORT/cid/oauth2/ctid/create?token=04d95575-c9af-42fba72e-2f0ce93f01d4' --H 'Content-Type: application/json' --H 'Accept: application/json' -d '{"brokerCrmName": "BESTBROKERCRM", "email": "president@bestbroker.com", "firstName": "Trader", "nickname": "letstrade", "preferredLanguage": "en"}'
Expected Response Status Code
201
Response Example
{
"userId": 10345533
}
HTTP Method | URL |
---|---|
POST |
/webserv/traders |
Creates a new trader entity.
Parameters
No parameters.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
accessRights |
Yes | enum | The access rights of the account. The following values are accepted."FULL_ACCESS" . The account can perform all operations with no restrictions."CLOSE_ONLY" . The account can only close existing positions."NO_TRADING" . The account cannot perform any trading operations."NO_LOGIN" . The account cannot log into cTrader. |
accountType |
Yes | enum | The type of the trading account. The following values are accepted."HEDGED" . The account can open positions in both directions for the same symbol simultaneously."NETTED" . The account can only positions in one directions for a given symbol."SPREAD_BETTING" . The account can perform spread betting operations. |
balance |
Yes | long | The total balance of the new account. This parameter primarily exists for the creation of demo accounts with a non-zero balance. |
brokerName |
Yes | string | A unique name denoting a specific broker (including White Labels). |
depositCurrency |
Yes | string | The name of the currency that the account uses for making deposits and withdrawals. |
groupName |
Yes | string | The name of the group to which the account is assigned. |
hashedPassword |
Yes | string | The MD5 of the account password. |
leverageInCents |
Yes | integer | The total amount of leverage available to the account; is specified in 10^2. E.g., the 1:1 leverage is leverageInCents=100 while the 1:100 leverage is leverageInCents=10000 . |
totalMarginCalculationType |
Yes | enum | The strategy via which the account margin is calculated. The following values are accepted."MAX" . The total margin requirements per symbol are equal to the maximum margin requirements for all positions opened for this symbol."SUM" . The total margin requirements per symbol are equal to the sum of all margin requirements of all positions opened for this symbol."NET" . The total margin requirements per symbol are equal to the difference between the margin requirements for all long positions and all short positions opened for this symbol. |
contactDetails |
No | JSON object | A JSON object containing the trader’s address, phone number, and other details as shown below. |
contactDetails.address |
No | string | The trader’s address of residence. |
contactDetails.city |
No | string | The trader’s city of residence. |
contactDetails.countryId |
No | integer | The identifier the trader’s country of residence. The full list of these identifiers can be accessed here. |
contactDetails.documentId |
No | string | The trader’s unique document ID. |
contactDetails.email |
No | string | The trader’s email address. |
contactDetails.phone |
No | string | The trader’s phone number. |
contactDetails.state |
No | string | The trader’s state of residence. |
contactDetails.zipCode |
No | string | The zip code of the trader’s residence. |
contactDetails.introducingBroker1 |
No | string | A custom identifier of the first-level partner that has introduced this trader. |
contactDetails.introducingBroker2 |
No | string | A custom identifier of the second level-partner that has introduced this trader. |
description |
No | string | The description of the account. |
isLimitedRisk |
No | boolean | The trader’s limited risk (LR) status. LR means the establishment of guaranteed stop losses. If isLimitedRisk=true , LR is enabled, and vice versa. |
lastName |
No | string | The last name of the account holder. |
limitedRiskMarginCalculationStrategy |
No | enum | The margin calculation strategy used for the limited risk account. The following values are accepted."ACCORDING_TO_LEVERAGE" . Margin requirements have to be calculated based on the account leverage."ACCORDING_TO_GSL" . Margin requirements have to be calculated based on the distance between the position open price and the guaranteed stop loss."ACCORDING_TO_GSL_AND_LEVERAGE" . cServer calculates the leverage-based and GSL-based margin requirements, and chooses the larger of the two values. |
maxLeverage |
No | integer | The maximum amount of leverage (in the base currency units) available to the account. Specified in 10^2. |
name |
No | string | The first name of the account holder. |
sendOwnStatement |
No | boolean | A flag determining whether a daily trading statement is sent to the trader. |
sendStatementToBroker |
No | boolean | A flag determining whether a daily account trading statement is sent to the broker under which the account is registered. |
swapFree |
No | boolean | A flag determining whether the account is charged swaps (swapFree=true ) or administrative fees (swapFree=false ). |
Output
For a JSON schema of the output, click here.
Several keys from the request body are repeated in the output, namely accessRights
, accountType
, balance
, brokerName
, contactDetails
, depositCurrency
, description
, groupName
, isLimitedRisk
, lastName
, leverageInCents
, limitedRiskMarginCalculationStrategy
, maxLeverage
, name
, sendOwnStatement
, sendStatementToBroker
, and totalMarginCalculationType
.
Key | Data Type | Description |
---|---|---|
bonus |
integer | The total amount of bonus funds allocated to the account. Subject to moneyDigits . |
equity |
integer | The total amount of equity possessed by the account. Subject to moneyDigits . |
freeMargin |
integer | The amount of free margin available to the account. Subject to moneyDigits . |
cashEquity |
integer | The current amount of funds that the account can withdraw. It is calculated via the following formula: cashEquity = balance + unrealized P&L - management fees , where management fees are all management fees charged by the providers of strategies that the account owner has invested in. Subject to moneyDigits . |
lastUpdateTimestamp |
integer | A timestamp with the date and time of the latest account update. |
login |
integer | The number of a specific trading account. |
moneyDigits |
integer | The number that determines how finance-related values are defined for the account. E.g., if moneyDigits=2 and balance=1234512 , the account balance is 12345.12 in the account deposit currency.Additional details are given in Section 3. |
nonWithdrawableBonus |
integer | The total amount of the non-withdrawable bonus allocated to the account. Subject to moneyDigits . |
registrationTimestamp |
integer | A timestamp with the date and time of account registration. |
swapFree |
boolean | If this parameter equals true, rollover commissions are applied to the account instead of swaps. The reverse applies if the parameter is false. This field is useful for ensuring compliance with Sharia law. |
usedMargin |
integer | The total amount of margin in use by the account. Subject to moneyDigits . |
Request Example
curl -X POST ‘https://HOST:PORT/v2/webserv/traders?token=1dd4ef40-c5b3-61c0-0689-b1b40c97fadc’ -H ‘Accept: application/json’ -H ‘Content-Type: application/json’ -d ‘{"accessRights": "FULL_ACCESS", "accountType": "HEDGED", "balance": 0, "brokerName": "BESTBROKER", "contactDetails": {"address": "Moon", "city": "Lake", "countryId": 8, "documentId": "0123", "email": "president@bestbroker.com", "phone": "+50987654321", "state": "RE", "zipCode": "5500", "introducingBroker1": "CoolPartner", "introducingBroker2": "AnotherCoolPartner"},"depositCurrency": "EUR", "description": "coolDescription", "groupName": "Default", "hashedPassword": "c5678ghf94578ce06iqrs5ag76a62c5ca4", "isLimitedRisk": false, "lastName": "President", "leverageInCents": 1000, "maxLeverage": 100000, "name": "Best", "sendOwnStatement": true, "sendStatementToBroker": true, "totalMarginCalculationType": "MAX"}’
Response Example
{
"accessRights": "FULL_ACCESS",
"accountType": "HEDGED",
"balance": 0,
"bonus": 0,
"cashEquity": 0,
"brokerName": "BESTBROKER",
"contactDetails": {
"address": "Moon",
"city": "Lake",
"countryId": 8,
"documentId": "0123",
"email": "president@bestbroker.com",
"phone": "+50987654321",
"state": "RE",
"zipCode": "5500",
"introducingBroker1": "CoolPartner",
"introducingBroker2": "AnotherCoolPartner"
},
"depositCurrency": "EUR",
"description": "coolDescription",
"equity": 0,
"freeMargin": 0,
"groupName": "Default",
"isLimitedRisk": false,
"lastConnectionTimestamp": 0,
"lastName": "President",
"lastUpdateTimestamp": 0,
"leverageInCents": 1000,
"limitedRiskMarginCalculationStrategy": "ACCORDING_TO_LEVERAGE",
"login": 8673590,
"maxLeverage": 100000,
"moneyDigits": 0,
"name": "Best",
"nonWithdrawableBonus": 0,
"registrationTimestamp": 0,
"sendOwnStatement": true,
"sendStatementToBroker": true,
"swapFree": true,
"totalMarginCalculationType": "MAX",
"usedMargin": 0
}
Expected Status Code
201
HTTP Method | URL |
---|---|
POST |
/ctid/link |
Links a trader entity to a user entity.
Parameters
No parameters.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
traderLogin |
Yes | integer | The number of a specific trading account. |
traderPasswordHash |
Yes | integer | The MD5 of the account password. |
userId |
Yes | integer | The unique identifier of a user entity. |
brokerName |
Yes | string | A unique name denoting a specific broker (including White Labels). |
environmentName |
Yes | string | A unique name of a specific trading environment where the specified traderLogin is registered. |
returnAccountDetails |
No | boolean | A flag that denotes whether the ctidTraderAccountId key is returned in the response to this API call. Set it to true to ensure that the response to this call is not empty. |
Output
Key | Data Type | Description |
---|---|---|
ctidTraderAccountId |
integer | The unique identifier of the linkage between a specific user and one of their trading accounts. |
Request Example
curl -X POST 'https://HOST:PORT/cid/ctid/link?token=1dd4ef40-c5b3-61c0-0689-b1b40c97fadc' -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{"environmentName": "demo", "brokerName": "BESTBROKER", "traderLogin": 9017800, "traderPasswordHash": "0f94e246908667af85916300c57f74b6", "userId": 10333, "returnAccountDetails": true}'
Response Example
{
"ctidTraderAccountId": 90178000
}
Expected Status Code
200
Note that the response body will be empty if
returnAccountDetails
isfalse
.
HTTP Method | URL |
---|---|
POST |
/webserv/traders/{login}/changebalance |
Changes the balance of a trader entity (including allocating/removing credit).
Parameters
Parameter | Parameter Type | Required? | Data Type | Description |
---|---|---|---|---|
login |
path | Yes | integer | The number of a specific trading account. |
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
comment |
No | string | A short note that can be attached to any balance change. This note is not shown to retail clients. |
externalId |
No | string | A number that matches an external identifier of the broker’s choosing. For instance, the value of externalId could be equal to the number of the bank transfer order through which the user chose to make a deposit. |
externalNote |
No | string | A brief comment that can supplement a deposit or a withdrawal. In contrast to comment , this text is displayed to retail clients. |
login |
Yes | integer | The number of a specific trading account. |
preciseAmount |
Yes | double | The precise amount of withdrawn or deposited funds/credit. Specified as a decimal number. For BTC and similar assets, the value of preciseAmount can include as many as eight digits after the decimal point. |
source |
No | string | The designated source of the deposit/withdrawal. |
type |
Yes | string | The desired type of balance change. The following values are accepted."DEPOSIT" . Deposit funds to the trader."WITHDRAW" . Withdraw funds from the trader. "DEPOSIT_NONWITHDRAWABLE_BONUS" . Deposit credit to the trader."WITHDRAW_NONWITHDRAWABLE_BONUS" . Withdraw credit from the trader. |
Note that only positive values are accepted when specifying the
preciseAmount
parameter. The direction of the balance change is regulated entirely by thetype
parameter.
Output
Key | Data Type | Description |
---|---|---|
balanceHistoryId |
integer | The identifier of a balance history entity containing all balance-related transactions for the specified trader. Note that bonus and credit are not included in balanceHistoryId . |
Request Example
curl -X POST 'https://HOST:PORT/v2/webserv/traders/8673590/changebalance?token=1dd4ef40-c5b3-61c0-0689-b1b40c97fadc' -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"comment": "Test deposit", "externalId": "082123301", "externalNote": "New deposit!", "login": 8673590, "preciseAmount": 123.45, "source": "Source One", "type": "DEPOSIT"}'
Output Example
{
"balanceHistoryId": 6340680
}
Expected Status Code
200
Method | URL |
---|---|
PUT |
/oauth2/ctid/referral |
Creates a new partner by linking a partner identifier (a string) from the broker’s backend to an existing user or an existing account on the cTrader backend.
Parameters
No parameters.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
brokerCrmName |
Yes | string | See Section 2.3.. |
partnerId |
Yes | string | The string assigned as a partner identifier to a specific user or an account. |
userId |
No (if the chosen partner is an account) | integer | The unique ID of a specific user. |
ctidTraderAccountId |
No (if the chosen partner is a user) | integer | The unique ID of the linkage between a specific user and one of their trading accounts. |
The request body can include either a
userId
or actidTraderAccountId
depending on the entity to which the partner identifier is assigned. To elaborate,userId
is a mandatory parameter if the identifier is assigned to a user; alternatively,ctidTraderAccountId
is a mandatory parameter if the identifier is assigned to an account.
Request Example
curl -X PUT ‘https://HOST:PORT/cid/oauth2/ctid/referral?token=04d95575-c9af-42fba72e-2f0ce93f01d4’ -H ‘Content-Type: application/json’ -H ‘Accept: application/json’ -d ‘{"brokerCrmName": "BESTBROKERCRM", "ctidTraderAccountId": 9017800, "partnerId": "somePartnerId", "userId": 10345533}’
Expected Response Status Code
200
Method | URL |
---|---|
GET |
oauth2/ctid/referral |
Retrieves the unique partner identifier of a specific partner entity.
Parameters
Parameter | Parameter Type | Required? | Data Type | Description |
---|---|---|---|---|
userId |
query | No (if the partner entity is an account) | integer | The unique ID of a specific user. |
ctidTraderAccountId |
query | No (if the partner entity is a user) | integer | The unique ID of the linkage between a specific user and one of their trading accounts. |
brokerCrmName |
query | Yes | string | See Section 2.3.. |
The request body can include either a
userId
or actidTraderAccountId
depending on the entity to which the partner identifier is assigned. To elaborate,userId
is a mandatory parameter if the identifier is assigned to a user; alternatively,ctidTraderAccountId
is a mandatory parameter if the identifier is assigned to an account.
Output
Key | Data Type | Description |
---|---|---|
ctidTraderAccountId |
integer | The unique ID of the linkage between a specific user and one of their trading accounts. |
userId |
integer | The unique ID of a specific user. |
partnerId |
string | The string assigned as a partner identifier to a specific user or an account. |
Request Example
curl -X GET "https://HOST:PORT/cid/oauth2/ctid/referral?token=token=04d95575-c9af-42fba72e-2f0ce93f01d4?ctidTraderAccountId=9017800&brokerCrmName=BESTBROKERCRM" -H "Accept: application/json"
Expected Response Status Code
200
Response Example
{
"userId": 10345533,
"ctidTraderAccountId": 9017800,
"partnerId":"somePartnerId"
}
Method | URL |
---|---|
DELETE |
oauth2/ctid/referral |
Deletes the partner identifier attached to a specific partner entity.
Parameters
Parameter | Parameter Type | Required? | Data Type | Description |
---|---|---|---|---|
userId |
query | Yes | integer | The unique ID of a specific user. |
ctidTraderAccountId |
query | No | integer | The unique ID of the linkage between a specific user and one of their trading accounts. |
brokerCrmName |
query | Yes | string | See Section 2.3.. |
If ctidTraderAccountId
is unspecified, only a record with an unspecified account will be deleted.
Request Example
curl -X DELETE "https://HOST:PORT/cid/oauth2/ctid/referral?token=token=04d95575-c9af-42fba72e-2f0ce93f01d4?userId=10345533?ctidTraderAccountId=9017800&brokerCrmName=BESTBROKERCRM" -H "Accept: application/json"
Expected Response Status Code
200
Method | URL |
---|---|
PUT |
/oauth2/ctid/inAppControls |
Sets up one or more InApp controls in the form of ribbons.
Parameters
No parameters.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
brokerCrmName |
Yes | string | See Section 2.3. |
userId |
Yes | integer | The ID of the user to whom the created InApp controls will be displayed. |
rules |
Yes | object | An object containing the key types of the created InApp control(s). |
rules.ribbons |
Yes | array | An array containing the main characteristics of the created ribbons. Each ribbon constitutes a separate JSON object. |
rules.ribbons.color |
Yes | string | The six-digit HEX value of the color assigned to a specific ribbon. |
rules.ribbons.title |
Yes | string | The text displayed on the ribbon. |
rules.ribbons.enabled |
Yes | boolean | A boolean value determining whether a ribbon is active (i.e., shown to the user). |
rules.ribbons.closable |
Yes | boolean | A boolean value determining whether the ribbon is closable by the user. Upon subsequent application launches, all closed ribbons will be re-shown to the user. |
rules.ribbons.brokerName |
No | string | The name of a specific broker. The ribbon will only be shown to users whose trading account belongs to this broker. |
rules.ribbons.ctidTraderAccountId |
No | string | The unique ID of the linkage between a specific user and one of their trading accounts. |
rules.ribbons.action |
Yes | object | An object listing the InApp actions that occur when users interact with the ribbon. |
rules.ribbons.action.urlExternal |
No (but only when using in-app URLs) | string | The external URL assigned to the relevant InApp action. Upon interaction, opens a separate external browser window. |
rules.ribbons.action.urlinApp |
No (but only when using external URLs) | string | The in-app URL assigned to the relevant InApp action. Upon interaction, opens an iframe. |
As the
rules.ribbons
array may include several JSON objects (each acting as a unique ribbon), you may combine parameters to create custom sets of InApp controls shown under different circumstances. For instance, you may create ribbons that are only shown to users logged in under a specific account; alternatively, certain ribbons may only be shown to users whose current account belongs to a certain White Label (brokerName
).
There are three possible cases that may arise depending on the parameters specified in the request body.
ctidTraderAccountId
is specified, the ribbon(s) will only be shown to sessions logged in under this specific account.ctidTraderAccountId
is unspecified but a valid brokerName
is specified, and there is no ribbon matching by account, the ribbon(s) will be shown to sessions under this specific brokerName
.ctidTraderAccountId
nor brokerName
is specified and there is no ribbon matching by account or brokerName
, the ribbons(s) will be shown to sessions under the specified brokerCrmName
.You may also choose to send an empty rules
object to immediately clear all ribbons already shown to the sessions specified via other parameters.
Request Example
curl -X PUT ‘https://HOST:PORT/cid/oauth2/ctid/inAppControls?token=04d95575-c9af-42fba72e-2f0ce93f01d4’ -H ‘Content-Type: application/json’ --header ‘Accept: application/json’ -d ‘{"brokerCrmName": "BESTBROKERCRM", "userId": 10345533, "rules": {"ribbons": [{"color": "#ff33ee", "title": "MyRibbon one", "action": {"urlinApp": "https://exampleurl.com"}, "enabled": true, "closable": true, "ctidTraderAccountId": 6530877} {"color": "#33ffee", "title": "MyRibbon two", "action": {"urlExternal": "https://anotherurl.com"}, "enabled": true, "closable": true, "brokerName": "smartBroker"}]}, "userId": 10345533}’
Alternate Example (for clearing ribbons)
curl -X PUT ‘https://HOST:POST/cid/oauth2/ctid/inAppControls?token=04d95575-c9af-42fba72e-2f0ce93f01d4’ -H ‘Content-Type: application/json’ --header ‘Accept: application/json’ -d ‘{“brokerCrmName”: “BESTBROKER”, “userId”: 10335, “rules”: {}}’
Expected Response Status Code
201
Method | URL |
---|---|
PUT |
/oauth2/ctid/changeEmail |
Changes a user’s email in the cTrader backend in the event of an email change in the broker’s CRM system.
Parameters
No parameters.
Request Body
Key | Required? | Data Type | Description |
---|---|---|---|
userId |
Yes | integer | The unique ID of a specific user. |
newEmail |
Yes | string | The user’s new email address. |
brokerCrmName |
Yes | string | See Section 2.3. |
Request Example
curl -X POST ‘https://HOST:PORT/cid/oauth2/ctid/changeEmail?token=04d95575-c9af-42fba72e-2f0ce93f01d4’ -H ‘Accept: application/json’ -H ‘Content-Type: application/json’ -d ‘{"userId": 10345533, "newEmail": "user@gmail.com", "brokerCrmName": "BESTBROKERCRM"}’
Expected Response Status Code
204
Method | URL |
---|---|
GET |
/oauth2/ctid/getUserId |
Gets the userId
of the user with the specified email
.
Parameters
Parameter | Parameter Type | Required? | Data Type | Description |
---|---|---|---|---|
brokerCrmName |
query | Yes | string | See Section 2.3. |
email |
query | Yes | string | The email of the user for which you would like to get userId . |
Output
Key | Data Type | Description |
---|---|---|
userId |
integer | The unique ID of a specific user. |
Request Example
curl -X GET ‘https://HOST:PORT/cid/oauth2/ctid/getUserId?token=04d95575-c9af-42fba72e-2f0ce93f01d4&email=user@gmail.com&brokerCrmName=BESTBROKERCRM’ -H ‘Accept: application/json’ -H ‘Content-Type: application/json’
Expected Status Code
200
Response Example
{
"userId": 10345533
}
Note that if the user with the specified
brokerCrmName
does not exist, you will still receive code200
; however, the response will be empty.
Method | URL |
---|---|
POST |
/oauth2/ctid/logout |
Logs out the user with the specified userId
from all cTrader applications and drop all of the user’s current sessions if they exist.
The primary purpose of this call is to log out a user from cTrader whenever they log out from inside your client area.
Parameters
Parameter | Parameter Type | Required? | Data Type | Description |
---|---|---|---|---|
brokerCrmName |
query | Yes | string | See Section 2.3. |
userId |
query | Yes | integer | The unique ID of a specific user. |
Output
This API call does not produce an output.
Request Example
curl -X GET ‘https://HOST:PORT/cid/oauth2/ctid/logout?token=04d95575-c9af-42fba72e-2f0ce93f01d4&userId=10345533&brokerCrmName=BESTBROKERCRM’ -H ‘Accept: application/json’ -H ‘Content-Type: application/json’
Expected Status Code
200
Method | URL |
---|---|
PUT |
/oauth2/ctid/acceptAgreement |
Confirms user agreement by updating the user’s details.
Parameters
Parameter | Parameter Type | Required? | Data Type | Description |
---|---|---|---|---|
brokerCrmName |
query | Yes | string | See Section 2.3. |
userId |
query | Yes | integer | The unique ID of a specific user. |
Output
This API call does not produce an output.
Request Example
curl -X PUT https://HOST:PORT/cid/oauth2/ctid/acceptAgreement?token=04d95575-c9af-42fba72e-2f0ce93f01d4' -H ‘Accept: application/json’ -H ‘Content-Type: application/json’ -d '{ "brokerCrmName": "BESTBROKERCRM", "userId": 10345533}'
Expected Status Code
200