Diceplots API private beta
Three tiers, the same Rust engine. Free unauthenticated for casual integration, free registered for serious development, paid for production traffic. Auth, accounts, and per-tier rate limits are live today; endpoints ship alongside the next engine release.
Tiers
| Tier | Auth | Rate limit | Suitable for |
|---|---|---|---|
| Free unreg | None — anonymous | 30 requests / minute / IP | Try-it-out, scripts, low-volume integrations. |
| Free reg | Account + API key | 300 requests / minute / key | Personal projects, dev work, low-traffic apps. |
| Paid | API key on a paid account | 3,000 requests / minute / key | Production traffic, embedded engine calls, latency-sensitive use. |
Per-key limits are tracked by sliding-window in ETS; the
free-unreg bucket is keyed by remote IP (with
X-Forwarded-For handled at Caddy). On limit
exceeded, the API returns 429 with a JSON body
naming the resolved tier and the per-window cap. Paid-tier
pricing and bulk-purchase contact are below.
Status
The auth, accounts, API-key management, and per-tier rate
limiting are all live in production today. Endpoints are in
private beta — every /api/v1/* request currently
returns 501 Not Implemented with a JSON body
naming the caller's resolved tier so you can kick the tires
on auth and rate-limiting now and integrate against the stub
without waiting for endpoints to ship:
$ curl -i https://diceplots.com/api/v1/strike
HTTP/2 501
content-type: application/json
{
"error": "not_implemented",
"message": "Diceplots API endpoints are in private beta ...",
"resolved_tier": "free_unreg",
"see": "https://diceplots.com/platforms/api"
}
With a key:
$ curl -H "Authorization: Bearer dp_live_..." https://diceplots.com/api/v1/strike
{ "resolved_tier": "free_reg", ... }
Endpoints (private beta)
- Strike — POST one expression + optional HP, get the full distribution + kill probability as exact rationals. Same shape as /strike/:slug but JSON-shaped for programmatic consumers.
- Compare — POST two expressions + HP, get the kill-probability crossover point and per-expression distributions side by side.
- Strikes-to-kill — expected number of strikes + cumulative kill curve. Optional Markov rounds-to-kill with per-round healing for the gambler's-ruin family.
- Cascades — GWM-on-kill, PAM glaive haft, configurable cascade depth + queue HP. The same machinery that powers the cascade pillar.
Accounts and keys
Sign up at /sign-up with email and
password — confirmation link arrives in your inbox; the
account is usable immediately at the
free_reg tier. The
account dashboard manages keys
end-to-end: create, copy-once, revoke, last-used timestamps.
Keys are bcrypt-hashed at rest with a public prefix for
identification; the plaintext is shown exactly once at
creation.
Paid-tier pricing is per-engagement — drop a line to tom@defensiblelogic.com with the rough call volume and integration shape and we'll come back with terms.