---
title: "Add a proxy"
method: POST
path: "/v1/proxies"
tags: ["Proxies"]
---

# Add a proxy

`POST /v1/proxies`

## Request

- Base URL: `https://api.feelingsurf.fr`
- URL: `https://api.feelingsurf.fr/v1/proxies`
- Auth: HTTP bearer

Registers a static proxy. FeelingSurfViewer checks it before any session goes through it, so a new proxy starts with `proven` false. Exceeding the per-account proxy cap returns 403 `proxy_limit_reached`; a host and port already on your account returns 422 `validation_error`.

## Request body

- ProxyCreate
  - `type` 'http' | 'https' | 'socks5': The proxy protocol, case-insensitive.
  - `host` string, required: The proxy's public IPv4 or IPv6 address. Hostnames and private addresses are rejected; IPv6 is stored in its compressed form.
  - `port` integer, required: The proxy's port.
  - `username` string: Username for an `http` or `https` proxy. Not allowed with `socks5`.
  - `password` string: Password for an `http` or `https` proxy. Not allowed with `socks5`.

## Response `201`

The added proxy.

- Proxy: A proxy FeelingSurfViewer can surf through. Its password is never returned.
  - `id` integer: Unique identifier.
  - `type` 'http' | 'https' | 'socks5': The proxy protocol.
  - `host` string: The proxy's public IP address.
  - `port` integer: The proxy's port.
  - `username` string, nullable: The username sent to the proxy, or null.
  - `has_password` boolean: Whether a password is stored for the proxy.
  - `enabled` boolean: False when you paused the proxy, or when it was switched off after failing (see `last_error`).
  - `proven` boolean: Whether a check through FeelingSurfViewer has confirmed the proxy works at least once. Sessions never go through an unproven proxy, but a proven one can still sit unused, for instance while `unanswered` is true or shortly after an error.
  - `unanswered` boolean: The proxy failed its latest check and is set aside until a new check succeeds.
  - `visits` integer: Visits made through the proxy.
  - `credits_earnt` number, float: Credits earned through the proxy.
  - `last_used_at` string, date-time, nullable: When a visit last went through the proxy (UTC), or null.
  - `last_error` string, nullable: The latest error code for the proxy, e.g. `ERR_PROXY_CONNECTION_FAILED`, or null.
  - `last_error_at` string, date-time, nullable: When `last_error` happened (UTC), or null.
  - `created_at` string, date-time: When the proxy was added (UTC).

## Other responses

- `400`: The request body was missing or not a JSON object.
- `401`: Missing or invalid API key.
- `403`: The request is not allowed. A banned or disabled account is rejected with `forbidden`; a site setting your plan does not include is rejected with `premium_required`.
- `422`: The request body failed validation.
- `429`: Too many requests — the per-account, per-minute rate limit was exceeded. Wait the number of seconds given in the `Retry-After` response header, then retry.

---

[API](https://skmtc.dev/feelingsurf/apis/feelingsurf-api.md) · [All operations](https://skmtc.dev/feelingsurf/apis/feelingsurf-api/llms.txt) · [OpenAPI document](https://skmtc.dev/feelingsurf/apis/feelingsurf-api/revisions/8b09d26880d6?raw)
