Background image
iProxy.online logo
พร็อกซีสำหรับ
ทรัพยากร
บริษัท
Search icon
/
TH
English
Português
Русский
Español
Türkçe
Українська
Tiếng Việt
ไทย
中文
हिंदी
Show menu icon

iProxy Console API

This is an API available using global user's API KEY.

Prerequisites

Every request to the iProxy API must include the user's API KEY in Authorization header as Bearer token: curl --header 'Authorization: Bearer <api key>'

The API endpoint is: https://iproxy.online/api/console/v1/


Userinfo API

1. Userinfo

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"
}

2. Update basic user info

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"
}

3. Generate new API Key

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>"
}

Connection control

1. Create connection

Endpoint: POST /api/console/v1/connections

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header 'Content-Type: application/json' \
--url https://iproxy.online/api/console/v1/connections \
-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"
  "server_id": "server_id" //only for vip servers, mutually exclusive with city+country
}'

Response: 201: Created

{
  "id": "created_connection_id",
  "country": "server’s country code",
  "city": "server’s city",
  "server_id": "server_id"
}

2. Get connection

Endpoint: GET /api/console/v1/connections/{conn_id}

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}

Response: 200: OK

{
  "id": "{conn_id}",
  "basic_info": {
    "name": "online connection",
    "description": "connection_description (optional)",
    "created_at": "2025-07-11T10:36:38.006Z",
    "updated_at": "2025-07-11T10:58:51.42Z",
    "server_geo": {
      "country": "pl",
      "city": "waw"
    },
    "is_onboarding": false,
    "user_id": "myOrOwnerUserId",
    "server_id": "someServerId"
  },
  "shared_users": [],
  "plan_info": {
    "active_plan": {
      "id": "nlUs1D8PKL",
      "started_at": "2025-07-11T10:55:10.913Z",
      "expires_at": "2025-08-10T10:55:10.913Z"
    }
  },
  "settings": {
    "prolongation_enabled": false,
    "dns": [],
    "telegram_change_ip_notification_enabled": false,
    "telegram_status_notification_enabled": true,
    "reboot_cron_string": "",
    "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": [],
    "no_wifi_inet_disable_wifi_timeout_seconds": 0,
    "no_wifi_connection_reboot_timeout_seconds": 0,
    "tcp_fingerprint": "",
    "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": "",
    "app_restart_interval_minutes": 0,
    "connection_refresh_interval_minutes": 0
  },
  "app_data": {
    "device_info": {
      "is_root": false,
      "manufacturer": "Samsung",
      "model": "SM-A236B",
      "android_version": "14",
      "system_fingerprint": "6e1334d2",
      "system_device_id": "397ff68",
      "voice_assist_configured": true,
      "mobile_data_always_on": true,
      "owner_mode_enabled": false
    },
    "app_id": "com.iproxy.android",
    "app_version": "574",
    "app_version_patch": "1",
    "build_number": "57401",
    "agent_setup_complete": false,
    "ready_to_change_ip": true,
    "wifi_split_enabled": false,
    "last_activity_at": "2025-07-11T10:58:51.417Z",
    "installation_id": "phone-9da94533-e175-42a5-bdcb-f80b4c621117"
  }
}

3. Get connection list

Endpoint: GET /api/console/v1/connections

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections

Response: 200: OK

