Public API

Manage your account programmatically over a REST API. You can export ready-to-use proxy lists, manage your IP whitelist, read your subscriptions, and inspect or rotate Budget Unlimited sessions. All endpoints return JSON unless noted otherwise.

i
API key vs. proxy credentials. The API key authenticates REST requests on this page; proxy connections use a username and password or an IP whitelist (see Authentication). One thing to know up front: your API key and your proxy connection password are the same value, so regenerating the key also changes your proxy password.

Base URL

All Public API endpoints live under a single base URL:

https://proxyomega.com/api

Responses are returned as application/json, except the proxy-list endpoint, which returns plain text by default (pass format=json for JSON). The API is designed for server-side clients such as curl, scripts, and backends; requests made directly from a web page in a browser are blocked by the cross-origin policy.

Authentication

Two schemes are used, depending on the endpoint:

SchemeUsed byHow to send it
API keyProxy-list exportapi_key query parameter
Bearer tokenAll other endpoints on this page (the Session API can also be called with your proxy credentials)Authorization: Bearer YOUR_TOKEN header

API key

Your API key is shown on the dashboard Settings page, where you can also regenerate it (or use the API-key endpoints below). Pass it as the api_key query parameter:

curl "https://proxyomega.com/api/v1/proxy-list?api_key=YOUR_API_KEY&type=platinum"
i
Keep your key secret. Anyone with the key can export working proxy credentials for your account. Send it over HTTPS only, never commit it to source control, and never expose it in client-side code. Remember that regenerating the key also changes your proxy password — the old value stops working on the proxies within about a minute, so update any running clients when you rotate it.

Bearer token

Account endpoints (whitelist, subscriptions, session info) authenticate with the bearer token issued when you sign in to the dashboard. Send it in the Authorization header:

curl https://proxyomega.com/api/proxy/whitelist \
  -H "Authorization: Bearer YOUR_TOKEN"

These tokens are session tokens and expire. There is currently no documented flow for minting long-lived tokens for unattended server-to-server use; if you need standing programmatic access to the account endpoints, email [email protected].

Requests without a valid token receive a 401:

{
  "success": false,
  "message": "Authentication required - no token",
  "status_code": 401,
  "timestamp": "2026-07-10T09:00:00+00:00"
}

Proxy-list export

GET /api/v1/proxy-list

Generates a ready-to-use proxy list for one of your active plans, in the format your tools expect.

ParameterRequiredDescription
api_keyYesYour API key.
typeYesWhich plan to export: premium, platinum, mobile, or ipv6. Must match a plan that is active on your account.
quantityNoNumber of proxy lines to return. Default 10, maximum 1000.
formatNoOutput format — see the list below. Default host:port:username:password.
countryNoTwo-letter country code; adds -country-xx to the generated usernames.
cityNoCity name (Premium Unlimited, Platinum, Mobile); adds -city-....
asnNoASN number (Premium Unlimited, Platinum); adds -asn-N.
stickyNotrue to generate sticky-session usernames. A session ID is generated for you unless you pass session_id.
session_idNoExplicit sticky-session ID; adds -session-<id>.
ttlNoSticky-session lifetime in minutes (Platinum, Mobile, IPv6); adds -ttl-N.
protocolNoProtocol label (http or socks5) echoed into json output. It does not change the proxies themselves — every plan serves HTTP, HTTPS, and SOCKS5 on the same host and port.

The targeting and session parameters follow the same plan-support rules as building usernames by hand — see Targeting for what each plan supports.

Supported format values:

  • host:port:username:password (default)
  • host:port
  • username:password@host:port
  • http://username:password@host:port
  • socks5://username:password@host:port
  • json
  • csv

Example

curl "https://proxyomega.com/api/v1/proxy-list?api_key=YOUR_API_KEY&type=platinum&quantity=3&country=us&sticky=true"

Default output is plain text, one proxy per line:

platinum.proxyomega.com:20228:USERNAME-country-us-session-4f8a1c2b:PASSWORD
platinum.proxyomega.com:20228:USERNAME-country-us-session-9d3e7a51:PASSWORD
platinum.proxyomega.com:20228:USERNAME-country-us-session-b6c04e92:PASSWORD

With format=json the same list is wrapped in a JSON envelope (abridged):

{
  "success": true,
  "data": {
    "proxies": [
      {
        "host": "platinum.proxyomega.com",
        "port": 20228,
        "username": "USERNAME-country-us-session-4f8a1c2b",
        "password": "PASSWORD",
        "protocol": "http",
        "type": "platinum"
      }
    ],
    "count": 1,
    "type": "platinum"
  }
}

