/graphql on the admin server. It provides full CRUD for every runtime entity — targets, IP pools, and providers — and propagates changes live without a restart.
Access the interactive playground at GET http://localhost:8081/graphql.
Cascade behaviour
Changes to a provider’s IP list cascade automatically:Queries
targets
List all targets stored in the repository.
target(name: String!)
Fetch a single target by name.
pools
List all IP pools.
pool(name: String!)
Fetch a single pool by name.
providers
List all proxy providers.
provider(name: String!)
Fetch a single provider by name.
status
Current auth state and caller identity.
Mutations
All mutations require thewrite permission.
Target mutations
addTarget
Add a new target. The pool referenced by poolName must already exist in the repository.
updateTarget
Update an existing mutable target. Replaces the full target definition.
removeTarget
Remove a target from the repository.
Pool mutations
addPool
Add a new IP pool.
updatePool
Update an existing mutable pool. Triggers a cascade to all targets referencing this pool.
removePool
Remove a pool from the repository.
Provider mutations
addProvider
Add a new proxy provider.
updateProvider
Update an existing mutable provider. Does not automatically cascade to pools and targets — use addIpToProvider / removeIpFromProvider for live IP changes.
removeProvider
Remove a provider from the repository.
addIpToProvider
Append an IP to a provider’s list and cascade the change through all pools and targets that reference this provider.
removeIpFromProvider
Remove an IP from a provider’s list and cascade the change. The IP drains naturally from live pool queues — it is not forcibly evicted mid-request.
Input types
TargetInput
| Field | Type | Default | Description |
|---|---|---|---|
name | String | required | Unique target name |
regex | String | required | Python regex matched against the full destination URL |
poolName | String | required | Name of an existing pool in the repository |
minRequestInterval | Float | 1.0 | Seconds an IP is held off the pool after each request |
maxQueueWait | Float | 30.0 | Seconds to wait for a free IP before returning 503 |
numRetries | Int | 3 | Retry attempts on failure |
ipFailuresUntilQuarantine | Int | 5 | Consecutive failures before quarantine |
quarantineTime | Float | 120.0 | Quarantine duration in seconds |
mutable | Boolean | true | Whether this target can be updated or removed via the API |
IpPoolInput
| Field | Type | Default | Description |
|---|---|---|---|
name | String | required | Unique pool name |
ipRequests | [IpRequestInput] | required | One or more provider IP requests |
mutable | Boolean | true | Whether this pool can be updated or removed via the API |
IpRequestInput
| Field | Type | Description |
|---|---|---|
provider | String | Name of an existing provider |
count | Int | Number of IPs to draw from the provider (takes first N; graceful if provider has fewer) |
ProviderInput
| Field | Type | Default | Description |
|---|---|---|---|
name | String | required | Unique provider name |
ipList | [String] | required | Proxy addresses in host:port format |
regionTag | String | — | Region label for Prometheus metrics |
mutable | Boolean | true | Whether this provider can be updated or removed via the API |
auth | BasicAuthInput | — | Omit for open or IP-whitelisted proxies |
BasicAuthInput
| Field | Type | Description |
|---|---|---|
username | String | HTTP Basic auth username |
password | String | HTTP Basic auth password |