{
  "connections": [
    {
      "id": "{conn_id}",
      "basic_info": {
        "name": "online connection",
        "description": "connection_description (optional)",
        "created_at": "2025-07-11T10:36:38.006Z",
        "updated_at": "2025-07-11T10:58:51.42Z",
        "server_geo": {
          "country": "pl",
          "city": "waw"
        },
        "is_onboarding": false,
        "user_id": "myOrOwnerUserId",
        "server_id": "someServerId"
      },
      "shared_users": [],
      "plan_info": {
        "active_plan": {
          "id": "nlUs1D8PKL",
          "started_at": "2025-07-11T10:55:10.913Z",
          "expires_at": "2025-08-10T10:55:10.913Z"
        }
      },
      "settings": {
        "prolongation_enabled": false,
        "dns": [],
        "telegram_change_ip_notification_enabled": false,
        "telegram_status_notification_enabled": true,
        "reboot_cron_string": "",
        "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": [],
        "no_wifi_inet_disable_wifi_timeout_seconds": 0,
        "no_wifi_connection_reboot_timeout_seconds": 0,
        "tcp_fingerprint": "",
        "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": "",
        "app_restart_interval_minutes": 0,
        "connection_refresh_interval_minutes": 0
      },
      "app_data": {
        "device_info": {
          "is_root": false,
          "manufacturer": "Samsung",
          "model": "SM-A236B",
          "android_version": "14",
          "system_fingerprint": "6e1334d2",
          "system_device_id": "397ff68",
          "voice_assist_configured": true,
          "mobile_data_always_on": true,
          "owner_mode_enabled": false
        },
        "app_id": "com.iproxy.android",
        "app_version": "574",
        "app_version_patch": "1",
        "build_number": "57401",
        "agent_setup_complete": false,
        "ready_to_change_ip": true,
        "wifi_split_enabled": false,
        "last_activity_at": "2025-07-11T10:58:51.417Z",
        "installation_id": "phone-9da94533-e175-42a5-bdcb-f80b4c621117"
      }
    },
    {
      "id": "5ChcNy5QuK",
      "basic_info": {
        "name": "just created connection",
        "description": "connection_description (optional)",
        "created_at": "2025-07-11T10:55:15.22Z",
        "updated_at": "2025-07-11T10:55:36.967Z",
        "server_geo": {
          "country": "pl",
          "city": "waw"
        },
        "is_onboarding": false,
        "server_id": "soMeId"
      },
      "shared_users": [],
      "settings": {
        "prolongation_enabled": true,
        "dns": [],
        "telegram_change_ip_notification_enabled": false,
        "telegram_status_notification_enabled": true,
        "reboot_cron_string": "",
        "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": [],
        "no_wifi_inet_disable_wifi_timeout_seconds": 0,
        "no_wifi_connection_reboot_timeout_seconds": 0,
        "tcp_fingerprint": "",
        "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": "",
        "app_restart_interval_minutes": 0,
        "connection_refresh_interval_minutes": 0
      }
    }
  ]
}

4. Update connection basic info

Endpoint: POST /api/console/v1/connections/{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/connections/{conn_id}/update-basic-info \
-d '{
  "name": "new_name",
  "description": "new_description"
}'

Response: 200: OK

{
    "id": "connection_id",
    "name": "new_name",
    "description": "new_description"
}

5. Update connection settings

Endpoint: POST /api/console/v1/connections/{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/connections/{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
}'
Quote icon

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 KeyTypeValidationDescription
prolongation_enabledboolEnables automatic prolongation payments.
dnslist of stringEach 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_enabledboolSends Telegram alerts when the external IP changes.
telegram_status_notification_enabledboolSends Telegram alerts for status changes.
reboot_cron_stringstringCron expression. Send an empty string to disable.Enables scheduled reboots.
low_battery_reboot_thresholdfloat0 ≤ value ≤ 95. Send 0 to disable.Reboots the device if the battery level drops below the specified percentage.
no_network_reboot_timeout_secondsint0–3600 seconds. Send 0 to disable.Reboots the device if proxies are disconnected for the specified duration.
ip_change_airplane_mode_time_secondsint0–3600 seconds. Send 0 to disable.Sets minimum time in Airplane Mode to change IP.
no_network_airplane_toggle_timeout_secondsint0–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_expiredlist of intSend an empty array to clear all notifications.Enables payment notifications.
no_wifi_inet_disable_wifi_timeout_secondsint0–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_secondsint0–40320 seconds (up to 7 days). Send 0 to disable.Enables automatic Wi-Fi reconnection after the specified timeout.
tcp_fingerprintstringMust be one of: none, WinXP, Win78, Win10, WinNT, Nintendo, FreeBSD, FreeBSD9, MacOS, iOS. Send an empty string to disable.Sets the device fingerprint.
ip_change_wait_uniqueboolEnables unique IP assignment based on history.
ip_change_wait_unique_attemptsint0–10. Send 0 to disable.Maximum number of attempts to acquire a unique IP.
ip_change_wait_unique_lookbehind_minutesint0–64800 minutes (up to 45 days). Send 0 to disable.IP history time window for uniqueness.
ip_change_enabledboolMaster switch for the IP change engine.
ip_change_interval_minutesint0–1439 minutes (up to 24 hours). Send 0 to disable.Minimum time between IP changes.
macros_urlstringMust be a valid URL. Send an empty string to disable.Webhook URL for MacroDroid integration.
app_restart_interval_minutesintSets the interval (in minutes) for automatic app restarts.
connection_refresh_interval_minutesintForces 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
}