Errors: 401 {"success": false, "error": "Invalid API key"} for a missing or invalid key, 403 {"error": "No active subscriptions"} when your account has no active plans, and 404 {"error": "Proxy type not found"} when the requested type is not active on your account.

Whitelist management

These endpoints manage the IP allowlist used for credential-free proxy connections. All of them authenticate with the bearer token.

i
The whitelist is strict once it has entries. With an empty whitelist, any source IP can connect using your username and password. As soon as the list has one or more IPs, connections from IPs not on the list are refused — so always include the IP you are connecting from. Up to 50 IPs per account.

Each entry has a proxy_type scoping which product it applies to: global (all products), unlimited, platinum, ipv6, mobile, or isp.

MethodPathPurpose
GET/api/proxy/whitelistList whitelist entries
POST/api/proxy/whitelist/addAdd one IP
POST/api/proxy/whitelist/add-bulkAdd multiple IPs
DELETE/api/proxy/whitelist/removeRemove an entry
POST/api/proxy/whitelist/remove-bulkRemove multiple entries
POST/api/proxy/whitelist/updateEdit an entry's IP or label

GET /api/proxy/whitelist

Returns your whitelist entries. Filter by product with the optional type query parameter (same values as proxy_type above).

curl "https://proxyomega.com/api/proxy/whitelist?type=global" \
  -H "Authorization: Bearer YOUR_TOKEN"
{
  "success": true,
  "message": "Whitelist retrieved successfully",
  "status_code": 200,
  "timestamp": "2026-07-10T09:00:00+00:00",
  "data": {
    "whitelist": [
      {
        "id": 101,
        "user_id": 12345,
        "ip_address": "203.0.113.7",
        "proxy_type": "global",
        "label": "Office",
        "created_at": "2026-07-01 09:30:00"
      }
    ],
    "count": 1,
    "max_allowed": 50
  }
}

POST /api/proxy/whitelist/add

Adds one IP. JSON body: ip_address (required), proxy_type (required), label (optional).

curl -X POST https://proxyomega.com/api/proxy/whitelist/add \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ip_address": "203.0.113.7", "proxy_type": "global", "label": "Office"}'
{
  "success": true,
  "message": "IP added to whitelist successfully",
  "status_code": 200,
  "timestamp": "2026-07-10T09:00:00+00:00",
  "data": {
    "id": 101,
    "ip_address": "203.0.113.7",
    "proxy_type": "global",
    "label": "Office"
  }
}

Invalid IPs, duplicates, and requests that would exceed the 50-IP limit return 422.

POST /api/proxy/whitelist/add-bulk

Adds several IPs in one call. JSON body: ip_addresses (array of IP strings), proxy_type (required), label (optional). The response reports how many were added, how many were already on the list, and which values were invalid (abridged):

{
  "success": true,
  "message": "Added 2 IP(s) to whitelist. 1 duplicate(s). 0 failed.",
  "status_code": 200,
  "timestamp": "2026-07-10T09:00:00+00:00",
  "data": {
    "added": 2,
    "duplicates": 1,
    "failed": 0,
    "invalid_ips": []
  }
}

success is true only if at least one IP was added. A batch that would push the list past 50 IPs returns 422.

DELETE /api/proxy/whitelist/remove

Removes one entry by its id (from the list endpoint). POST to the same path is also accepted.

curl -X DELETE https://proxyomega.com/api/proxy/whitelist/remove \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"id": 101}'
{
  "success": true,
  "message": "IP removed from whitelist successfully",
  "status_code": 200,
  "timestamp": "2026-07-10T09:00:00+00:00"
}

Returns 404 if the entry does not exist and 403 if it belongs to another account.

POST /api/proxy/whitelist/remove-bulk

Removes several entries in one call. JSON body: ids (array of entry ids). The response reports the per-entry result in the same envelope as the other whitelist endpoints.

POST /api/proxy/whitelist/update

Edits an existing entry. JSON body: id (required), ip_address (required), label (optional). Returns 422 if the new IP is already whitelisted on another entry, 404 if the entry does not exist, and on success:

{
  "success": true,
  "message": "Whitelist entry updated successfully",
  "status_code": 200,
  "timestamp": "2026-07-10T09:00:00+00:00"
}

API key

GET /api/user/api-key

Returns your current API key. Bearer-token auth.

curl https://proxyomega.com/api/user/api-key \
  -H "Authorization: Bearer YOUR_TOKEN"
{
  "api_key": "a1b2c3-d4e5f6-a7b8c9-d0e1f2-a3b4c5"
}

POST /api/user/api-key/generate

Generates a new API key, replacing the old one. POST only; other methods return 405.

