Skip to content
Docs
Esc
navigateopen⌘Jpreview

HTTP API

Authenticate, upload bytes, publish a version, and read shared history.

Use Authorization: Bearer $KNOWLEDGE_TOKEN against the same HTTPS origin that issued the credential. HTTP is allowed only for loopback development. The CLI refuses redirects, avoiding credential forwarding to a different destination. Browser session authentication continues to work on these same resources.

Request Result
GET /api/projects/:id/commits?at= {version} for current main, or null for an empty project
GET /api/projects/:id/commits?at=VERSION Immutable snapshot, including files and parent ID
GET /api/projects/:id/commits {commits} ordered by parent ancestry, newest first
GET /api/projects/:id/files?at=VERSION&path=PATH Exact file bytes; query parameters must be URL encoded
POST /api/projects/:id/files Upload raw bytes with URL-encoded x-file-path and content-type; returns path/hash/size/mediaType plus upload proof for bearer callers
POST /api/projects/:id/commits Publish the JSON request below and return the immutable version receipt
GET /api/projects/:id/events SSE current-head notifications; reconnect and reread after disconnect
POST /api/projects/:id/access Browser-only, same-origin credential issuance; used by /cli
{
  "expectedHead": "VERSION_USED_AS_BASE",
  "operationId": "client-generated-unique-id",
  "summary": "Add research",
  "changes": [{
    "path": "notes.md",
    "hash": "SHA256_RETURNED_BY_UPLOAD",
    "size": 42,
    "mediaType": "text/plain",
    "proof": "PROOF_RETURNED_BY_UPLOAD"
  }],
  "removed": []
}

Use an empty expected head for an empty baseline. Reuse the exact operation ID and intent after uncertain failure; a different intent or actor cannot reuse an accepted operation. Upload proof is scoped to account/project/bytes, validated before publication and excluded from stored manifests. Arbitrary account-wide hashes are not sufficient. Author and account come from verified credentials. For restore, send restoreId instead of changes; the expected head must match exactly. Restore appends a version.

Errors carry an error message (coordination failures also include their Ablo code). Status 400 is invalid input, 401 authentication required, 403 denied upload proof/origin, 404 missing version/project/file, 409 conflict/ownership failure, 413 oversized body and 503 unavailable or uncertain storage outcome. Publication JSON is bounded to 2 MiB. An upload alone never advances main. History is unpaginated in this initial bounded product; SSE is invalidation, not an event-replay guarantee. Shared wire types live in @knowledge/contracts.

Was this page helpful?