# Epoch commitments

Read current graph roots and compare an earlier event-log commitment.


**Auth:** No device authorization.
## Request and response

Angle-bracket values describe placeholders, including nested objects and numeric types; these are wire shapes, not captured service data. Replace them before sending.

```http
GET /v1/graph/epoch/current HTTP/1.1
Host: trust-staging.rebellion.systems
```

Response shape:

```json role="response"
{
  "graphEpochRoot": "<graph-root>",
  "poseidonEpochRoot": "<poseidon-root>",
  "eventLogRoot": "<log-root>",
  "eventLogSize": "<nonnegative-integer>"
}
```




## Current commitment

`GET /v1/graph/epoch/current` requires no authorization. It returns:

```typescript
export type EpochCommitment = {
  graphEpochRoot: string;
  poseidonEpochRoot: string;
  eventLogRoot: string;
  eventLogSize: number;
};
```

`graphEpochRoot` commits to current active edge state. `poseidonEpochRoot` is the circuit-compatible graph commitment. `eventLogRoot` and `eventLogSize` identify the append-only history commitment. Keep a previously trusted root-and-size pair if you want to compare history later.

`eventLogSize` is a non-negative safe integer. `poseidonEpochRoot` is a canonical BN254 field element encoded as `0x` followed by 64 lowercase hexadecimal characters. The current server always returns both fields.

The SDK makes both fields optional for legacy responses and saved snapshots. Missing fields remain absent; they do not become zero or null. Explicit null, malformed values, unsafe or negative sizes, and non-canonical field elements are rejected.

## Append-only report

`POST /v1/graph/epoch/append-only` takes `{eventLogRoot, eventLogSize}`. The size must be a nonnegative integer; malformed request shapes return 400. No device signature is required.

The response contains `appendOnly`, `unsignedServerAssertion: true`, `prior`, `current`, `assertion` and an optional `reason`. The server compares the supplied prior pair with the prefix of its current log at that size.


**Establishes**
A true report says the server's current log is at least as long as the supplied prior log, with the same prefix root. The comparison concerns whether entries in that prefix changed, moved or disappeared.


**Does not establish**
This endpoint returns an unsigned server assertion, not a signed attestation or an independently verified consistency proof. It does not establish the authenticity of the prior pair, completeness of what was logged, or that the reported state is the latest. The current-epoch GET response is also unsigned.

Use the commitment fields inside a verified reachability attestation when you need signed evidence tied to a query. A graph state root may change while earlier event history remains a valid prefix.
