Reference
REST API v1
Browse REST operations, costs, and the OpenAPI contract for parameters, responses, errors, and objects.
Cost per action
Kaneme writes in your tool: no quota, 3 credits per text, for every format and channel.
Compact voice in your tool: your model writes, with 10 free portages per month for each account or Business seat, then 1 credit per call. One call = one portage.
10 credits and 10 free portages each month on Free and Credits accounts. Reset on your signup anniversary day, without rollover; the allowance is spent before purchased credits.
Grant a Kaneme account a Measure or Measure and write visa. The actor pays. The owner sees who, when, which action and which verdict, never the text, and can revoke access at any time. Only the owner publishes a certificate. A visa does not replace the OAuth voice:measure scope.
The surface, counted
- Operations
- 48
- Families
- 8
- Without a key
- 3
- Contract
- OpenAPI · v5.4.0
Find the right one of 48 operations
Send Authorization: Bearer kaneme_… on every protected call. Every response is JSON; every error exposes a stable code.
Voice 22 operations
/api/v1/changesPropose change
/api/v1/changes/{changeId}Get change
/api/v1/historyRead history
/api/v1/exportsExport artifact
/api/v1/voicesList voices
/api/v1/voicesCreate voice
/api/v1/voice/interviewInterview voice
/api/v1/voiceGet voice
/api/v1/voice/contextPrepare voice context
/api/v1/voice/referencesList voice references
/api/v1/voice/referencesAdd voice reference
/api/v1/voice/references/{referenceId}Remove voice reference
/api/v1/voice/references/{referenceId}/restoreRestore voice reference
/api/v1/voice/revision-proposalsList voice revision proposals
/api/v1/voice/revision-proposalsPropose voice revision
/api/v1/voice/revision-proposals/{proposalId}/decisionDecide voice revision
/api/v1/voice/languageSet voice language
/api/v1/voice/assetsList voice assets
/api/v1/voice/assetsAdd voice asset
/api/v1/voice/beliefsList beliefs
/api/v1/voice/subvoicesList subvoices
/api/v1/signalRecord signal
Account 3 operations
/api/v1/meGet account
/api/v1/estimateEstimate cost
/api/v1/voice/executions/estimateEstimate portable verification
Measurement 7 operations
/api/v1/measurements/{measurementId}Get measurement
/api/v1/scoreScore text
/api/v1/verifyVerify authorship
/api/v1/compareCompare texts
/api/v1/certifyCertify document
/api/v1/verdictMeasure authorship
/api/v1/observatory/signalsRead observatory signals
Certificate 3 operations
/api/v1/certificates/preparePrepare certificate
/api/v1/certificates/publishPublish certificate
/api/v1/certificate/{token}Verify certificate
Writing 2 operations
/api/v1/generateGenerate in voice
/api/v1/improveImprove in voice
Projects 4 operations
/api/v1/projectsList projects
/api/v1/projectsCreate project
/api/v1/sourcesAdd project context
/api/v1/projects/{projectId}/contextsList project contexts
Documents 5 operations
/api/v1/documentsList documents
/api/v1/documentsCreate document
/api/v1/documents/{id}Get document
/api/v1/documents/{id}Update document
/api/v1/documents/{id}Delete document
Lifecycle 2 operations
/api/v1/trashList trash
/api/v1/lifecycleManage lifecycle
Generate in your voice
Know which object you’re working with
A writing-pattern review is not a stamp
/score describes local writing patterns. /verify returns a calibrated authorship probability or abstains. A high writing-pattern review never proves who wrote the text.
Start from a brief or improve a draft
/generate starts from a brief. /improve starts from an existing text, preserves its meaning, and returns the before and after measurements.
Project context and evidence are distinct
Project context (/sources) feeds retrieval for one project, and /voice/assets stores evidence attached to one voice.
Create a voice from human texts, then interview it
/voices takes at least 100 words of the author’s real texts with provenance:"human", so generated text can never become its own reference. An interview never creates a voice: /voice/interview completes an existing one, returns a summary to review, and applies it only with ownerApproved:true.
One voice, one language
Each engine measures only its own language, so a voice writes in French or in English. Pass language:"fr" or "en" to /voices, or let the first texts set it. Every voice returns language and languageSource. A text in the other language, or carrying a full sentence of it, is rejected with 422 before any charge, with the passages to fix. A quotation in quotation marks does not count: quoting is not switching language. POST /voice/language, with ownerApproved:true, lets the author confirm or correct the language — the only way out for a legacy mixed voice.
A project connects memory, writing, and proof
Create the project, add context, pass projectId when generating, then publish a certificate only after an explicit user decision.
OpenAPI contract
/.well-known/openapi.json contains parameters, request bodies, responses, abstention and error codes, costs, time budgets, and examples from the same catalog used above.
Contract 2.11.0: GET /api/v1/me and get_account report business when an activated organization pays by default. credits remains the personal balance. organization is null outside a team, otherwise it exposes id, name, role, pays, team credits and memberBudget. The budget is currently null to avoid scanning monthly usage. A voice received through a visa is never the recipient’s active voice.
Offline certificate verification
Contract 2.12: textDigest is SHA-256 over kaneme-text-v1. remove U+200B, U+2060 and U+FEFF (preserve U+200D); NFC; replace every ECMAScript whitespace run (/\s+/gu, including NBSP) with U+0020; trim; UTF-8 without BOM; SHA-256 in lowercase hexadecimal. This step can run locally without sending the text.
Test vector (straight apostrophe, no line break):
Bonjour à tous ! Rock & roll, l'été.
SHA-256: cd58fb5dcf1722b9f2520eddeebedca163883466388f2dbdf5e3b7fb61f08b99Fetch /.well-known/kaneme-certificate-key from the trusted issuer. Select keys by trust.signature.keyId, including retired keys. Recursively sort signedCore object keys, preserve array order, serialize compact JSON (sorted-keys-json) exactly as ECMAScript JSON.stringify does — non-ASCII characters stay unescaped (Python: json.dumps(core, sort_keys=True, separators=(",", ":"), ensure_ascii=False)) —, encode UTF-8, decode the base64url signature and verify Ed25519 using publicKeyPem. Localized claims labels and the response envelope are outside the signature. Existing unsigned certificates stay trust.model=origin; legacy text digests are null. Voice certificates attest no text.
A stored signature attests that Kaneme measured this text on this date, with this result. It does not establish who wrote it. A certificate is an indication, never proof. Trust in the downloaded public key and current revocation status still requires the issuer.
For signed certificates, compare the text with signedCore.textDigest only after verifying the signature, issuer and expected token. Check that the envelope textDigest matches it; an unsigned envelope field is not authenticated by the signature.