6. Modify team access

Endpoint: POST /api/console/v1/connections/{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/connections/{conn_id}/team-access/modify \
-d '{
  "email": "[email protected]",
    "permissions": {
    "action_link_create": true,
    "action_link_remove": true,
    "airplane_mode_time_edit": true
  }
}'

Response: 200: OK

{
  "email": "[email protected]",
  "permissions": {
    "airplane_mode_time_edit": false,
    "authorization_pin_create": false,
    "battery_level_threshold": false,
    "connection_change_tariff": false,
    "connection_payment": false,
    "connection_remove": false,
    "description_edit": false,
    "dns_setting": false,
    "enable_unique_ip": false,
    "find_device": false,
    "fix_lte": false,
    "ip_history_view": false,
    "logs_download": false,
    "macros_url": false,
    "name_edit": false,
    "open_vpn_create": false,
    "open_vpn_view": false,
    "open_vpn_edit": false,
    "open_vpn_remove": false,
    "pof_setting": false,
    "no_network_reboot": false,
    "proxy_create": false,
    "proxy_edit": false,
    "proxy_remove": false,
    "proxy_view": false,
    "reboot_device": false,
    "repeating_ip_view": false,
    "rotation_setting": false,
    "scheduled_reboot": false,
    "sms_control": false,
    "tariff_statistic_view": false,
    "no_network_airplane_toggle_time_edit": false,
    "uptime_view": false,
    "url_change_ip_create": false,
    "url_change_ip_remove": false,
    "team_members_edit": false,
    "api_key_create": false,
    "action_link_create": true,
    "action_link_view": false,
    "action_link_remove": true,
    "basic_info_edit": false,
    "settings_edit": false,
    "connection_control": false
  }
}

7. Remove team access

Endpoint: POST /api/console/v1/connections/{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/connections/{conn_id}/team-access/remove \
-d '{
  "email": "[email protected]"
}'

Response: 200: OK

{
    "email": "[email protected]"
}

8. Change connection tariff

Endpoint: POST /api/console/v1/connections/{conn_id}/change-plan

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header 'Content-Type: application/json' \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/change-plan \
-d '{
  "active_plan": {
    "id": "currentPlanID",
    "started_at": "2025-07-13T01:00:00Z",
    "expires_at": "2025-08-31T01:00:00Z"
  },
  "plan_id": "newPlanID",
  "coupon_code": "CODE" //optional
}'

Response: 200: OK

{
  "active_plan": {
    "id": "newPlanID",
    "started_at": "2025-07-13T01:00:00.00Z",
    "expires_at": "2025-08-10T10:55:10.913Z"
  },
  "coupon_code": "CODE",
  "is_coupon_applied": true
}

9. Delete connection

Quote icon

Only for connection without an active plan. If the connection has an active plan, use endpoint /recreate-connection.

Endpoint: /api/console/v1/connections/{conn_id}

Example:

curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--header 'Content-Type: application/json' \
--url https://iproxy.online/api/console/v1/connections/{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"
}

10. Get last 100 sms

Endpoint: GET /api/console/v1/connections/{conn_id}/sms-history

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{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"
    }
  ]
}

11. Command push

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>'
-d '{"action":"<command_name>", "<command_name>_params": {}}'

