> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tckg.factagora.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Base URL, authentication status, time formats, the as_of rule, shared response shapes, and error codes.

## Endpoints

| Method | Path | What it does |
| - | - | - |
| `POST` | `/v1/memories` | [Write nodes and edges](/api-reference/write-memories), optionally as a declared backfill |
| `GET` | `/v1/memories` | [List memories](/api-reference/list-memories) by space and kind |
| `GET` | `/v1/memories/{id}` | [Get one memory](/api-reference/get-memory) |
| `POST` | `/v1/search` | [Time-consistent search](/api-reference/search) with causal expansion |
| `GET` | `/v1/memories/{id}/why` | [Evidence chain](/api-reference/why) of one block |
| `POST` | `/v1/resolve` | [One value](/api-reference/resolve) for one declared fact |
| `POST` | `/v1/facts` | [Declare a fact](/api-reference/facts) and its resolution policy |
| `GET` | `/v1/export` | [Export](/api-reference/export) the ledger as of an instant as a FactBlock bundle |
| `DELETE` | `/v1/memories/{id}` | [Always 501](/api-reference/delete-memory) |
| `GET` | `/v1/version`, `/v1/check_install` | [Operations](/api-reference/ops) |

## Base URL and authentication

The hosted deployment for internal preparation is `https://tckg.factagora.com`. Every path above is appended to the base URL. Bodies are JSON. Timestamps are ISO 8601, timezone included.

<Note>
  A hosted deployment is protected by API keys. Send `Authorization: Bearer <api key>` on every request; `GET /v1/version` is the only open route. Without a valid key you get `401 {"detail": {"error": "TCKG_UNAUTHORIZED"}}`.
  **The key selects the tenant.** Every row you write carries the key's tenant and every read, search, resolve and export is scoped to it, so two apps with different keys never see each other's rows. There is nothing to send: no `tenant` field in a request is read. A local server without a key map is open and single-tenant (`TCKG_TENANT`).
</Note>

Agents can use the same operations as MCP tools at `/mcp`, with the same key: [Connect an agent](/mcp).

## The `as_of` rule

Every read (`GET /v1/memories*`, `search`, `resolve`, `why`, `export`) **requires `as_of`**. Without it:

```json theme={null}
400 {"detail": {"error": "TCKG_AS_OF_REQUIRED",
                "why": "every read says which point in time it asks about"}}
```

A date-only value (`YYYY-MM-DD`) is widened to the end of that day in UTC. A full timestamp is used as is.

## Shared shapes

**NodeRow**, returned by every read:

| Field | Type | |
| - | - | - |
| `id` | string | Unique within the tenant |
| `kind` | string | `entity` `claim` `prediction` `factor` `timeseries` `episode` |
| `tenant`, `space` | string | |
| `statement`, `category` | string or null | |
| `payload` | object | Free-form; `{}` when none |
| `asserted_at`, `captured_at` | timestamp | When it was said; when the server learned it |
| `valid` | `{from, to}` | `to` is null when open |

**Certificate**, on every read response. Keys and meaning are in [Concepts](/concepts#the-certificate).

## Errors

| Status | When |
| - | - |
| `400` `TCKG_AS_OF_REQUIRED` | A read without `as_of` |
| `422` | Body fails validation (missing `space`, wrong types). FastAPI's standard shape |
| `501` `append_only` | Any `DELETE` |

Everything else is `200`, including a write with refused rows and a `resolve` that cannot answer. Look at `refused`, `status`, and `reason` in the body.

## Idempotency

Writes are idempotent by content. Sending the same body twice writes nothing the second time and returns `accepted: 0` with `already_remembered` warnings. Retry freely.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.