The Users method group is designed for managing user authentication and security. It allows the client to log in with local credentials, initiate or complete the password recovery process, and refresh an access token using a refresh token.
These methods provide the basic level of user interaction with the API and are used to obtain and maintain an authorized session.
Documentation
/api/v1/users/local/authenticate
POST
Authenticates a user with local credentials (email + password) and establishes a server session.
Upon successful login, the server returns the text OK and sets cookies (session_id, access_token, refresh_token), which are used for subsequent authorized requests.
URL
https://quickex.io/api/v1/users/local/authenticate
Authorization Required
No (public login with local credentials).
Headers
Accept: application/jsonContent-Type: application/json
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | yes | User’s email address. |
password |
string | yes | User’s password. |
browserFingerprint |
string | yes | Unique browser fingerprint for session protection. |
{
"browserFingerprint": "1231231231231231212312312",
"email": "test@test.com",
"password": "testtest"
}
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/local/authenticate' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"browserFingerprint": "1231231231231231212312312",
"email": "test@test.com",
"password": "testtest"
}'
Responses
| Code | Body | Description |
|---|---|---|
201 Created |
OK |
Successful authentication. The server sets cookies with session identifiers and tokens (session_id, access_token, refresh_token). |
400 |
JSON error | Invalid request format or missing required fields. |
401 |
JSON error | Invalid credentials. |
5xx |
— | Server error. Try again later. |
A successful response includes Set-Cookie and session-id headers that establish the user session.
Notes
- Store tokens and cookies only in secure places (HttpOnly/Secure cookies, environment variables, secret vaults).
browserFingerprintmust remain consistent for a specific device/browser.- After login, use the issued cookies to call protected API v1 methods.
Code Sample
curl -X POST \
'https://quickex.io/api/v1/users/local/authenticate' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"browserFingerprint": "1231231231231231212312312",
"email": "test@test.com",
"password": "testtest"
}'Response Example
OkTry it out
Leave empty to use default
Request Body
Headers
Documentation
Initiates the password reset process. A password recovery code will be sent to the specified email address.
This code must be saved for further use with the /api/v1/users/local/reset-password method.
URL
https://quickex.io/api/v1/users/local/request-password-reset
Authorization Required
No (public password reset request).
Headers
Accept: application/jsonContent-Type: application/json
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | yes | User’s email address for which the password reset is requested. |
{
"email": "user@example.com"
}
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/local/request-password-reset' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"email": "user@example.com"
}'
Responses
| Status | Body | Description |
|---|---|---|
200 OK |
{"status": "OK"} |
The request was successful. A password recovery code was sent to the email address. |
400 |
JSON error | Validation error (e.g., an invalid email value was provided). |
5xx |
— | Server error. Please try again later. |
{
"status": "ERR_VALIDATION",
"message": "Validation Exception",
"data": {
"email": {
"isEmail": "email must be an email"
}
}
}
Notes
- After calling this method, the specified email will receive a password recovery code.
- Save this code — it is required for the next step with the
/api/v1/users/local/reset-passwordmethod.- If the email does not exist or is invalid, the server will return a validation error (400).
Code Sample
curl -X POST \
'https://quickex.io/api/v1/users/local/request-password-reset' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"email": "user@example.com"
}'Response Example
OkTry it out
Leave empty to use default
Request Body
Headers
Documentation
Completes the password reset process. The user must provide the recovery code received by email as a result of the
/api/v1/users/local/request-password-reset call, along with the new password.
If successful, the password will be updated and the user will be able to log in with the new credentials.
URL
https://quickex.io/api/v1/users/local/reset-password
Authorization Required
No (recovery code is used).
Headers
Accept: application/jsonContent-Type: application/json
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | yes | Email address for which the password reset is performed. |
resetCode |
string | yes | Recovery code received by email after calling the request-password-reset method. |
password |
string | yes | New password. |
{
"resetCode": "1231231231231231212312312",
"password": "testtest",
"email": "test@example.com"
}
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/local/reset-password' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"resetCode": "1231231231231231212312312",
"password": "testtest",
"email": "test@example.com"
}'
Responses
| Status | Body | Description |
|---|---|---|
200 OK |
{"status":"OK","message":"Password has been reset"} |
Password successfully reset. |
401 |
{"status":"ERR_INVALID_PASSWORD_RESET_CODE","message":"Unauthorized"} |
The recovery code provided is invalid or expired. |
400 |
{"statusCode":400,"error":"Bad Request","message":["email must be an email"]} |
Validation error (e.g., email is in an invalid format). |
5xx |
— | Server error. Please try again later. |
Notes
- This method is used only after calling
/api/v1/users/local/request-password-reset.- The recovery code has a limited validity period.
- After a successful password reset, use the new credentials to log in via
/api/v1/users/local/authenticate.
Code Sample
curl -X POST \
'https://quickex.io/api/v1/users/local/reset-password' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"resetCode": "1231231231231231212312312",
"password": "testtest",
"email": "test@example.com"
}'Response Example
OkTry it out
Leave empty to use default
Request Body
Headers
Documentation
Refreshes the access_token using a refresh_token.
This method is used when the current access_token has expired.
It returns a new access_token, which must be used for subsequent requests to protected endpoints.
URL
https://quickex.io/api/v1/users/authentication/refresh
Authorization Required
Yes (a valid refresh_token passed in cookies is required).
Headers
Accept: application/jsonContent-Type: application/jsonCookie: refresh_token={REFRESH_TOKEN}
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
browserFingerprint |
string | yes | Unique browser fingerprint matching the one provided during authentication. |
{
"browserFingerprint": "1231231231231231212312312"
}
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/authentication/refresh' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--cookie "refresh_token=YOUR_REFRESH_TOKEN" \
-d '{
"browserFingerprint": "1231231231231231212312312"
}'
Responses
| Status | Body | Description |
|---|---|---|
200 OK |
{"access_token":"<NEW_JWT>"} |
A new access_token has been successfully issued. |
401 Unauthorized |
{"status":"ERR_INVALID_REFRESH_TOKEN","message":"Unauthorized"} |
The provided refresh_token is invalid or expired. |
400 Bad Request |
{"statusCode":400,"error":"Bad Request","message":["browserFingerprint must be a string"]} |
Validation error (e.g., incorrect browserFingerprint). |
5xx |
— | Server error. Please try again later. |
Notes
- This method is used only to refresh the
access_token. A newrefresh_tokenis not issued.browserFingerprintmust match the one provided during login via/api/v1/users/local/authenticate.- Always store and transmit the
refresh_tokenonly in secure cookies (HttpOnly,Secure).
Code Sample
curl -X POST \
'https://quickex.io/api/v1/users/authentication/refresh' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--cookie "refresh_token=YOUR_REFRESH_TOKEN" \
-d '{
"browserFingerprint": "1231231231231231212312312"
}'Try it out
Leave empty to use default
Request Body
Headers
Documentation
Returns account data for an authenticated user: ID, email, and a set of permissions.
Used by the client after login to determine available sections/actions in the interface.
URL
https://quickex.io/api/v1/users/account-data
Authorization Required
Yes — a valid session cookie issued by the /api/v1/users/local/authenticate method.
Headers
Accept: application/json- Cookie (e.g.,
session_id=...)
Parameters
None
Request Example (cURL)
curl -X GET \
'https://quickex.io/api/v1/users/account-data' \
-H 'Accept: application/json' \
--cookie "session_id=YOUR_SESSION_ID"
Response Example (200)
{
"userId": 42,
"email": "user@example.com",
"permissions": "USER",
"adminPermissionsScope": {
"ORDERS": { "READ": true, "CONFIGURE": false, "PROCESS": true, "CREATE_LARGE_ADDITIONAL_WITHDRAWALS": false, "ENABLE_MANUAL_PROCESSING": false },
"INSTRUMENTS": { "READ": true, "UPDATE": false },
"PAIRS": { "READ": true, "UPDATE": false },
"BESTCHANGE": { "READ": true, "UPDATE": false },
"USERS": { "READ": true, "UPDATE": false },
"API_KEYS": { "READ": true, "UPDATE": false },
"STATS": { "READ": true },
"AFFILIATES": { "READ": true, "UPDATE": false },
"PLATFORM_FEE_COLLECTION": { "READ": true, "UPDATE": false },
"TRANSLATION": { "READ": true, "UPDATE": false }
}
}
Responses
| Code | Body | Description |
|---|---|---|
200 OK |
JSON (see example) | Account data successfully returned. |
401 Unauthorized |
{"status":"ERR_UNAUTHORIZED","message":"Unauthorized"} |
Session is missing or expired; re-authentication required. |
5xx |
— | Internal server error. |
Notes
adminPermissionsScopedetails subsystem rights (read/update/processing, etc.).- If the frontend does not require administrative rights, only the fields
userId,permissionsmay be used.- To refresh the session, use the method
/api/v1/users/authentication/refresh(if applicable in your flow).
Code Sample
curl -X 'GET' \
'https://quickex.io/api/v1/users/account-data' \
-H 'accept: application/json'
--cookie "access_token=YOUR_TOKEN"Response Example
{
"userId": 0,
"email": "string",
"permissions": "string",
"adminPermissionsScope": {
"ORDERS": {
"READ": true,
"CONFIGURE": false,
"PROCESS": true,
"CREATE_LARGE_ADDITIONAL_WITHDRAWALS": false,
"ENABLE_MANUAL_PROCESSING": false
},
"INSTRUMENTS": {
"READ": true,
"UPDATE": false
},
"PAIRS": {
"READ": true,
"UPDATE": false
},
"BESTCHANGE": {
"READ": true,
"UPDATE": false
},
"USERS": {
"READ": true,
"UPDATE": false
},
"API_KEYS": {
"READ": true,
"UPDATE": false
},
"STATS": {
"READ": true
},
"AFFILIATES": {
"READ": true,
"UPDATE": false
},
"PLATFORM_FEE_COLLECTION": {
"READ": true,
"UPDATE": false
},
"TRANSLATION": {
"READ": true,
"UPDATE": false
}
}
}Try it out
Leave empty to use default
Headers
Documentation
Terminates the current user session.
Used to log out and invalidate active authorization tokens (or cookies).
URL
https://quickex.io/api/v1/users/authentication/logout
Authorization Required
Yes — the user must be authenticated.
Headers
Accept: application/json
Request Body
Not required (an empty body is sent).
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/authentication/logout' \
-H 'Accept: application/json' \
--cookie "session_id=YOUR_SESSION_ID" \
-d ''
Response Example (201)
OK
Responses
| Code | Description |
|---|---|
201 Created |
Logout successfully completed, the current session has been terminated. |
200 OK |
The server may also return a successful 200 response (in JSON format). |
401 Unauthorized |
Attempt to log out without an active session or with invalid tokens. |
Notes
- This method only terminates the current session. If the user is logged in on multiple devices, sessions on other devices will remain active.
- After calling this method, the user must re-authenticate to access private methods.
- If the cookie or token expired before calling this method, the server will return a
401 Unauthorizederror.
Code Sample
curl -X 'POST' \
'https://quickex.io/api/v1/users/authentication/logout' \
-H 'accept: application/json' \
--cookie "access_token=YOUR_TOKEN" \
-d ''Response Example
OKTry it out
Leave empty to use default
Request Body
Headers
Documentation
Generates a new API key for the authenticated user.
The key consists of a pair: publicKey and secretKey, which are used when working with API v2 methods.
Additionally, you can specify a list of trusted IP addresses (whitelist) and the key’s active status.
URL
https://quickex.io/api/v1/users/generate-api-key
Authorization Required
Yes — the method is available only to logged-in users.
Headers
Accept: application/jsonContent-Type: application/json- Session Cookie (
session_id=...)
Request Body (JSON)
{
"name": "Api name / App name",
"whiteListIp": [
"127.0.0.1",
"127.0.0.2"
],
"isActive": true
}
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/generate-api-key' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--cookie "session_id=YOUR_SESSION_ID" \
-d '{
"name": "Api name / App name",
"whiteListIp": ["127.0.0.1", "127.0.0.2"],
"isActive": true
}'
Response Example (200)
{
"apiId": 1,
"name": "Api name / App name",
"publicKey": "pk_123456789",
"secretKey": "sk_987654321",
"whiteListIp": ["127.0.0.1","127.0.0.2"],
"isActive": true,
"createdAt": "2025-08-26 12:16:20"
}
Responses
| Code | Description |
|---|---|
200 OK |
Key successfully created. The response returns an object with publicKey and secretKey. |
401 Unauthorized |
User is not authenticated or the session has expired. |
400 Bad Request |
Input validation error. |
Notes
- Public Key is used to identify the client.
- Secret Key is stored only by the user and is used to sign requests in API v2.
- It is recommended to restrict API key usage by IP (
whiteListIp) for increased security.- If the
secretKeyis lost, it cannot be recovered — a new key must be generated.
Code Sample
curl -X 'POST' \
'https://quickex.io/api/v1/users/generate-api-key' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
--cookie "access_token=YOUR_TOKEN" \
-d '{
"name": "Api name / App name",
"whiteListIp": [
"127.0.0.1",
"127.0.0.2"
],
"isActive": false
}'Try it out
Leave empty to use default
Request Body
Headers
Documentation
Returns a list of all API keys created by the user.
The method allows viewing active and inactive keys, their parameters (name, IP whitelist, status), as well as the creation date.
Used for managing keys in the user’s personal account.
URL
https://quickex.io/api/v1/users/list-api-key
Authorization Required
Yes — the user must be authenticated (session cookie or access token).
Parameters
None
Request Example (cURL)
curl -X GET \
'https://quickex.io/api/v1/users/list-api-key' \
-H 'Accept: application/json' \
--cookie "session_id=YOUR_SESSION_ID"
Response Example (200)
[
{
"apiId": 1,
"name": "Api name / App name",
"publicKey": "pk_123456789",
"whiteListIp": [
"127.0.0.1",
"127.0.0.2"
],
"isActive": true,
"createdAt": "2025-08-26 12:16:20"
}
]
Responses
| Code | Description |
|---|---|
200 OK |
List of keys successfully retrieved. |
401 Unauthorized |
User is not authenticated or the session has expired. |
400 Bad Request |
Input validation error (rare for this request). |
Notes
publicKeyis used in the request headers of API v2.secretKeyis returned only when the key is created via/generate-api-keyand is not shown in the list.whiteListIprestricts the usage of the key to the specified IP addresses only.- To disable or delete a key, separate API key management methods must be used (if available).
Code Sample
curl -X 'GET' \
'https://quickex.io/api/v1/users/list-api-key' \
-H 'accept: application/json'
--cookie "access_token=YOUR_TOKEN"Response Example
[
{
"apiId": 1,
"name": "Api name / App name",
"publicKey": "gdsfdgdsdsgds",
"whiteListIp": [
"127.0.0.1",
"127.0.0.2"
],
"isActive": false,
"createdAt": "2022-12-14 12:16:20"
}
]Try it out
Leave empty to use default
Headers
Documentation
Deletes a previously generated API key.
After deletion, the key becomes invalid and can no longer be used for authenticating requests in API v2.
URL
https://quickex.io/api/v1/users/delete-api-key
Authorization Required
Yes — the method is available only to authenticated users.
Headers
Accept: application/jsonContent-Type: application/json- Session Cookie (
session_id=...)
Request Body (JSON)
{
"apiId": 1
}
Request Example (cURL)
curl -X POST \
'https://quickex.io/api/v1/users/delete-api-key' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--cookie "session_id=YOUR_SESSION_ID" \
-d '{
"apiId": 1
}'
Response Example (200)
true
Responses
| Code | Description |
|---|---|
200 OK |
Key successfully deleted, true is returned. |
401 Unauthorized |
User is not authenticated or the session has expired. |
400 Bad Request |
Input validation error (e.g., invalid apiId provided). |
Notes
- After deletion, the key cannot be restored. To access API v2, a new key must be generated.
- The method only accepts the key identifier (
apiId) obtained from the key list (/api/v1/users/list-api-key).- Deletion is recommended in case of key compromise or when the integration is no longer needed.
Code Sample
curl -X 'POST' \
'https://quickex.io/api/v1/users/delete-api-key' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
--cookie "access_token=YOUR_TOKEN" \
-d '{
"apiId": 1
}'Try it out
Leave empty to use default
Request Body
Headers
Documentation
Returns the current KYC (Know Your Customer) status for the authenticated user.
This method is used to check whether the user has passed identity verification, as well as to obtain the rejection reason if verification was not successful.
URL
https://quickex.io/api/v1/users/kyc/status
Authorization Required
Yes — a valid user session is required.
Headers
Accept: application/json- Session cookie (
access_token=...)
Parameters
None
Request Example (cURL)
curl -X GET \
'https://quickex.io/api/v1/users/kyc/status' \
-H 'Accept: application/json' \
--cookie "access_token=YOUR_TOKEN"
Example Response (200)
{
"status": "PASS",
"rejectReason": "ID_INFO_INVALID"
}
Possible status values
PENDING— document verification in progress.PASS— verification successfully completed.REJECTED— verification rejected.
Responses
| Status | Description |
|---|---|
200 OK |
Returns the KYC status and the rejection reason (if applicable). |
401 Unauthorized |
The user is not authorized or the session has expired. |
400 Bad Request |
Validation error (e.g., invalid session data). |
Notes
- This method only returns the status — document upload for KYC is handled by other methods.
- The
rejectReasonfield is present only when the status isREJECTEDor the verification has been denied.- Status values can be used to display progress in the user dashboard.
Code Sample
curl -X GET \
'https://quickex.io/api/v1/users/kyc/status' \
-H 'Accept: application/json' \
--cookie "access_token=YOUR_TOKEN"Try it out
Leave empty to use default