Background image
iProxy.online logo
Proxies for
Resources
Company
Search icon
/
EN
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 <user_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",
  "api_key_exists": true
}

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 API key and PIN code

1. Generate new connection PIN code

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.

2. Generate new connection API key

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

Connection payment API

1. Buy new plan

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 KeyTypeRequiredValidationDescription
plan_idstringYesMust be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL BabyThe ID of the pricing plan to purchase
daysintegerYesMin: 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_codestringNoMin: 1, Max: 64 charsOptional 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:

  • User not found (authentication context is missing or invalid)
  • Connection not found (invalid connection ID or user lacks access)
  • Plan not found (specified plan_id doesn't exist)
  • Connection has active plan (attempting to buy when plan hasn't expired; use /change-plan or /prolongate-plan instead)
  • Invalid days number (days parameter is not a multiple of the plan's standard day count)
  • Balance is too low (insufficient account balance after applying discounts)
  • Request validation fails (missing required fields, invalid field values)

Status Code 500 is returned if:

  • Database connection failures occur
  • Transaction creation errors happen (excluding duplicate key scenarios)
  • Internal system errors prevent completing the purchase
  • Plan activation fails after successful payment (contact support with req_id)

Notes:

  • Coupon codes are case-insensitive and automatically converted to uppercase
  • Invalid coupon codes do not cause errors; purchase continues without discount
  • Duplicate purchase attempts are idempotent and return the original transaction

2. Prolongate connection tariff

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 KeyTypeRequiredValidationDescription
active_planobjectYesCurrent active plan information for validation
active_plan.idstringYesMust be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL BabyCurrent active plan ID
active_plan.expires_atstring (RFC3339)YesValid datetimeCurrent plan expiration timestamp
daysintegerYesMin: 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_codestringNoMin: 1, Max: 64 charsOptional 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:

  • Selected plan is not active (provided plan ID doesn't match the connection's current active plan)
  • Invalid days number (days parameter is not a multiple of the plan's standard day count, e.g., if plan is 30 days, you can only prolongate by 30, 60, 90, etc.)
  • Plan expiration mismatch (provided expiration timestamp is later than the actual plan expiration; indicates stale data)
  • Request validation fails (missing required fields, invalid field values)

Status Code 403 is returned if:

  • User not found (authentication context is missing or user doesn't exist)
  • Balance is too low (insufficient account balance after applying discounts)

Status Code 200 with message is returned if:

  • Plan already expires later than provided timestamp (the plan was already extended, possibly by another request; not an error, returns success response with message)

Status Code 500 is returned if:

  • Database connection failures occur
  • Plan data retrieval errors happen
  • Transaction creation errors occur (excluding duplicate key scenarios)
  • Plan expiration update fails after successful payment (contact support with req_id)
  • Internal system errors prevent completing the prolongation

Notes:

  • Coupon codes are case-insensitive and automatically converted to uppercase
  • If no coupon code is provided in the request, the system uses the connection's previously saved coupon code
  • Invalid coupon codes do not cause errors; prolongation continues without discount
  • The new expiration is calculated by adding days to the provided expires_at timestamp, or to the current time if the plan has already expired
  • Duplicate prolongation attempts are idempotent and return the original transaction without charging again
  • The active_plan object ensures the request operates on the correct plan version (optimistic concurrency control)

3. Change connection tariff

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 KeyTypeRequiredValidationDescription
plan_idstringYesMust be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL BabyThe ID of the new pricing plan
active_planobjectRequiredCurrent active plan information for validation
active_plan.idstringRequiredMust be one of: BNyW1yBaln BigDaddy Pro, M7Fq2RKexi BigDaddy, nlUs1D8PKL BabyCurrent active plan ID
active_plan.expires_atstring (RFC3339)RequiredValid datetimeCurrent plan expiration timestamp
coupon_codestringNoMin: 1, Max: 64 charsOptional 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:

  • Connection is already expired (current plan has expired; use /buy-new-plan instead)
  • No active plan found (connection has no plan; use /buy-new-plan instead)
  • Plan not found (specified plan_id doesn't exist)
  • Cannot downgrade plan (new plan is cheaper per day than current plan; only upgrades allowed)
  • Limit exceeded (connection has more proxy accesses, OpenVPN configs, or IP-change links than the new plan allows; remove excess resources before changing)
  • Remaining time on current plan is too short
  • Request validation fails (missing required fields, invalid field values)

Status Code 500 is returned if:

  • Database connection failures occur
  • Plan data retrieval errors happen
  • Coupon calculation errors occur
  • Plan update or resource limit application fails
  • Internal system errors prevent completing the plan change

Notes:

  • Coupon codes are case-insensitive and automatically converted to uppercase
  • Invalid coupon codes do not cause errors; plan change continues without discount
  • The endpoint verifies the connection doesn't exceed new plan limits (proxies, OpenVPN configs, IP-change links) before proceeding
  • Downgrades are prevented by comparing price-per-day between old and new plans

Connection control API

1. Create connection

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

2. Get connection

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": []
}

3. Get connection list

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": []
    }
  ]
}

4. Update connection basic info

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

5. Update connection settings

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
  }'
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: WinXP, Win78, Win10, Win11, 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. Delete connection

Quote icon

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

7. Recreate connection

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

8. Get connection’s status list

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

9. 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>" \
  --header "Content-Type: application/json" \
  -d '{"action":"<command_name>", "<command_name>_params": {}}'

Allowed actions:

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

Actions with params:

  • toggle_proxy_params:

    • enabled: bool
  • change_connection_params:

    • connection_id: string

Response: 200:

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

10. Get last 100 SMS

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

Connection team management

1. Modify team access

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
  }
}
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 KeyTypeTitleDescription
open_vpn_createboolCreate OpenVPN configCreate and download a new OpenVPN configuration (.ovpn) for this connection; may generate client certificates/keys.
open_vpn_viewboolView OpenVPN configView and download existing OpenVPN configurations associated with this connection.
open_vpn_editboolEdit OpenVPN configModify OpenVPN parameters (e.g., server, cipher/DNS/routes) and optionally rotate/reissue client keys.
open_vpn_removeboolRemove OpenVPN configDelete an existing OpenVPN configuration and revoke its client keys to prevent further use.
proxy_createboolCreate proxy accessCreate new proxy endpoints/credentials (HTTP(S)/SOCKS), set port, rotation rules, and IP whitelist/binding.
proxy_editboolEdit proxy accessChange settings of existing proxy endpoints (credentials, rotation/limits, ports, whitelists).
proxy_removeboolRemove proxy accessDelete proxy endpoints/credentials and immediately revoke access.
proxy_viewboolView proxy accessList and view proxy endpoints and their credentials (host:port, username/password) and status.
action_link_createboolCreate action linkGenerate one-time or expiring links that trigger predefined actions (e.g., rotate IP, start/stop connection); configure scope and expiry.
action_link_viewboolView action linksView existing action links, including status, usage limits, and expiration.
action_link_removeboolRemove action linkRevoke/delete action links so they can no longer be used.
authorization_pin_createboolView authorization PINGenerate and display a short-lived authorization PIN used to confirm sensitive actions or device pairing.
basic_info_editboolEdit basic informationEdit non-sensitive connection metadata such as name, labels/tags, and notes/description.
api_key_createboolCreate API key for connectionCreate and display a new API key/secret for programmatic access; can be viewed at creation and revoked later.
team_manageboolManage teamInvite/remove members and assign roles/permissions for this connection/workspace.
settings_editboolEdit connection settingsChange technical connection settings (auth mode, allowed IPs/whitelist, rotation rules, ports, DNS/timeouts).
connection_controlboolControl connectionStart/stop/restart the connection, rotate IP, or trigger device reconnect.
connection_change_tariffboolChange tariff planUpgrade/downgrade the tariff plan for this connection; affects limits, pricing, and available features.
connection_removeboolRemove connectionPermanently delete the connection and related resources (proxies, configs); cannot be undone.
connection_paymentboolPay for connectionAlways false, can`t be changed.
sms_controlboolManage SMSSend/receive SMS via the device, view inbox, set forwarding/auto-reply rules, and delete messages.
statistics_and_history_viewboolView statistics and IP historyRead-only access to usage analytics, session logs, and IP change/history; export allowed where available.
connection_reserveboolReserve a connectionAllows requests to /reserve endpoint.
connection_releaseboolRelease a connectionAllows requests to /release endpoint. Usually should be set to false.

2. Remove team access

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

3. Reserve connection

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

4. Release connection

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

Connection statistics API

1. Daily traffic details

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.


2. Hourly traffic details by port

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 👇


3. Uptime timeline

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.


4. Uptime status buckets

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 period

5. IP history

Endpoint: 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.


Action links API

1. Create Action Link

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

2. Get List of Action Links (by connection)

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.


3. Get List of Action Links (by user)

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.


4. Delete Action Link

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

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

Proxy access control API

1. Create proxy access

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

2. Update proxy access

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

3. List proxy accesses by connection

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.


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/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 API

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).


1. Modify user-default Traffic-ACL outbound rules

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


2. Get user-level Traffic-ACL outbound rules

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

3. Modify connection-level Traffic-ACL outbound rules

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


4. Get connection-level Traffic-ACL outbound rules

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

5. Modify proxy-level Traffic-ACL outbound rules

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


6. Get proxy-level Traffic-ACL outbound rules

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

OpenVPN access API

1. Create OpenVPN access

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.


2. List VPN accesses by connection

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.


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": ["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.


4. Get VPN config

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

5. Update VPN access

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

6. Delete VPN access

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

Servers API

1. Get VIP servers list

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

2. Get servers’ locations

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