curl -X POST https://proxyomega.com/api/user/api-key/generate \
  -H "Authorization: Bearer YOUR_TOKEN"
{
  "success": true,
  "api_key": "f6e5d4-c3b2a1-f0e9d8-c7b6a5-f4e3d2",
  "message": "API key generated successfully"
}
i
Rotating the key changes your proxy password. The API key doubles as your proxy connection password, and the old value stops working on the proxies within about a minute of generating a new key. Update every running client — scrapers, whitelabel setups, saved browser profiles — immediately after rotating.

Subscriptions

GET /api/user/subscriptions

Returns the subscriptions on your account. Bearer-token auth.

curl https://proxyomega.com/api/user/subscriptions \
  -H "Authorization: Bearer YOUR_TOKEN"

Abridged example response:

{
  "success": true,
  "status_code": 200,
  "timestamp": "2026-07-10T09:00:00+00:00",
  "subscriptions": [
    {
      "id": 4211,
      "product_type": "unlimited",
      "status": "active",
      "plan_name": "Budget Unlimited",
      "billing_interval": "monthly",
      "ports": 25,
      "default_port": 10000,
      "auto_renew": true,
      "date_purchased": "2026-06-14 18:02:11",
      "date_expiry": "2026-07-14 18:02:11",
      "can_renew": true,
      "cancel_at_period_end": false
    },
    {
      "id": "platinum_12345",
      "product_type": "platinum",
      "billing_interval": "gb_pack",
      "bandwidth_gb": 8.4
    }
  ],
  "count": 2
}

Fields you can rely on per subscription: id, product_type (unlimited, premium_unlimited, platinum, mobile, ipv6), status, auto_renew, date_purchased, date_expiry, ports, threads, quantity, plan_name, billing_interval, actual_price, next_renewal_price, has_active_discount, can_renew, cancel_at_period_end, and (Budget Unlimited only) default_port, your lowest connect port.

Pay-as-you-go balances (Platinum and Mobile GB packs) appear as summary rows with billing_interval "gb_pack" and a bandwidth_gb / data_gb balance rather than as dated subscriptions. The response may include additional fields; treat anything not listed here as internal and subject to change.

Session API (Budget Unlimited)

Budget Unlimited ports expose a small session API for checking which exit IP a port (or sticky session) currently holds, and for forcing a rotation on demand. You can call it two ways: directly through the proxy with your proxy credentials, or through the account endpoints with the bearer token. See Sessions & rotation for how sessions and rotation intervals work.

Calling it through the proxy

Send a plain-HTTP request to http://api.proxyomega.com/v1/... through your Budget Unlimited proxy port, authenticating exactly as you would for normal traffic. There are no query parameters — what you get back is selected by how you connect: the port you connect to selects the port, and a -session-<id> tag in your username selects that sticky session. A -country-<cc> tag is echoed back as country_requested.

i
Plain HTTP only. Always call these URLs with http://, not https:// — HTTPS requests to the session API fail with a 502. Use HTTP proxy mode (as in the curl examples below) rather than SOCKS5 for these calls.

GET /v1/session

Returns the current session for the port (and session tag) you connect as.

curl -x "http://USERNAME:[email protected]:10000" \
  http://api.proxyomega.com/v1/session
{
  "user_id": 12345,
  "port": 10000,
  "session_id": null,
  "country_requested": null,
  "rotation_minutes": 4,
  "next_rotation_at": "2026-07-10T09:43:07Z",
  "proxy": {
    "online": true,
    "device_id": "3f9c2a71-8a4e-4b0f-9d2c-5e1a7b6c4d38",
    "ip": "198.51.100.24",
    "country": "US",
    "city": "Phoenix",
    "state": "Arizona",
    "isp": "ExampleNet",
    "asn": 64500
  },
  "fetched_at": "2026-07-10T09:39:11Z"
}

To inspect a specific sticky session, connect exactly as that session would — for example username USERNAME-session-abc123 on the same port. A freshly created or just-rotated session shows "online": false with null proxy fields until your next real request through the port assigns an IP; that is expected, not an error. device_id is an opaque identifier for your current assignment — include it in support tickets if you report a problem with a specific IP.

GET /v1/sessions

Returns every active assignment across all of your ports and sessions, whichever port you call it through. Ports and sessions that do not currently hold an IP are not listed.

