A REST API for managing your IPAuth pairs and access groups programmatically. Base URL: https://thrivesecurity.net/api/v1. Machine-readable spec: openapi.json.
Every request needs both:
A leaked key is useless from an IP you didn't authorize. Keys are created in Account → API keys, gated by a fresh TOTP code. They are never minted via the API.
When you mint a key you can tick "Lock to a roving IP tracked by IPAuth." We hand you a bookmark alongside the key. Give both to the consuming server: it reports its IP through the bookmark (the normal IPAuth way), and the key then authenticates only from whatever IP that bookmark currently reports. The allowed origin follows the server automatically, and a stale IP (older than 24h) stops authorizing on its own.
Keys carry scopes: account.read, account.write, pairs.read, pairs.write, groups.read, groups.write. A .write scope implies the matching .read. Read-only keys hold only .read scopes.
Success responses use an envelope; errors use RFC 7807 problem details with a stable type slug. Both carry a request_id.
{
"data": { ... },
"meta": { "request_id": "req_…", "timestamp": "2026-06-01T12:34:56+00:00" }
}
# Whoami
curl -s https://thrivesecurity.net/api/v1/account \
-H "Authorization: Bearer $IPAUTH_API_KEY"
# Register a server (creates a pair; server_key returned once)
curl -s https://thrivesecurity.net/api/v1/pairs \
-H "Authorization: Bearer $IPAUTH_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"ops-vps-1"}'
# Read a group's live IP allowlist (feed into ufw / NOC / Cloudflare)
curl -s https://thrivesecurity.net/api/v1/groups/7/ips \
-H "Authorization: Bearer $IPAUTH_API_KEY"
Run from an IP on the key's origin allowlist, or you'll get a 403 forbidden_origin. Rate limits apply per key and per IP; a 429 includes a Retry-After header.