Skip to content

What the API sees of the caller’s address

GET
/v1/admin/client-ip
curl --request GET \
--url https://beta-api.plune.ai/v1/admin/client-ip \
--cookie plune_session=<plune_session>

For the operator to find out what the edge (the reverse proxy) sends: call it through the real edge with a forged X-Forwarded-For and read which entry the API keys its per-IP limits on (docs/RUNBOOK.md §4e). chosen is that entry (null when there is nothing to key on: the limit is then off for the request), hops is TRUSTED_PROXY_HOPS (null = unset, the first entry is read). The header is returned as received and is never logged. Owner-only and session-only, as GET /v1/admin/tiers; everyone else gets 404. Ten calls a minute.

The address as the API sees it

Media type application/json
object
socketAddress
required

The address of the connection the API accepted (the edge, behind a proxy)

string | null
xForwardedFor
required

The X-Forwarded-For header as received, null when absent

string | null
chosen
required

The address the per-IP limits key on

string | null
hops
required

TRUSTED_PROXY_HOPS; null when unset

integer | null
Example
{
"socketAddress": "172.18.0.4",
"xForwardedFor": "1.2.3.4, 203.0.113.7",
"chosen": "203.0.113.7",
"hops": 1
}

No / invalid session

The caller does not own the application

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}

Rate-limited: the per-route throttle, or the per-minute request limit of the plan an API token counts by (#1442; the body names the plan, #2092). Retry-After carries the seconds until the window rolls over.

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}
Retry-After
integer

Seconds until the window rolls over