This is an API available using global user's API KEY.
Every request to the iProxy API must include the user's API KEY in Authorization header as Bearer token:
curl --header 'Authorization: Bearer <user_api_key>'
The API endpoint is: https://iproxy.online/api/console/v1/
Endpoint: GET /api/console/v1/me
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/me
Response: 200: Current user info
{
"id": "user_id",
"username": "user_name",
"email": "[email protected]",
"balance": "15.89",
"display_name": "John Doe",
"telegram": "@username",
"proxy_prefix": "prefix",
"api_key_exists": true
}
Endpoint: POST /api/console/v1/me/update-basic-info
All request fields are optional, min 1 and max 256 chars if specified.
Example:
curl --request POST \
--header "Content-Type: application/json" \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/me/update-basic-info \
-d '{
"display_name": "John Doe",
"telegram": "@username",
"proxy_prefix": "prefix"
}'
Response: 200: User's basic info after update.
{
"id": "<user ID>",
"display_name": "John Doe",
"telegram": "@username",
"proxy_prefix": "prefix"
}
Endpoint: POST /api/console/v1/me/api-key
Example:
curl --request POST \
--url https://iproxy.online/api/console/v1/me/api-key \
--header "Authorization: Bearer <user_api_key>"
Request:
No request body is required.
Response:
200: New API Key
{
"api_key": "<new_api_key_hash>"
}
Endpoint: POST /api/console/v1/connection/{conn_id}/pin-code
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/pin-code
Response: 200: New generated PIN code
{
"pincode": "<generated pin>",
"expires_at": "2025-05-05T05:05:05Z"
}
expires_at is an RFC 3339 timestamp.
Endpoint: POST /api/console/v1/connection/{conn_id}/api-key
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/api-key
Response: 200: New key generated
{
"api_key": "new_connection_api_key"
}
Endpoint: POST /api/console/v1/connection/{conn_id}/buy-new-plan
Description: Purchase a new pricing plan for a connection. This endpoint handles both first-time plan purchases (when connection has no active plan) and plan renewals after expiration (when current plan has expired).
Important: This endpoint does NOT handle plan prolongation before expiration. Use /prolongate-plan for extending active plans before they expire.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/buy-new-plan \
-d '{
"plan_id": "BNyW1yBaln",
"days": 30,
"coupon_code": "PROMODEV20"
}'
Request Body:
| JSON Key | Type | Required | Validation | Description |
|---|---|---|---|---|
| plan_id | string | Yes | Must be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL Baby | The ID of the pricing plan to purchase |
| days | integer | Yes | Min: 1, Max: 360; Must be a multiple of the plan length (for a 30-day plan: 30, 60, 90, etc.) | Number of days to purchase the plan for |
| coupon_code | string | No | Min: 1, Max: 64 chars | Optional coupon code for discount |
Response: 200 OK
{
"active_plan": {
"id": "BNyW1yBaln",
"started_at": "2025-12-05T10:00:00Z",
"expires_at": "2026-01-04T10:00:00Z"
},
"is_coupon_applied": true
}
Status Code 400 is returned if:
plan_id doesn't exist)/change-plan or /prolongate-plan instead)Status Code 500 is returned if:
req_id)Notes:
Endpoint: POST /api/console/v1/connection/{conn_id}/prolongate-plan
Description: Extend the expiration date of an active plan by adding more days. This endpoint calculates the new expiration based on the current expiration date and charges the user's balance accordingly.
Important: This endpoint only works for connections with active plans. To buy a new plan after expiration, use /buy-new-plan. To change to a different plan, use /change-plan.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/prolongate-plan \
-d '{
"active_plan": {
"id": "BNyW1yBaln",
"expires_at": "2025-08-01T04:44:58Z"
},
"coupon_code": "PROMODEV20",
"days": 30
}'
Request Body:
| JSON Key | Type | Required | Validation | Description |
|---|---|---|---|---|
| active_plan | object | Yes | – | Current active plan information for validation |
| active_plan.id | string | Yes | Must be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL Baby | Current active plan ID |
| active_plan.expires_at | string (RFC3339) | Yes | Valid datetime | Current plan expiration timestamp |
| days | integer | Yes | Min: 1, Max: 360; Must be a multiple of the plan length (for a 30-day plan: 30, 60, 90, etc.) | Number of days to prolongate |
| coupon_code | string | No | Min: 1, Max: 64 chars | Optional coupon code for discount; if not provided, uses connection's saved coupon |
Response: 200 OK
{
"is_coupon_applied": true,
"active_plan": {
"id": "BNyW1yBaln",
"started_at": "2025-07-13T04:45:03.26Z",
"expires_at": "2025-08-31T04:44:58Z"
}
}
Status Code 400 is returned if:
Status Code 403 is returned if:
Status Code 200 with message is returned if:
Status Code 500 is returned if:
req_id)Notes:
expires_at timestamp, or to the current time if the plan has already expiredactive_plan object ensures the request operates on the correct plan version (optimistic concurrency control)Endpoint: POST /api/console/v1/connection/{conn_id}/change-plan
Description: Change the pricing plan for a connection with an active plan. The endpoint calculates refund from the remaining time on the current plan and applies it to the new plan. Only upgrades (to more expensive or equal plans) are allowed; downgrades are rejected.
Important: This endpoint only works for connections with active (non-expired) plans.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/change-plan \
-d '{
"active_plan": {
"id": "BNyW1yBaln",
"expires_at": "2025-08-31T01:00:00Z"
},
"plan_id": "M7Fq2RKexi",
"coupon_code": "PROMODEV20"
}'
Request Body:
| JSON Key | Type | Required | Validation | Description |
|---|---|---|---|---|
| plan_id | string | Yes | Must be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL Baby | The ID of the new pricing plan |
| active_plan | object | Required | – | Current active plan information for validation |
| active_plan.id | string | Required | Must be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL Baby | Current active plan ID |
| active_plan.expires_at | string (RFC3339) | Required | Valid datetime | Current plan expiration timestamp |
| coupon_code | string | No | Min: 1, Max: 64 chars | Optional coupon code for discount |
Response: 200 OK
{
"active_plan": {
"id": "M7Fq2RKexi",
"started_at": "2025-12-05T10:55:10.913Z",
"expires_at": "2026-01-04T10:55:10.913Z"
},
"coupon_code": "PROMODEV20",
"is_coupon_applied": true
}
Status Code 400 is returned if:
/buy-new-plan instead)/buy-new-plan instead)plan_id doesn't exist)Status Code 500 is returned if:
Notes:
Endpoint: POST /api/console/v1/connection
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection \
-d '{
"name": "connection_name",
"description": "connection_description (optional)",
"prolongation_enabled": true,
"country": "server’s 2-letter country code", // for example: us
"city": "server’s city code",
"socks5_udp": true, // require socks5_udp support on selected server
"server_id": "server_id" // only for vip servers, mutually exclusive with city+country and socks5_udp
}'
Response: 201: Created
{
"id": "created_connection_id",
"country": "server’s country code",
"city": "server’s city",
"server_id": "server_id"
}
Endpoint: GET /api/console/v1/connection/{conn_id}
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}
Response: 200: OK
{
"app_data": {
"agent_setup_complete": false,
"app_id": "com.iproxy.android",
"app_version": "575",
"app_version_patch": "0",
"build_number": "57500",
"device_info": {
"android_version": "16",
"battery": {
"health": "overheat",
"is_charging": true,
"level": 80,
"temperature": 31,
"voltage": 4230
},
"ip_public": {
"ipv4": "1.2.3.4",
"updated_at": "2025-09-05T12:17:34.963Z"
},
"is_root": false,
"language": "en",
"manufacturer": "Google",
"memory": {
"available_mb": 3096,
"heap_free_mb": 23,
"heap_max_mb": 512,
"heap_total_mb": 49,
"is_low": false,
"total_mb": 7558
},
"mobile_data_always_on": true,
"model": "Pixel 8a",
"network_operator_mobile": "MEO",
"network_type_default": "Ethernet",
"network_types": [
"5G (VPN)",
"5G (Ethernet)",
"5G (MOBILE)"
],
"owner_mode_enabled": false,
"ready_to_change_fingerprint": false,
"system_device_id": "1232342131231",
"system_fingerprint": "24235324543534523",
"timezone": {
"id": "Europe/Berlin",
"offset_minutes": 120
},
"voice_assist_configured": true
},
"installation_id": "ac4c1af1-3424-3124-a53e-34234234",
"last_activity_at": "2025-09-05T09:37:39.376Z",
"metrics_updated_at": "2025-08-25T15:16:18.924Z",
"ready_to_change_ip": true,
"wifi_split_enabled": true
},
"basic_info": {
"api_key_exists": false,
"c_fqdn": "b123324qv.cn.fxdx.in",
"created_at": "2025-08-11T17:47:30.67Z",
"description": "",
"created_during_onboarding": false,
"name": "pixel8",
"server_geo": {
"city": "fra",
"country": "de"
},
"server_id": "2132312",
"server_name": "s703",
"socks5_udp": false,
"updated_at": "2025-09-05T09:37:39.411Z",
"user_id": "34235324",
"busy_by": "{user email}"
},
"id": "3534543",
"plan_info": {
"active_plan": {
"expires_at": "2025-09-10T17:47:49.393Z",
"id": "BNyW1yBaln",
"started_at": "2025-08-11T17:47:49.393Z"
},
"coupon_code": "STUFFTEST100",
"features": {
"max_ip_links_per_connection": 15,
"max_ovpn_access_per_connection": 100,
"max_proxy_access_per_connection": 15
}
},
"settings": {
"app_restart_interval_minutes": 0,
"connection_refresh_interval_minutes": 0,
"dns": [],
"ip_change_airplane_mode_time_seconds": 30,
"ip_change_enabled": true,
"ip_change_interval_minutes": 10,
"ip_change_wait_unique": false,
"ip_change_wait_unique_attempts": 0,
"ip_change_wait_unique_lookbehind_minutes": 0,
"low_battery_reboot_threshold": 0,
"macros_url": "",
"no_network_airplane_toggle_timeout_seconds": 0,
"no_network_reboot_timeout_seconds": 0,
"no_wifi_connection_reboot_timeout_seconds": 0,
"no_wifi_inet_disable_wifi_timeout_seconds": 0,
"prolongation_enabled": true,
"reboot_cron_string": "",
"tariff_notify_hours_before_expired": [
72,
48,
24,
3
],
"tcp_fingerprint": "",
"telegram_change_ip_notification_enabled": false,
"telegram_status_notification_enabled": true
},
"shared_users": []
}
Endpoint: GET /api/console/v1/connection
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection
Response: 200: OK
{
"connections": [
{
"app_data": {
"agent_setup_complete": false,
"app_id": "com.iproxy.android",
"app_version": "575",
"app_version_patch": "0",
"build_number": "57500",
"device_info": {
"android_version": "16",
"battery": {
"health": "overheat",
"is_charging": true,
"level": 80,
"temperature": 31,
"voltage": 4230
},
"ip_public": {
"ipv4": "1.2.3.4",
"updated_at": "2025-09-05T12:17:34.963Z"
},
"is_root": false,
"language": "en",
"manufacturer": "Google",
"memory": {
"available_mb": 3096,
"heap_free_mb": 23,
"heap_max_mb": 512,
"heap_total_mb": 49,
"is_low": false,
"total_mb": 7558
},
"mobile_data_always_on": true,
"model": "Pixel 8a",
"network_operator_mobile": "MEO",
"network_type_default": "Ethernet",
"network_types": [
"5G (VPN)",
"5G (Ethernet)",
"5G (MOBILE)"
],
"owner_mode_enabled": false,
"ready_to_change_fingerprint": false,
"system_device_id": "1232342131231",
"system_fingerprint": "24235324543534523",
"timezone": {
"id": "Europe/Berlin",
"offset_minutes": 120
},
"voice_assist_configured": true
},
"installation_id": "ac4c1af1-3424-3124-a53e-34234234",
"last_activity_at": "2025-09-05T09:37:39.376Z",
"metrics_updated_at": "2025-08-25T15:16:18.924Z",
"ready_to_change_ip": true,
"wifi_split_enabled": true
},
"basic_info": {
"api_key_exists": false,
"c_fqdn": "b123324qv.cn.fxdx.in",
"created_at": "2025-08-11T17:47:30.67Z",
"description": "",
"is_onboarding": false,
"name": "pixel8",
"server_geo": {
"city": "fra",
"country": "de"
},
"server_id": "2132312",
"updated_at": "2025-09-05T09:37:39.411Z",
"user_id": "34235324",
"busy_by": "{user email}"
},
"id": "3534543",
"plan_info": {
"active_plan": {
"expires_at": "2025-09-10T17:47:49.393Z",
"id": "BNyW1yBaln",
"started_at": "2025-08-11T17:47:49.393Z"
},
"coupon_code": "STUFFTEST100",
"features": {
"max_ip_links_per_connection": 15,
"max_ovpn_access_per_connection": 100,
"max_proxy_access_per_connection": 15
}
},
"settings": {
"app_restart_interval_minutes": 0,
"connection_refresh_interval_minutes": 0,
"dns": [],
"ip_change_airplane_mode_time_seconds": 30,
"ip_change_enabled": true,
"ip_change_interval_minutes": 10,
"ip_change_wait_unique": false,
"ip_change_wait_unique_attempts": 0,
"ip_change_wait_unique_lookbehind_minutes": 0,
"low_battery_reboot_threshold": 0,
"macros_url": "",
"no_network_airplane_toggle_timeout_seconds": 0,
"no_network_reboot_timeout_seconds": 0,
"no_wifi_connection_reboot_timeout_seconds": 0,
"no_wifi_inet_disable_wifi_timeout_seconds": 0,
"prolongation_enabled": true,
"reboot_cron_string": "",
"tariff_notify_hours_before_expired": [
72,
48,
24,
3
],
"tcp_fingerprint": "",
"telegram_change_ip_notification_enabled": false,
"telegram_status_notification_enabled": true
},
"shared_users": []
}
]
}
Endpoint: POST /api/console/v1/connection/{conn_id}/update-basic-info
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/update-basic-info \
-d '{
"name": "new_name",
"description": "new_description"
}'
Response: 200: OK
{
"id": "connection_id",
"name": "new_name",
"description": "new_description"
}
Endpoint: POST /api/console/v1/connection/{conn_id}/update-settings
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/update-settings \
-d '{
"prolongation_enabled": false,
"dns": ["1.1.1.1"],
"telegram_change_ip_notification_enabled": false,
"telegram_status_notification_enabled": true,
"reboot_cron_string": "30 */3 * * *",
"low_battery_reboot_threshold": 0,
"no_network_reboot_timeout_seconds": 0,
"ip_change_airplane_mode_time_seconds": 0,
"no_network_airplane_toggle_timeout_seconds": 0,
"tariff_notify_hours_before_expired": [2, 12, 48],
"no_wifi_inet_disable_wifi_timeout_seconds": 0,
"no_wifi_connection_reboot_timeout_seconds": 0,
"tcp_fingerprint": "Win10",
"ip_change_wait_unique": false,
"ip_change_wait_unique_attempts": 0,
"ip_change_wait_unique_lookbehind_minutes": 0,
"ip_change_enabled": false,
"ip_change_interval_minutes": 0,
"macros_url": "https://example.com",
"app_restart_interval_minutes": 0,
"connection_refresh_interval_minutes": 0
}'
You only need to send the fields you want to update. The current values of the fields can be retrieved via a GET request.
| JSON Key | Type | Validation | Description |
|---|---|---|---|
prolongation_enabled | bool | Enables automatic prolongation payments. | |
dns | list of string | Each entry must be a valid IP address (e.g., Cloudflare ["1.1.1.1"], Google ["8.8.8.8"], or custom). Send an empty array to clear the list. | Sets Global DNS. |
telegram_change_ip_notification_enabled | bool | Sends Telegram alerts when the external IP changes. | |
telegram_status_notification_enabled | bool | Sends Telegram alerts for status changes. | |
reboot_cron_string | string | Cron expression. Send an empty string to disable. | Enables scheduled reboots. |
low_battery_reboot_threshold | float | 0 ≤ value ≤ 95. Send 0 to disable. | Reboots the device if the battery level drops below the specified percentage. |
no_network_reboot_timeout_seconds | int | 0–3600 seconds. Send 0 to disable. | Reboots the device if proxies are disconnected for the specified duration. |
ip_change_airplane_mode_time_seconds | int | 0–3600 seconds. Send 0 to disable. | Sets minimum time in Airplane Mode to change IP. |
no_network_airplane_toggle_timeout_seconds | int | 0–3600 seconds. Send 0 to disable. | Toggles Airplane Mode if the mobile network is idle for more than the specified timeout. |
tariff_notify_hours_before_expired | list of int | Send an empty array to clear all notifications. | Enables payment notifications. |
no_wifi_inet_disable_wifi_timeout_seconds | int | 0–3600 seconds. Send 0 to disable. | Disables Wi-Fi if no internet is detected over Wi-Fi for the specified timeout. |
no_wifi_connection_reboot_timeout_seconds | int | 0–40320 seconds (up to 7 days). Send 0 to disable. | Enables automatic Wi-Fi reconnection after the specified timeout. |
tcp_fingerprint | string | Must be one of: WinXP, Win78, Win10, Win11, WinNT, Nintendo, FreeBSD, FreeBSD9, MacOS, iOS. Send an empty string to disable. | Sets the device fingerprint. |
ip_change_wait_unique | bool | Enables unique IP assignment based on history. | |
ip_change_wait_unique_attempts | int | 0–10. Send 0 to disable. | Maximum number of attempts to acquire a unique IP. |
ip_change_wait_unique_lookbehind_minutes | int | 0–64800 minutes (up to 45 days). Send 0 to disable. | IP history time window for uniqueness. |
ip_change_enabled | bool | Master switch for the IP change engine. | |
ip_change_interval_minutes | int | 0–1439 minutes (up to 24 hours). Send 0 to disable. | Minimum time between IP changes. |
macros_url | string | Must be a valid URL. Send an empty string to disable. | Webhook URL for MacroDroid integration. |
app_restart_interval_minutes | int | Sets the interval (in minutes) for automatic app restarts. | |
connection_refresh_interval_minutes | int | Forces a connection refresh after the specified interval (in minutes). |
Response: 200: OK
{
"id": "{conn_id}",
"prolongation_enabled": false,
"dns": ["1.1.1.1"],
"telegram_change_ip_notification_enabled": false,
"telegram_status_notification_enabled": true,
"reboot_cron_string": "30 */3 * * *",
"low_battery_reboot_threshold": 0,
"no_network_reboot_timeout_seconds": 0,
"ip_change_airplane_mode_time_seconds": 0,
"no_network_airplane_toggle_timeout_seconds": 0,
"tariff_notify_hours_before_expired": [
2,
12,
48
],
"no_wifi_inet_disable_wifi_timeout_seconds": 0,
"no_wifi_connection_reboot_timeout_seconds": 0,
"tcp_fingerprint": "Win10",
"ip_change_wait_unique": false,
"ip_change_wait_unique_attempts": 0,
"ip_change_wait_unique_lookbehind_minutes": 0,
"ip_change_enabled": false,
"ip_change_interval_minutes": 0,
"macros_url": "https://example.com",
"app_restart_interval_minutes": 0,
"connection_refresh_interval_minutes": 0
}
Only for connection without an active plan. If the connection has an active plan, use endpoint
/recreate-connection.
Endpoint: DELETE /api/console/v1/connection/{conn_id}
Example:
curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id} \
-d '{
"reason": "other reason to delete"
}'
Allowed reason values:
"does_not_need" — no longer needed"short_period" — used only for a short period"switch_server" — switching to another server"technical_issues" — technical problems"mistake" — connection was created by mistake"..." — any custom reason, for example: "duplicate connection blabla"Response: 200: OK
{
"id": "deleted_connection_id"
}
Endpoint: POST /api/console/v1/recreate-connection
Example:
curl --request POST \
--url https://iproxy.online/api/console/v1/recreate-connection \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
-d '{
"connection_id": "",
"name": "connection_name",
"description": "connection_description (optional)",
"prolongation_enabled": true,
"country": "server’s 2-letter country code", // for example: us
"city": "server’s city code",
"socks5_udp": true, // require socks5_udp support on selected server
"server_id": "server_id" // only for vip servers, mutually exclusive with city+country and socks5_udp
}'
Response: 201: OK
{
"id": "new_connection_id"
}
Endpoint: GET /api/console/v1/connection-status
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection-status
Response: 200: OK
{
"connections": [
{
"id": "{conn_id}",
"online_status": "online|offline|nodata|flapping|unpaid", // now offline == nodata
"online_updated_at": "2025-07-11T10:58:51.42Z", // unless nodata
"ipv4": "127.0.0.1", // optional
"ipv6": "::1", // optional
"ip_updated_at": "2025-07-11T10:58:51.42Z", // optional
"battery_level": 98 // percentage, optional
}
]
}
Endpoint: /api/console/v1/connection/{connection_id}/command-push
Example:
curl --request POST \
--url https://iproxy.online/api/console/v1/connection/{connection_id}/command-push \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
-d '{"action":"<command_name>", "<command_name>_params": {}}'
Allowed actions:
change_connectionchangeipdebug_reportfind_my_devicefix_lterefresh_fingerprintrefreshrebootspeed_testtoggle_proxyupgrade_appupload_logsActions with params:
toggle_proxy_params:
enabled: boolchange_connection_params:
connection_id: stringResponse: 200:
{
"message": "{action} command has been sent"
}
Endpoint: GET /api/console/v1/connection/{conn_id}/sms-history
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/sms-history
Response: 200: OK
{
"sms_messages": [
{
"id": "sms_id",
"message": "Example message",
"from": "Somebody",
"from_contact": "Mike (may be empty)",
"created_at": "2025-06-01T04:24:48Z"
}
]
}
Endpoint: POST /api/console/v1/connection/{conn_id}/team-access/modify
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/team-access/modify \
-d '{
"email": "[email protected]",
"permissions": {
"open_vpn_create": true,
"proxy_create": true,
"settings_edit": true
}
}'
Response: 200: OK
{
"email": "[email protected]",
"permissions": {
"open_vpn_create": false,
"open_vpn_view": false,
"open_vpn_edit": false,
"open_vpn_remove": false,
"proxy_create": false,
"proxy_edit": false,
"proxy_remove": false,
"proxy_view": false,
"action_link_create": false,
"action_link_view": false,
"action_link_remove": false,
"authorization_pin_create": false,
"basic_info_edit": false,
"api_key_create": false,
"team_manage": false,
"settings_edit": false,
"connection_control": false,
"connection_change_tariff": false,
"connection_remove": false,
"connection_payment": false,
"sms_control": false,
"statistics_and_history_view": false,
"connection_reserve": false,
"connection_release": false
}
}
You only need to send the fields you want to update. The current values of the fields can be retrieved via a GET request.
| JSON Key | Type | Title | Description |
|---|---|---|---|
open_vpn_create | bool | Create OpenVPN config | Create and download a new OpenVPN configuration (.ovpn) for this connection; may generate client certificates/keys. |
open_vpn_view | bool | View OpenVPN config | View and download existing OpenVPN configurations associated with this connection. |
open_vpn_edit | bool | Edit OpenVPN config | Modify OpenVPN parameters (e.g., server, cipher/DNS/routes) and optionally rotate/reissue client keys. |
open_vpn_remove | bool | Remove OpenVPN config | Delete an existing OpenVPN configuration and revoke its client keys to prevent further use. |
proxy_create | bool | Create proxy access | Create new proxy endpoints/credentials (HTTP(S)/SOCKS), set port, rotation rules, and IP whitelist/binding. |
proxy_edit | bool | Edit proxy access | Change settings of existing proxy endpoints (credentials, rotation/limits, ports, whitelists). |
proxy_remove | bool | Remove proxy access | Delete proxy endpoints/credentials and immediately revoke access. |
proxy_view | bool | View proxy access | List and view proxy endpoints and their credentials (host:port, username/password) and status. |
action_link_create | bool | Create action link | Generate one-time or expiring links that trigger predefined actions (e.g., rotate IP, start/stop connection); configure scope and expiry. |
action_link_view | bool | View action links | View existing action links, including status, usage limits, and expiration. |
action_link_remove | bool | Remove action link | Revoke/delete action links so they can no longer be used. |
authorization_pin_create | bool | View authorization PIN | Generate and display a short-lived authorization PIN used to confirm sensitive actions or device pairing. |
basic_info_edit | bool | Edit basic information | Edit non-sensitive connection metadata such as name, labels/tags, and notes/description. |
api_key_create | bool | Create API key for connection | Create and display a new API key/secret for programmatic access; can be viewed at creation and revoked later. |
team_manage | bool | Manage team | Invite/remove members and assign roles/permissions for this connection/workspace. |
settings_edit | bool | Edit connection settings | Change technical connection settings (auth mode, allowed IPs/whitelist, rotation rules, ports, DNS/timeouts). |
connection_control | bool | Control connection | Start/stop/restart the connection, rotate IP, or trigger device reconnect. |
connection_change_tariff | bool | Change tariff plan | Upgrade/downgrade the tariff plan for this connection; affects limits, pricing, and available features. |
connection_remove | bool | Remove connection | Permanently delete the connection and related resources (proxies, configs); cannot be undone. |
connection_payment | bool | Pay for connection | Always false, can`t be changed. |
sms_control | bool | Manage SMS | Send/receive SMS via the device, view inbox, set forwarding/auto-reply rules, and delete messages. |
statistics_and_history_view | bool | View statistics and IP history | Read-only access to usage analytics, session logs, and IP change/history; export allowed where available. |
connection_reserve | bool | Reserve a connection | Allows requests to /reserve endpoint. |
connection_release | bool | Release a connection | Allows requests to /release endpoint. Usually should be set to false. |
Endpoint: POST /api/console/v1/connection/{conn_id}/team-access/remove
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/team-access/remove \
-d '{
"email": "[email protected]"
}'
Response: 200: OK
{
"email": "[email protected]"
}
This endpoint reserves a connection for the calling user. Once reserved, the user can create proxies and VPN accesses within that connection. The reservation is denied if the connection is already reserved by someone else.
Important: the endpoint does not revoke permissions from other users; it only extends permissions for the caller. For proper access control, all users should only have the connection_reserve permission by default.
Endpoint: POST /api/console/v1/connection/{conn_id}/reserve
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/reserve \
-d '{
"expires_at": "2025-12-05T20:11:51.388Z"
}'
expires_at is an RFC 3339 timestamp (reservation expiration).
Response: 200: OK
{
"id": "reserved_connection_id"
}
This endpoint releases a previously reserved connection. When called, it removes all proxies and VPN accesses created within the connection and restores the permissions of the user who reserved the connection to their original state.
Endpoint: POST /api/console/v1/connection/{conn_id}/release
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/release \
-d ''
Response: 200: OK
{
"id": "reserved_connection_id"
}
Endpoint: GET /api/console/v1/connection/{conn_id}/traffic/by-day
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connection/{conn_id}/traffic/by-day?from=2025-07-01T00%3A00%3A00Z&to=2025-08-01T03%3A00%3A00%2B03%3A00&timezone=Europe/Lisbon'
from and to query parameters should be URL-encoded RFC 3339 timestamps.
timezone optional query parameter should be a valid timezone. Invalid and empty values are defaulted to UTC.
Response: 200: Traffic stats for the requested period
{
"total_in_bytes": 1300000, // Inbound traffic in bytes
"total_out_bytes": 1000000, // Outbound traffic in bytes
"daily_stats": [
{
"date": "2025-03-31T00:00:00Z",
"in_bytes": 1000, // Inbound traffic for the day in bytes
"out_bytes": 1000 // Outbound traffic for the day in bytes
}
]
}
date is an RFC 3339 timestamp.
Endpoint: GET /api/console/v1/connection/{conn_id}/traffic/by-hour-port
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connection/{conn_id}/traffic/by-hour-port?from=2025-07-01T00%3A00%3A00Z&to=2025-08-02T03%3A00%3A00%2B03%3A00'
from and to query parameters should be URL-encoded RFC 3339 timestamps.
Response: 200: Traffic stats for the requested period
{
"port_stats": [
{
"port": "20314",
"total_in_bytes": 1300000, // Inbound traffic in bytes
"total_out_bytes": 1000000, // Outbound traffic in bytes
"hourly_stats": [
{
"date": "2025-03-01T14:00:00Z",
"in_bytes": 1000, // Inbound traffic for the hour in bytes
"out_bytes": 1000 // Outbound traffic for the hour in bytes
}
]
}
]
}
date is an RFC 3339 timestamp.
Perfect, adjusted both fragments accordingly 👇
Endpoint: GET /api/console/v1/connection/{conn_id}/uptime
Description: Returns uptime data in 5-minute buckets for the selected connection.
Each item represents the aggregated status for the 5-minute period ending at date.
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url "https://iproxy.online/api/console/v1/connection/{conn_id}/uptime?from=2025-12-05T00%3A00%3A00Z&to=2025-12-06T00%3A00%3A00Z"
from and to query parameters should be URL-encoded RFC 3339 timestamps.
Response: 200: Uptime snapshots for the requested period
{
"uptime": [
{
"date": "2025-12-05T19:45:00Z",
"status": "DOWN" // aggregated status for the 5-minute period ending at this time
},
{
"date": "2025-12-05T19:50:00Z",
"status": "UP" // aggregated status for the 5-minute period ending at this time
}
// ...
]
}
status is a string indicator (for example "UP" or "DOWN") for the full 5-minute interval ending at date, not just a single moment.
Endpoint: GET /api/console/v1/connection/{conn_id}/uptime-stats
Description: Returns 5-minute uptime status buckets (including “nodata” and “flapping”) for the selected connection.
Each item represents the aggregated status for the 5-minute period ending at date.
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url "https://iproxy.online/api/console/v1/connection/{conn_id}/uptime-stats?from=2025-12-05T00%3A00%3A00Z&to=2025-12-06T00%3A00%3A00Z"
from and to query parameters should be URL-encoded RFC 3339 timestamps.
Response: 200: Uptime status buckets for the requested period
{
"uptime_stats": [
{
"date": "2025-12-05T00:00:00Z",
"status": "nodata" // no data collected in the 5-minute period ending at this time
},
{
"date": "2025-12-05T19:45:00Z",
"status": "flapping" // unstable state during the 5-minute period ending at this time
},
{
"date": "2025-12-05T20:00:00Z",
"status": "online" // connection was online during the 5-minute period ending at this time
}
// ...
]
}
Known status values (aggregated over each 5-minute bucket ending at date):
"nodata" – no monitoring data in this 5-minute period"flapping" – unstable / frequently changing state during this period"online" – connection is online during this period"offline" – connection is offline during this periodEndpoint: GET /api/console/v1/connection/{conn_id}/ip-history
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connection/{conn_id}/ip-history?from=2025-03-01T00%3A00%3A00Z&to=2025-03-02T03%3A00%3A00%2B03%3A00'
from and to query parameters should be URL-encoded RFC 3339 timestamps.
Response: 200: IP history for the requested period
{
"ip_history": [
{
"date": "2025-03-01T14:00:00Z",
"ipv4": "127.0.0.1",
"ipv6": "::1"
}
]
}
date is an RFC 3339 timestamp.
Endpoint: POST /api/console/v1/connection/{conn_id}/actionlinks
Request Body:
{
"action": "reboot", // "reboot" or "changeip"
"comment": "link for client AAAA" // optional
}
action string parameter is one of [reboot changeip]
comment string is an optional parameter.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/actionlinks \
-d '{
"action": "changeip",
"comment": "link for client AAAA"
}'
Response: 201: A link created
{
"id": "xyzXYZ"
}
Endpoint: GET /api/console/v1/connection/{conn_id}/actionlinks
Optional query parameter:
action is one of [reboot changeip]
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url "https://iproxy.online/api/console/v1/connection/{conn_id}/actionlinks"
Response: 200: List of links retrieved
{
"action_links": [
{
"id": "xyzXYZ",
"link": "https://i.fxdx.in/actionlinks/do/changeip/xyzXYZ",
"action": "changeip",
"connection_id": "abcdABCD",
"comment": "changeip link for client AAAA",
"created_at": "2025-03-19T13:06:30Z"
},
{
"id": "xyzXYZZ",
"link": "https://i.fxdx.in/actionlinks/do/reboot/xyzXYZZ",
"action": "reboot",
"connection_id": "abcdABCD",
"comment": "reboot link for client AAAA",
"created_at": "2025-03-19T13:08:30Z"
}
]
}
created_at is an RFC 3339 timestamp.
Endpoint: GET /api/console/v1/actionlinks
Optional query parameter:
action is one of [reboot changeip]
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url "https://iproxy.online/api/console/v1/actionlinks"
Response: 200: List of links retrieved
{
"action_links": [
{
"id": "xyzXYZ",
"link": "https://i.fxdx.in/actionlinks/do/reboot/xyzXYZ",
"action": "reboot",
"connection_id": "abcdABCD",
"comment": "link for client AAAA",
"created_at": "2025-03-19T13:06:30Z"
}
]
}
created_at is an RFC 3339 timestamp.
Endpoint: DELETE /api/console/v1/connection/{conn_id}/actionlinks/{link_id}
Example:
curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/actionlinks/{link_id}
Response: 200 OK
{
"id": "xyzXYZ"
}
Note for better usability:
reboot action!Endpoint: GET https://i.fxdx.in/actionlinks/do/{action}/{link_id}
Example:
curl --request GET \
--url https://i.fxdx.in/actionlinks/do/{action}/{link_id}
Response: 200 OK
{
"message": "{action} command has been sent"
}
Endpoint: POST /api/console/v1/connection/{conn_id}/proxy-access
Request Body:
{
"listen_service": "http", // http or socks5
"auth_type": "userpass", // userpass or noauth
"auth": { // optional, will be generated
"login": "proxy_login",
"password": "proxy_pass"
},
"description": "new proxy description",
"acl_inbound_policy": "deny_except", // optional, required only if auth_type: noauth
"acl_inbound_ips": ["127.0.0.1"], // optional IP ACL, non-empty; required only if acl_inbound_policy is set
"expires_at": "2026-01-01T01:01:01Z" // optional date of proxy expiry
}
expires_at is an RFC 3339 timestamp.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/proxy-access \
-d '{
"listen_service": "socks5",
"auth_type": "userpass",
"description": "new proxy description"
}'
Response: 201: A proxy access created
{
"id": "2CiQPfoWcJ",
"connection_id": "2W1IlyssyF",
"description": "new proxy description",
"listen_service": "socks5",
"auth_type": "userpass",
"auth": {
"login": "username",
"password": "superpassword"
},
"ip": "1.2.3.4",
"port": 13874,
"hostname": "x1.fxdx.in",
"password_updated_at": "2025-07-11T18:05:18.622Z"
}
Endpoint: POST /api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}/update
Request Body:
{
"listen_service": "http", // http or socks5
"auth_type": "userpass", // userpass or noauth
"auth": {
"login": "new_login",
"password": "new_pass"
},
"description": "new proxy description",
"acl_inbound_ips": [], // allowed IPs, set [] to disable
"expires_at": "2026-01-01T01:01:01Z" // date of proxy expiry, set "0001-01-01T00:00:00Z" to disable
}
expires_at is an RFC 3339 timestamp.
All fields are optional, only set fields are updated.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}/update \
-d '{
"listen_service": "http",
"auth_type": "userpass",
"auth": {
"login": "new_login",
"password": "new_pass"
},
"description": "new description",
"acl_inbound_ips": [],
"expires_at": "0001-01-01T00:00:00Z"
}'
Response: 200: Updated proxy access
{
"id": "k31kcls",
"connection_id": "ksdfmw343",
"description": "new description",
"listen_service": "http",
"auth_type": "userpass",
"auth": {
"login": "new_login",
"password": "new_pass"
},
"ip": "1.2.3.4",
"port": 13872,
"hostname": "x1.fxdx.in",
"password_updated_at": "2025-07-11T16:55:21.37Z"
}
Endpoint: GET /api/console/v1/connection/{conn_id}/proxy-access
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/proxy-access
Response: 200: List of proxy accesses
{
"proxy_accesses": [
{
"id": "2CiQPfoWcJ",
"connection_id": "2W1IlyssyF",
"description": "new proxy description",
"listen_service": "socks5",
"auth_type": "userpass",
"auth": {
"login": "user",
"password": "pass"
},
"ip": "1.2.3.4",
"port": 13874,
"hostname": "3pf68xz4mv.cn.fxdx.in",
"created_at": "2025-07-11T19:58:09.135Z",
"password_updated_at": "2025-07-11T18:05:18.622Z"
},
{
"id": "HjttgsJjG3",
"connection_id": "2W1IlyssyF",
"description": "new description",
"listen_service": "http",
"auth_type": "noauth",
"acl_inbound_policy": "deny_except",
"acl_inbound_ips": ["1.2.3.4"],
"ip": "3.2.1.0",
"port": 13875,
"hostname": "3pf68xz4mv.cn.fxdx.in",
"created_at": "2025-07-11T19:58:09.135Z",
"password_updated_at": "2025-07-11T18:07:35.919Z"
"expires_at": "2025-12-09T22:00:00Z",
}
]
}
expires_at is an RFC 3339 timestamp.
Endpoint: GET /api/console/v1/proxy-access
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/proxy-access
Response: 200: List of proxy accesses
{
"proxy_accesses": [
{
"id": "2CiQPfoWcJ",
"connection_id": "2W1IlyssyF",
"description": "new proxy description",
"listen_service": "socks5",
"auth_type": "userpass",
"auth": {
"login": "user",
"password": "pass"
},
"ip": "1.2.3.4",
"port": 13874,
"hostname": "x1.fxdx.in",
"password_updated_at": "2025-07-11T18:05:18.622Z"
},
{
"id": "HjttgsJjG3",
"connection_id": "1xDwekE12",
"description": "new description",
"listen_service": "http",
"auth_type": "userpass",
"auth": {
"login": "new_login",
"password": "new_pass"
},
"acl_inbound_policy": "deny_except",
"acl_inbound_ips": ["1.2.3.4"],
"ip": "3.2.1.0",
"port": 13875,
"hostname": "x1.fxdx.in",
"password_updated_at": "2025-07-11T18:07:35.919Z"
}
]
}
expires_at is an RFC 3339 timestamp.
Endpoint: DELETE /api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}
Example:
curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}
Response: 200: Proxy successfully deleted
{
"id": "4cbI8O21Rd"
}
Traffic-ACL is used to allow or deny access to specific destinations like URL wildcards.
Currently, only deny rules are supported.
Default policy: Allow (so if rules list is empty, everything is allowed).
Endpoint: POST /api/console/v1/traffic-acl/outbound-rules/modify
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/traffic-acl/outbound-rules/modify \
-d '{
"outbound_rules": [
{
"match": "*.gov",
"type": "deny"
},
{
"match": "*.fb.com",
"type": "deny"
},
{
"match": "*",
"type": "deny"
}
]
}'
Response: 204: No Content
Endpoint: GET /api/console/v1/traffic-acl/outbound-rules
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/traffic-acl/outbound-rules
Response: 200: List of outbound rules
{
"outbound_rules": [
{
"match": "*.gov",
"type": "deny"
},
{
"match": "*.fb.com",
"type": "deny"
},
{
"match": "*",
"type": "deny"
}
]
}
Endpoint: POST /api/console/v1/connection/{conn_id}/traffic-acl/outbound-rules/modify
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/traffic-acl/outbound-rules/modify \
-d '{
"outbound_rules": [
{
"match": "*.gov",
"type": "deny"
},
{
"match": "*.fb.com",
"type": "deny"
},
{
"match": "*",
"type": "deny"
}
]
}'
Response: 204: No Content
Endpoint: GET /api/console/v1/connection/{conn_id}/traffic-acl/outbound-rules
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/traffic-acl/outbound-rules
Response: 200: List of outbound rules
{
"outbound_rules": [
{
"match": "*.gov",
"type": "deny"
},
{
"match": "*.fb.com",
"type": "deny"
},
{
"match": "*",
"type": "deny"
}
]
}
Endpoint: POST /api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}/traffic-acl/outbound-rules/modify
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}/traffic-acl/outbound-rules/modify \
-d '{
"outbound_rules": [
{
"match": "*.gov",
"type": "deny"
},
{
"match": "*.fb.com",
"type": "deny"
},
{
"match": "*",
"type": "deny"
}
]
}'
Response: 204: No Content
Endpoint: GET /api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}/traffic-acl/outbound-rules
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/proxy-access/{proxy_id}/traffic-acl/outbound-rules
Response: 200: List of outbound rules
{
"outbound_rules": [
{
"match": "*.gov",
"type": "deny"
},
{
"match": "*.fb.com",
"type": "deny"
},
{
"match": "*",
"type": "deny"
}
]
}
Endpoint: POST /api/console/v1/connection/{conn_id}/ovpn-access
Request Body:
{
"name": "new VPN name",
"description": "new VPN description"
}
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/ovpn-access \
-d '{
"name": "new VPN name",
"description": "new VPN description"
}'
Response: 201: A VPN access created
{
"status": "active",
"name": "new VPN name",
"description": "new VPN description",
"expires_at": "2045-07-06T18:23:09.787673959Z",
"dns": [],
"id": "1InLOU8GWR",
"connection_id": "{conn_id}"
}
expires_at is an RFC 3339 timestamp.
Endpoint: GET /api/console/v1/connection/{conn_id}/ovpn-access
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/ovpn-access
Response: 200: List of VPN accesses
{
"ovpn_accesses": [
{
"name": "VPN name",
"description": "VPN description",
"status": "active",
"dns": ["10.180.0.1"],
"id": "ovpn_id",
"connection_id": "{conn_id}",
"expires_at": "2026-01-01T01:01:01Z"
}
]
}
expires_at is an RFC 3339 timestamp.
Endpoint: GET /api/console/v1/ovpn-access
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/ovpn-access
Response: 200: List of VPN accesses
{
"ovpn_accesses": [
{
"name": "VPN name",
"description": "VPN description",
"status": "active",
"dns": ["10.180.0.1"],
"id": "ovpn_id",
"connection_id": "{conn_id}",
"expires_at": "2026-01-01T01:01:01Z"
}
]
}
expires_at is an RFC 3339 timestamp.
Endpoint: GET /api/console/v1/connection/{conn_id}/ovpn-access/{ovpn_id}/config
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/ovpn-access/{ovpn_id}/config
Response: 200: OpenVPN config
{
"config_base64": "base64 representation of ovpn config",
"config_sha1": "sha1 checksum of a config"
}
Endpoint: POST /api/console/v1/connection/{conn_id}/ovpn-access/{ovpn_id}/update
Request Body:
{
"name": "VPN name",
"description": "VPN description",
"expires_at": "2026-01-01T01:01:01Z"
}
expires_at is an RFC 3339 timestamp.
All fields are optional, only set fields are updated.
Example:
curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header "Content-Type: application/json" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/ovpn-access/{ovpn_id}/update \
-d '{
"name": "VPN name",
"description": "VPN description",
"expires_at": "2026-01-01T01:01:01Z"
}'
Response: 200: Updated VPN access
{
"name": "VPN name",
"description": "VPN description",
"status": "active",
"dns": ["10.180.0.1"],
"id": "ovpn_id",
"connection_id": "{conn_id}",
"expires_at": "2026-01-01T01:01:01Z"
}
Endpoint: DELETE /api/console/v1/connection/{conn_id}/ovpn-access/{ovpn_id}
Example:
curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connection/{conn_id}/ovpn-access/{ovpn_id}
Response: 200: Deleted VPN access
{
"id": "ovpn_id"
}
Endpoint: GET /api/console/v1/servers/vip
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/servers/vip
Response: 200: OK
{
"servers": [
{
"id": "server_id",
"city": "server_city",
"country": "server_country",
"hostname": "server_hostname"
}
]
}
Endpoint: GET /api/console/v1/servers/locations
Example:
curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url "https://iproxy.online/api/console/v1/servers/locations?socks5_udp=false"
Response: 200: OK
{
"locations": [
{
"city": "server_city",
"country": "server_country"
}
]
}
last updated on 05.12.2025