Allowed actions:

  • refresh_fingerprint
  • refresh
  • reboot
  • changeip
  • fix_lte
  • toggle_proxy
  • find_my_device
  • debug_report
  • upgrade_app
  • speed_test

Action with params:

  • toggle_proxy_params:
    • enabled: bool

Response: 200:

{"message": "{action} command has been sent"}

12. Get connection’s status list

Endpoint: GET /api/console/v1/connections-status

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections-status

Response: 200: OK

{
  "connections": [
    {
      "connection_id": "{conn_id}",
      "online_status": "online|offline|nodata|flapping", // now offline == nodata
      "last_online_status_update": "2025-07-11T10:58:51.42Z", // unless nodata
    }
  ]
}

13. Prologate connection tariff

Endpoint: POST /api/console/v1/connections/{conn_id}/prolongate-plan

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header 'Content-Type: application/json' \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/prolongate-plan \
-d '{
  "active_plan": {
      "id": "BNyW1yBaln",
      "started_at": "2025-07-13T05:01:37.192Z",
      "expires_at": "2025-08-01T04:44:58Z"
  },
  "coupon_code": "CODE",
  "days": 30 // must be multiplier of current plan 'days', like 30, 60, 90
}'

Response: 200: OK

{
    "is_coupon_applied": true,
    "active_plan": {
      "id": "BNyW1yBaln",
      "started_at": "2025-07-13T04:45:03.26Z",
      "expires_at": "2025-08-01T04:44:58Z"
    }
}

Connection API key and PIN code

1. Generate new connection PIN code

Endpoint: POST /api/console/v1/connections/{conn_id}/pin-code

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{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

2. Generate new connection API key

Endpoint: POST /api/console/v1/connections/{conn_id}/api-key

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/api-key

Response: 200: New key generated

{
  "api_key": "new_connection_api_key"
}

Special api

1. Recreate connection

Endpoint: /api/console/v1/recreate-connection

Example:

curl --request POST \
--url https://iproxy.online/api/console/v1/recreate-connection \
--header 'Authorization: Bearer <user_api_key>' \
-d '{
  "connection_id": "",
  "name": "new_connection_name",
  "server_id": "servers_id",
  "description": "new_connection_description", //optional
  "prolongation_enabled": true //optional
}'

Response: 201: OK

{
  "id": "new_connection_id"
}

Proxy access control

1. Create proxy access

Endpoint: POST /api/console/v1/connections/{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/connections/{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"
}

2. Update proxy access

Endpoint: POST /api/console/v1/connections/{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/connections/{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"
}'

expires_at is an RFC 3339 timestamp

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"
}

3. List proxy accesses by connection

Endpoint: GET /api/console/v1/connections/{conn_id}/proxy-access

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{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": "x1.fxdx.in",
      "password_updated_at": "2025-07-11T18:05:18.622Z"
    },
    {
      "id": "HjttgsJjG3",
      "connection_id": "2W1IlyssyF",
      "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

4. List proxy accesses by user

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

5. Delete proxy access

Endpoint: DELETE /api/console/v1/connections/{conn_id}/proxy-access/{proxy_id}

Example:

curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/proxy-access/{proxy_id}

Response: 200: Proxy successfully deleted

{
  "id": "4cbI8O21Rd"
}

OpenVPN access api

1. Create OpenVPN access

Endpoint: POST /api/console/v1/connections/{conn_id}/ovpn-access

Request Body:

{
  "name": "new VPN name",
  "description": "new VPN description",
}

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{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

2. List VPN accesses

Endpoint: GET /api/console/v1/connections/{conn_id}/ovpn-access

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/ovpn-access

Response: 200: List of VPN accesses

{
  "ovpn_accesses": [{
    "name": "VPN name",
    "description": "VPN description",
    "status": "active",
    "dns": [],
    "id": "ovpn_id",
    "connection_id": "{conn_id}",
    "expires_at": "2026-01-01T01:01:01Z"
  }]
}

expires_at is an RFC 3339 timestamp

3. List VPN accesses for user

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": [],
    "id": "ovpn_id",
    "connection_id": "{conn_id}",
    "expires_at": "2026-01-01T01:01:01Z"
  }]
}

