HProxy Free proxy list API

The Free proxy list API API from HProxy — 1 operation(s) for free proxy list api.

GitHub OpenAPI

Operations 1

GET /api/proxy-list The whole live list in one call #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hproxy-com:hproxy-com-free-proxy-list-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hproxy-com-free-proxy-list-api-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: HProxy Free proxy list API
  version: 1.0.0
  description: 'Buy and manage proxies from a prepaid wallet, run the Scraper API, or use the free no-key APIs: a live proxy list, a proxy checker and an IP lookup. JSON in, JSON out. Money is always integer cents (120 = $1.20), never floats.'
  contact:
    url: https://hproxy.com/contact
  license:
    name: Proprietary
servers:
- url: https://hproxy.com
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: Free proxy list API
paths:
  /api/proxy-list:
    get:
      operationId: free-proxy-list
      summary: The whole live list in one call
      description: 'One GET returns **every working proxy we have**, as `txt`, `json` or `csv`. Not a sample and not a teaser: HTTP, HTTPS, SOCKS4 and SOCKS5, all of it, in a single call. No key, no signup. CORS is enabled, so you can call it straight from a browser. Fair-use rate limit of about 120 requests per minute per IP, with bursts up to 120 (a clean `429` with `Retry-After` beyond that). This is the same data behind the free proxy list.


        **How many is that?** Thousands at any moment, and tens of thousands within two days, because that is how many public proxies on Earth are actually answering. It moves every few minutes as proxies die and new ones are found, so treat any number written here as a rough order of magnitude and never as the truth. `X-Total-Available` on the response is the exact count matching your filter, and `X-Total-Count` is how many came back in this particular response. If the two are equal you already have everything and there is no next page.


        **Why you will see 10,000 mentioned below.** That is the most rows a single response will carry *when you ask for a specific number*. It is a page size, not a cap on what you are allowed to have. **Omit `limit` entirely and you get the complete matching set in one response**, however large it is. The page size only comes into play when you pass `limit` yourself, or on a set big enough that we page it for you (`recent=true`).'
      tags:
      - Free proxy list API
      parameters:
      - name: format
        in: query
        required: false
        description: Response shape. Default txt (one ip:port per line).
        schema:
          type: string
      - name: protocol
        in: query
        required: false
        description: Filter by protocol. Comma-separated allowed (e.g. http,https), which matches a proxy supporting ANY of them.
        schema:
          type: string
      - name: country
        in: query
        required: false
        description: Filter by country, e.g. US, DE, GB.
        schema:
          type: string
      - name: anonymity
        in: query
        required: false
        description: Filter by anonymity grade. Proxies we have not been able to grade yet are excluded.
        schema:
          type: string
      - name: asn
        in: query
        required: false
        description: Filter by autonomous system, e.g. 14061 for DigitalOcean. Same data as the per-network pages on the free list.
        schema:
          type: number
      - name: port
        in: query
        required: false
        description: Only proxies answering on this exact port, e.g. 8080 or 1080.
        schema:
          type: string
      - name: subnet
        in: query
        required: false
        description: Only proxies inside one /24 block, e.g. subnet=45.61.188 for 45.61.188.0/24. Open proxies cluster in blocks, so this finds a machine's neighbors.
        schema:
          type: string
      - name: min_uptime_pct
        in: query
        required: false
        description: Only proxies whose lifetime uptime is at least this. The single most useful filter if you want proxies that stay up.
        schema:
          type: string
      - name: max_latency_ms
        in: query
        required: false
        description: Only proxies at or below this latency, in milliseconds.
        schema:
          type: string
      - name: sort
        in: query
        required: false
        description: Order the whole pool by reliability before paging, so page 1 is the best proxies overall. Omit for the default order (alive first, then fastest).
        schema:
          type: string
      - name: limit
        in: query
        required: false
        description: Rows in THIS response, not a limit on your total. Leave it out and you receive the complete matching set in one call, which is what most callers want. Pass a number and this response stops at that many rows (10000 is the ceiling for one response); use offset to walk the rest. Whatever you do, X-Total-Available still reports how many exist.
        schema:
          type: string
      - name: offset
        in: query
        required: false
        description: Skip this many rows. Needed only when you passed an explicit limit, or on a set too large for one response. Default 0.
        schema:
          type: string
      - name: recent
        in: query
        required: false
        description: 'Also include proxies that have gone quiet but answered within the last 48h, taking the set from the live-now pool to several times its size. This WIDENS the list, it does not freshen it: the extra rows come back with status recently_alive and many are not answering right now. Leave it off for the strictly alive-now pool.'
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid input. The body names the field and the accepted set.
        '401':
          description: Missing or invalid API key.
        '429':
          description: Rate limited. Retry after the delay in the response.
      security: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your API key. Free keyless endpoints ignore it.
x-endpoint-count: 163
x-generated-from: https://hproxy.com/docs
x-llms: https://hproxy.com/llms-full.txt