Developers
Changelog
Changes to the API, the SDKs and the record. Within /v1, changes add fields and endpoints; nothing is removed or renamed without a new version and notice.
Archived records
- Records older than a year (or than your quote retention, if longer) move out of the live database into archive files, one system's month at a time. GET /v1/records/archives lists them with download links; the Record page in the console has them too.
- Each file holds the records exactly as they were sealed, with the decisions on their findings, and checks offline: verifyArchive / verify_archive in the SDKs, or harmwise verify-archive on the command line.
- Chain verification starts no earlier than the last archived record, and says where in archived_through_seq. Archived runs link to each other and to genesis by their hashes.
- A record older than a year is no longer returned by GET /v1/records/{id}, /v1/records or /v1/findings: it is in its archive file.
A monthly allowance on Team; the judge's credit rate
- Team includes 5,000,000 graded replies a month. Beyond them, grading continues on prepaid credit at US$1 per 1,000, and otherwise answers quota_exceeded, as on the other plans. The policy block and the referral are never limited.
- Judged replies beyond the judge's monthly allowance draw on credit at US$60 per 1,000.
Sign in with an email link; billing details in the portal
- Sign in without a password or a Microsoft account: enter your work email and we send a link that works once, for 15 minutes. Organisations linked to a Microsoft tenant still sign in through it.
- Manage billing now lets an owner change the card and update the billing name, email, address, phone and tax ID, as well as download invoices and cancel at the end of the period.
Prepaid credit and automatic top-up
- Beyond the plan's monthly allowance, grading continues on prepaid credit, bought in the console or topped up automatically by an amount the owner chooses, up to a monthly limit they set. Every charge is invoiced by email.
- The model judge has a monthly allowance (10,000 judged replies on Team); beyond it, it runs on credit, and otherwise the record says it did not run and why.
- quota_exceeded now means the allowance is used and there is no credit left. Its Retry-After is a minute when an automatic top-up is being charged.
Model judge and enterprise identity
- An optional model judge (Team and Enterprise) reads in-domain, crisis and non-English turns against the framework's rubric; its findings carry the source judge.
- SCIM 2.0 provisioning at /scim/v2, per-organisation session limits, and audit export from Settings.
Batch grading and Baseline
- POST /v1/grade/batch queues up to 100 replies; GET /v1/grade/batch/{id} reports progress and the records. Idempotent with Idempotency-Key.
- harmwise baseline grades a file of past conversations under a test key and writes a self-contained HTML report, with the instrument's measured limits.
- GET /api/evaluation.json publishes the latest measurement of the router and the grading.
SDKs 0.2
- Serverless: pass waitUntil (Vercel, Cloudflare Workers) so queued grades are sent before the function is frozen.
- Retries wait for Retry-After; a grade over the plan's quota is not retried.
- Typed results, and methods for every read endpoint: records, findings, the compliance summary, the attestation, head proofs, modules and resources.
- Python: flush() waits for the grade being sent as well as those queued; verify_webhook returns False for any malformed header or body instead of raising.
- An MCP server, harmwise mcp, with policy_block, rank_referrals, grade_reply and open_findings tools for agents.
- Middleware for the Vercel AI SDK (versions 5 to 7), and withGuardrail / guard() for any other way of calling a model.
Read the record through the API
- GET /v1/records and GET /v1/records/{id}: your system's sealed records, with cursor paging and filters.
- GET /v1/findings: findings with their workflow status, filtered as in the console.
- GET /v1/compliance/summary: the evidence board for a period, computed from the record.
- GET /v1/attestations: the signed 30-day attestation (Pro and above).
- GET /v1/modules and GET /v1/resources: module versions and release gates, and the referral directory.
- A new problem type, plan_required.
Signed receipts and published heads
- Every grade response carries a receipt signed with Ed25519; keys are published at /.well-known/harmwise-keys.json.
- Attestations are signed, and a Merkle root of every system's chain head is published daily at /heads.
- GET /v1/records/heads returns your system's inclusion proof.
Durable delivery and the grading queue
- POST /v1/grade queues work and retries for up to 24 hours; GET /v1/grade/jobs/{id} reports a job.
- Webhooks are delivered from an outbox and retried for 72 hours, with a delivery log in the console.
- New webhook events: quota.warning, quota.exceeded, chain.broken and the access events.
No disclosures in URLs
- POST /v1/policy/session takes the person's turn in the body. The SDKs use it.
- Records keep a keyed hash of the conversation, never the text; POST /v1/records/{id}/match checks your copy against it.
- POST /v1/instances/{id}/dispute files a false-positive dispute on a finding.
SDKs
- @harmwise/guardrail for TypeScript and harmwise for Python, with a build-time snapshot of the policy block and receipt and attestation verification.
- Every response carries X-Request-Id and rate-limit headers; every problem type has a page under /problems.