curl -x "http://USERNAME:[email protected]:10000" \
  http://api.proxyomega.com/v1/sessions
{
  "user_id": 12345,
  "sessions": [
    {
      "port": 10000,
      "session_id": null,
      "country_requested": null,
      "rotation_minutes": 4,
      "next_rotation_at": "2026-07-10T09:43:07Z",
      "proxy": {
        "online": true,
        "device_id": "3f9c2a71-8a4e-4b0f-9d2c-5e1a7b6c4d38",
        "ip": "198.51.100.24",
        "country": "US",
        "city": "Phoenix",
        "state": "Arizona",
        "isp": "ExampleNet",
        "asn": 64500
      }
    }
  ],
  "fetched_at": "2026-07-10T09:39:11Z"
}

POST /v1/session/rotate

Drops the current IP for the port (and session tag) you connect as. The response echoes the assignment you just dropped in previous (null if there was none); a fresh IP is assigned on your next real request through the port.

curl -X POST \
  -x "http://USERNAME:[email protected]:10000" \
  http://api.proxyomega.com/v1/session/rotate
{
  "status": "rotated",
  "user_id": 12345,
  "port": 10000,
  "session_id": null,
  "previous": {
    "device_id": "3f9c2a71-8a4e-4b0f-9d2c-5e1a7b6c4d38",
    "ip": "198.51.100.24",
    "country": "US",
    "city": "Phoenix",
    "state": "Arizona",
    "asn": 64500,
    "isp": "ExampleNet"
  },
  "note": "next request through this proxy port will be assigned a fresh device",
  "fetched_at": "2026-07-10T09:45:02Z"
}

Dashboard-token variant

The same data is available from the account API with the bearer token:

MethodPathPurpose
GET/api/proxy/session-info?port=10000Session for one connect port. Without port, returns a JSON array covering every active Budget Unlimited port.
GET/api/proxy/session-info-allSame as session-info without port.
POST/api/proxy/rotateRotate a port. port is required, as a JSON body {"port": 10000}, form field, or query parameter.
curl "https://proxyomega.com/api/proxy/session-info?port=10000" \
  -H "Authorization: Bearer YOUR_TOKEN"

curl -X POST https://proxyomega.com/api/proxy/rotate \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"port": 10000}'

The port value is one of your Budget Unlimited connect ports as shown on the dashboard. Responses carry the same fields as the /v1/session and /v1/session/rotate shapes above. POST /api/proxy/rotate rotates the port's base assignment (no session tag); to rotate one specific sticky session, use the proxy-side POST /v1/session/rotate with the -session- tagged username.

A port that is not an active Budget Unlimited port on your account returns 404 with message "Port not found"; rotate without a port returns 400 "Port is required". In batch responses, ports that could not be queried appear inline as {"port": N, "error": "session_info_unavailable", "detail": "..."}.

Poll session info at sensible intervals — a few times per minute is plenty, since assignments do not change faster than your rotation interval.

Errors

Most account endpoints wrap errors in a common envelope:

{
  "success": false,
  "message": "What went wrong",
  "status_code": 422,
  "timestamp": "2026-07-10T09:00:00+00:00"
}

Check success (or the HTTP status) before reading the payload. Status codes you will encounter:

StatusWhenNotes
400Required parameter missingFor example, rotate without a port: "Port is required".
401Missing or invalid credentialsBearer endpoints: "Authentication required - no token" or "Invalid or expired token". Proxy-list: {"success": false, "error": "Invalid API key"}.
403Not yours, or not availableThe resource belongs to another account, or (proxy-list) {"error": "No active subscriptions"}.
404Not foundUnknown port, whitelist entry, or a plan type that is not active on your account.
405Wrong HTTP methodFor example, GET on a POST-only endpoint.
422Validation failedInvalid IP format, duplicate whitelist entry, or over the 50-IP limit.
503Session info temporarily unavailable{"error": "session_info_unavailable", "detail": "..."} — retry after a short wait.

The Session API called through the proxy has its own small set:

StatusWhenBody
404Unknown path under /v1/{"error": "not found", "path": "/v1/..."}
407Wrong proxy credentialsEmpty body.
502Request sent over https://Use http:// for session-API URLs.

What is not covered

This page documents the stable, supported surface of the Public API. Other /api/... paths you may notice in dashboard network traffic are internal and can change without notice — don't build against them. Usage and bandwidth reporting endpoints are not part of the public surface yet. If you need something programmatically that isn't documented here, email [email protected].

Looking for sub-accounts?

If you resell proxies and need to provision sub-accounts, provision subscriptions on behalf of others, and pull per-account analytics, use the separate Reseller API. It has its own base URL and its own authentication, and it requires an approved reseller account.

i
Next steps. Read Authentication for the ways proxy connections themselves authenticate, Targeting to build the username strings the proxy-list export produces, and Sessions & rotation for how sticky sessions behave.

Last updated July 10, 2026