---
title: "Advance one bounded segment bootstrap page"
method: POST
path: "/api/v1/ackdb/observe/segments/{id}/bootstrap-page"
tags: ["ackDB"]
---

# Advance one bounded segment bootstrap page

`POST /api/v1/ackdb/observe/segments/{id}/bootstrap-page`

## Request

- Base URL: `http://localhost:3009`
- URL: `http://localhost:3009/api/v1/ackdb/observe/segments/{id}/bootstrap-page`
- Auth: HTTP bearer

Internal Segment Sync expansion contract: evaluates at most one keyset page, returns those exact member ids, and inserts the same ids into an unfinished ackDB snapshot in one short transaction. A downstream ledger consumes this response directly, so initial sync no longer runs the segment filter once for the snapshot and again for the ledger. Replaying an already covered `after` page is idempotent; a cursor ahead of durable progress is rejected. Existing bootstrapped segments use the same endpoint as a live read for additional connections. Pass the first page's `filterHash` as `expectedFilterHash` on later pages; a mid-seed filter edit returns 409 FILTER_CHANGED before writing a mixed page.

## Path parameters

- `id` string, required

## Query parameters

- `after` string
- `limit` integer
- `expectedFilterHash` string

## Response `200`

The exact member page used to advance the snapshot.

- AckdbSegmentBootstrapPageResponse
  - `segmentId` string, required
  - `entityIds` string[], required: Member ids (company entity_id or contact_id), ascending.
  - `nextCursor` string, nullable, required: Pass as ?after= for the next page; null when the set is exhausted.
  - `hasMore` boolean, required
  - `filterHash` string, nullable: The membership's version hash (same value /changes carries). A multi-page seed that sees it change between pages straddles two populations and should restart. Null when edit detection is degraded.
  - `limit` integer, required: The effective page size (the request's `limit` after clamping to [1, 5000]; default 1000).
  - `snapshotComplete` boolean, required: True once ackDB's durable snapshot is complete after this page commits.
  - `maxSeq` integer, required: Change-log head captured with this page.
  - `minRetainedSeq` integer, required: Earliest retained change sequence.

## Other responses

- `400`: Cross-grain request, unknown query parameter, or stale filter.
- `404`: No segment with that id.
- `409`: LOCK_BUSY, FILTER_CHANGED, or BOOTSTRAP_CURSOR_INVALID; no work was committed.
- `503`: SYNC_TABLES_UNAVAILABLE - the segment-sync migration has not run.

---

[API](https://skmtc.dev/floqer/apis/floqer-public-api.md) - [All operations](https://skmtc.dev/floqer/apis/floqer-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/floqer/apis/floqer-public-api/revisions/fce50dc07b20?raw)
