All endpoints accept JSON. Session tokens are short-lived and returned when you sign in; API keys are long-lived and recommended for scripts.
Authorization: Bearer <token> — a session token from POST /console/verify (or the application).Authorization: Bearer <ipt_key> or X-API-Key: ipt_key — a personal API key created on the API Keys page.| Method | Path | Auth | Purpose |
|---|---|---|---|
| POST | /console/verify | proof-of-work challenge | Sign in with username/password or a token; returns a session token. |
| GET | /console/me | session token | Current account, verification status, and usage stats. |
| GET | /console/confirm?token= | token | Redeem a verification link and mark the account verified. |
| POST | /console/confirm | session token + challenge | Generate a fresh verification link. |
| GET/POST | /console/keys | session token | List or create API keys (verified accounts only). |
| DELETE | /console/keys/:id | session token | Revoke an API key. |
| GET | /console/api/v1/info | session or API key | Account info plus link/click totals. |
| GET | /console/api/v1/links | session or API key | Your links with redirect targets and click counts. |
Signups on the application receive a verification link. Open it in this console to confirm your account, or generate a fresh one from the dashboard when logged in. Verified accounts are the ones allowed to create API keys.
sha256(nonce|ts|proof) beginning with 0000) plus a honeypot field.// create an API key
const res = await fetch('https://console-iptracker.pages.dev/console/keys', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: 'Bearer ' + sessionToken,
},
body: JSON.stringify({ name: 'my script' }),
})
const { data } = await res.json()
console.log(data.token) // ipt_... (shown once)
// call the API with that key
const r = await fetch('https://console-iptracker.pages.dev/console/api/v1/links', {
headers: { 'X-API-Key': 'ipt_...' },
})
const { data } = await r.json()