expires_at is an RFC 3339 timestamp

4. Get VPN config

Endpoint: GET /api/console/v1/connections/{conn_id}/ovpn-access/{ovpn_id}/config

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/ovpn-access/{ovpn_id}/config

Response: 200: List of VPN accesses

{
    "config_base64": "base64 representation of ovpn config",
    "config_sha1": "sha1 checksum of a config"
}

5. Update VPN access

Endpoint: POST /api/console/v1/connections/{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/connections/{conn_id}/ovpn-access/{ovpn_id}/update \
-d '{
    "name": "VPN name",
    "description": "VPN description",
    "expires_at": "2026-01-01T01:01:01Z"
}'

expires_at is an RFC 3339 timestamp

Response: 200: Updated VPN access

{
    "name": "VPN name",
    "description": "VPN description",
    "status": "active",
    "dns": [],
    "id": "ovpn_id",
    "connection_id": "{conn_id}",
    "expires_at": "2026-01-01T01:01:01Z"
}

6. Delete VPN access

Endpoint: DELETE /api/console/v1/connections/{conn_id}/ovpn-access/{ovpn_id}

Example:

curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/ovpn-access/{ovpn_id}

Response: 200: Deleted VPN access

{
    "id": "ovpn_id"
}

Connection statistics API

1. Daily traffic details.

Endpoint: /api/console/v1/connections/{conn_id}/traffic/by-day

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connections/{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

2. Hourly traffic details by port

Endpoint: /api/console/v1/connections/{conn_id}/traffic/by-hour-port

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connections/{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

3. Uptime statistics

Endpoint: /api/console/v1/connections/{conn_id}/uptime

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connections/{conn_id}/uptime?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: Uptime stats for the requested period

{
  "uptime": [{
    "date": "2025-03-01T14:00:00Z",
    "status": "UP"
  ]}
}

date is an RFC 3339 timestamp

4. IP history

Endpoint: /api/console/v1/connections/{conn_id}/ip-history

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url 'https://iproxy.online/api/console/v1/connections/{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


Action links API

1. Create Action Link

Endpoint: POST /api/console/v1/connections/{conn_id}/actionlinks

Request Body: { "action": "reboot", "comment": "link for client AAAA" }

action string parameter is one of [reboot changeip] comment string is optional parameter

Example:

curl --request POST \
--header "Authorization: Bearer <user_api_key>" \
--header 'Content-Type: application/json' \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/actionlinks \
-d '{"action": "changeip", "comment": "link for client AAAA"}'

Response: 201: A link created

{
    "id": "xyzXYZ"
}

2. Get List of Action Links

Endpoint: GET /api/console/v1/connections/{conn_id}/actionlinks action parameter is one of [reboot changeip]

Example:

curl --request GET \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/actionlinks

Response: 200: List of links retrieved

{
    "action_links": [{
        "id": "xyzXYZ",
        "link": "https://i.fxdx.in/actionlinks/do/reboot/xyzXYZ",
        "action": "changeip",
        "connection_id": "abcdABCD",
        "comment": "link for client AAAA",
        "created_at": "2025-03-19T13:06:30Z"
    }]
}

created_at is an RFC 3339 timestamp

3. Get List of Action Links for user

Endpoint: GET /api/console/v1/actionlinks action parameter 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

4. Delete Action Link

Endpoint: DELETE /api/console/v1/connections/{conn_id}/actionlinks/{link_id}

Example:

curl --request DELETE \
--header "Authorization: Bearer <user_api_key>" \
--url https://iproxy.online/api/console/v1/connections/{conn_id}/actionlinks/{link_id}

Response: 200 OK

{
    "id": "xyzXYZ"
}

5. Execute Action Link

Note for better usability:

  • No authentication needed, don't share to unknown persons
  • It's a simple GET request, be careful with the 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"
}