The developer door

Decide a shipment in one call.

Send an order, get back a verdict and a worked tax — with every rate version pinned and every rule cited. Authenticate with a pr_ key; keys are issued by name.

POST/v1/checksDecide a shipment — license, eligibility, tax (advisory)
POST/v1/commitmentsBind the decision at fulfillment — idempotent, counts toward volume
POST/v1/tax/quotesTax only — no ledger write
GET/v1/productsList your product catalogue with its quality flags
POST/v1/productsAdd or update a product — classified + flagged on write
PATCH/v1/products/{id}Update a product; re-checks its quality
DELETE/v1/products/{id}Archive a product (or ?hard=true to delete)
GET/v1/decisionsList your decisions — scoped to your key's mode (test or live)
GET/v1/decisions/{id}Replay a past decision with its pinned versions
GET/v1/jurisdictions/{code}/rulesThe published rules in force, by state + date
GET/v1/coverageWhich states are live
# a decision, masked
{
  "decision_id": "dec_••••••",
  "outcome": "allow",
  "gates": {
    "licensure": "pass", "eligibility": "pass", "tax": "pass"
  },
  "tax": { "total": 94.55 },
  "pinned_versions": {
    "rules": ["rv_8c1f… · ca.sales.taxable_measure v1"],
    "rates": ["rv_3a90… · ca.sales.district.campbell v1 · eff 2026-04-01"]
  },
  "engine_version": "1.1.0-stategen"
}

Every figure carries the version it came from. Re-request the same decision id and you get the same answer, citing the same versions. Reference docs are issued with your key.

Sandbox — test keys

Build against real published rules with a pr_test_ key. Test keys are issued by name, like live keys.

We use this only to reach you about Pinrates. No newsletter, no list, no sharing.

real published rulesthe same registry production decides on
segregated ledgeryour test decisions, isolated from live
resettable countersrun the same buyer through the annual cap again