Developers
API changelog
Every change to the Partner API lands here, dated. Email is reserved for what needs your attention — breaking changes, security issues, and terms updates. API reference · Integration guide
Change policy
- Additive changes— new endpoints, new optional parameters, new response fields — ship anytime, changelog-only. Don't rely on field order or on unknown fields being absent.
- Breaking changes are announced by email and here at least 6 monthsbefore they take effect (12 if you're in production on the old behavior), with a migration guide and
Sunsetheaders on affected responses. - Terms changes are emailed at least 30 days before the effective date.
- Security issues — immediate email, no waiting.
- Changed
Proof of Human is now Chronatum — api.chronatum.com is live, api.proofofhuman.fm keeps working
- api.chronatum.com is the new hostname for the same API. api.proofofhuman.fm and beta.api.proofofhuman.fm serve the identical contract from the same infrastructure and keep working, so no integration needs to change. Nothing is being switched off, and no retirement date has been set; if one ever is, it gets the usual 6+ months notice by email and here.
- Nothing about verification changed. Proofs issued before the rename verify exactly as before — the signing key did not change. Their signed statement carries the former name, which is the historical record rather than a failure, and share links issued under the old domain redirect to the new one.
- Background on the rename, and the one-time reinstall the macOS app needs: https://chronatum.com/announcement
- Changed
Proof of Human is now Chronatum — SDK package renaming, wire contract unchanged
- The product is now called Chronatum. The npm package is being renamed @proof-of-human/ts-sdk → @chronatum/ts-sdk, with the client class exported as ChronatumClient (was PoHClient). The new scope is not published yet: keep installing @proof-of-human/ts-sdk 2.7.0 until it is, and the code samples in the docs install and import that name so they run today. Nothing about your integration changes when you switch — it is one import line.
- No API change. Base URLs, the x-api-key header, every request and response shape, every verdict value, and every evidence fact, conflict, and basis code are byte-for-byte identical. Existing integrations keep working with no edit — pinned installs of @proof-of-human/ts-sdk continue to verify against the same endpoints.
- Proofs issued before the rename remain valid and verifiable forever. Their signed statement and embedded format identifiers still carry the former name; that is the historical record, not a failure.
- Added
TypeScript SDK 2.7.0 — decision envelope, partner reviews, canonical session evidence
- Every POST /verify response — success and failure alike — now carries an additive decision envelope for automation: status (verified_binding, needs_review, invalid_proof), stable reason slugs, a recommendedAction, the credential carrier, source-detail coverage, and counts of declarations, conflicts, and unverifiable facts. It is policy-neutral and never labels a track human or AI; needs_review means the evidence report asks for a human decision, not that the credential failed.
- A metadata-only review workflow under /partner/reviews binds a registered proof to your own opaque catalog identifiers (creator, account, submission, track) and tracks evidence requests through to your Accept / Hold / Reject outcome. Chronatum stores workflow state and bounded opaque references only — never source files, licences, creator names, or free-form notes — and review metadata expires after 180 days. Wrapped as partner.createReview, getReview, requestEvidence, updateEvidence, and resolveReview.
- Proofs issued from this release carry session.evidence: activity counters replayed server-side from the signed capture trace, with a per-metric status (observed, not_observed, unsupported, unknown), coverage, and the trace's SHA-256. Client-supplied summaries are compatibility input, never evidence; if one disagrees with the replay, the trace wins and the report records a session_summary_reconciled fact with needs_review status. Render the status instead of a bare zero: an Ableton save channel is unsupported, not silent.
- Evidence reports can include declarations — the creator's raw survey answers as authenticated envelopes with survey version, submission time and id, subject, and an honest authenticated_post_issuance_record binding status (a declaration is recorded after issuance; it is not part of the original proof signature).
- Versions 2.6.1 and 2.6.2 published no spec change (documentation and server-side hardening only); 2.7.0 is the first contract change after 2.6.0.
- Added
TypeScript SDK 2.6.0 — proof records, source-level evidence v2, complete creator declarations
- GET /records/{proofId} returns the registered record for a proof id: song, issue time, bound-audio SHA-256, the structured evidence report, the process note, and credential delivery — without presenting the audio. It is not a verification result and never claims any file matches; confirming a candidate file still requires POST /verify with the file itself. Legacy grade and classification are not on this surface, and erased, never-issued, and still-pending ids return one uniform 404. Wrapped as getProofRecord(proofId).
- Approved commercial integrations can request poh-source-detail-2 for supported Ableton proofs: report-local track and placement identifiers, exact DAW beat ranges with tempo-snapshot second estimates, last-observed clip and track state, bounded source-linked edit counts, and the signed-session time of the latest completed source-map observation. Reading v2 requires the exact pinned v6 creator consent; ordinary and public verification are unchanged, and reports never claim final-mix contribution.
- Evidence reports now publish every answered creator-survey dimension as a creator_declaration fact — favorable and adverse alike: declared origin, AI share band, manual work, contribution band, and a disputed assessment. Previously only six adverse answers surfaced, so an honest declaration could leave no public trace. New conflict code observed_import_vs_creator_origin_declaration marks a directly witnessed import that contradicts a made-from-scratch or majority-self-made declaration; unrecognized fact codes render as raw codes in older readers and no request shape changed.
- Report surfaces now show an explicit “none recorded” state for creator declarations, so a missing survey is distinguishable from hidden declarations.
- Added
TypeScript SDK 2.5.0 — source-aware evidence reports
- GET /proofs, GET /proofs/{proofId}, and POST /verify can now include an optional evidenceReport with direct system observations, rule inferences, creator declarations, explicit conflicts, and unverifiable coverage gaps.
- The new field is additive and backward-compatible. Older proofs can omit it, and clients must handle that state as unavailable source evidence rather than reconstructing facts from a score.
- The legacy grade field remains on the wire for compatibility and internal calibration only. Its values do not have a validated final-audio denominator and must not be presented as human or AI authorship percentages.
- Added
Beta integration environment
- https://beta.api.proofofhuman.fm/v1 is the pre-production endpoint for integration testing: the same contract and authentication as production on isolated infrastructure with separate API keys, a separate registry, and disposable test proofs.
- Beta and production keys are different secrets and never interchangeable. Ask for a beta key alongside your production key, point staging at the beta base URL, and switch to production at go-live.
- No production request or response behavior changed.
- Changed
TypeScript SDK 2.4.1 — quickstart and partner monitoring
- The generated reference, SDK README, curl samples, and AI-agent context now lead with one-file credentialed WAV verification and retain the legacy audio + .poh fallback.
- The integration guide now covers request IDs, safe client telemetry, health/quota checks, retries, and recommended alerts. Chronatum operations now tracks one-file versus legacy verification verdicts per opaque client ID.
- No request or response field changed; existing integrations are unaffected. This ships as an SDK documentation patch.
- Added
TypeScript SDK 2.4.0 — interpretation policy provenance
- Ready process notes can include policyVersion so integrations can identify the fixed presentation policy that produced the report-only summary.
- The field is optional and backward-compatible; credential validity and grade calculations are unchanged.
- Added
TypeScript SDK 2.3.0 — one-file credentialed audio
- POST /verify now accepts uploadId without poh for a Chronatum credentialed WAV; the legacy audio + .poh body remains supported.
- POST /uploads accepts purpose=verify for a 65 MiB slot, GET /proofs/{proofId}/asset retrieves an owned credentialed deliverable, and responses can include embeddedCredential.
- Added
TypeScript SDK 2.2.0 — local device seals
- Verification can return local_seal when an intact artist-device seal was never registered with Chronatum. Treat unknown future verdict values as failed verification.
- This distinguishes an opt-out/local proof from tampering without accepting it as Chronatum-issued.
- Added
TypeScript SDK 2.0.1
- client.health() liveness check; PoHError.requestId on failures; require()/CommonJS support fixed (the SDK now bundles its one dependency — zero runtime deps).
- 2.0.0 carries the deployedAt unix-seconds change below — no other API surface change. npm install @proof-of-human/ts-sdk@^2 (still the published package; it is being renamed @chronatum/ts-sdk — see 2026-08-02).
- Added
Durable audit trail for key lifecycle events
- Every key rotation and expiry now leaves a durable, append-only audit record on your account.
- No API surface change — your integration is unaffected.
- Changed
Request IDs on every response · unix timestamps
- Every API response now carries an X-Request-Id header — quote it when reporting an issue.
- GET /health deployedAt is now unix epoch seconds (was an ISO string). SDK 2.0.0 surfaces requestId on errors.
- Added
Partner key self-service + TypeScript SDK
- GET /partner/keys, POST /partner/keys/rotate (72h grace, Idempotency-Key), GET /partner/usage.
- @proof-of-human/ts-sdk on npm, generated from the same model as the API (being renamed @chronatum/ts-sdk — see 2026-08-02).