---
title: "Push encrypted sync chunks"
method: POST
path: "/daemon/e2e/sync"
tags: ["E2E Encryption"]
---

# Push encrypted sync chunks

`POST /daemon/e2e/sync`

Upload encrypted chunks with vectors and blind index tokens.
Used by desktop adapters after running `buildE2ESyncBatch()`.
The server never sees plaintext — only ciphertext, embedding vectors, and HMAC tokens.

## Request body

- E2ESyncRequest — Push encrypted chunks for E2E sync.
  - `local_folder_id` string, required — ID of the local folder source to sync to
  - `chunks` E2ESyncChunk[], required — Encrypted sync chunks with vectors and blind index tokens
    - `chunk_id` string, required — Unique chunk identifier
    - `ciphertext` string, required — Base64-encoded AES-256-GCM encrypted content
    - `iv` string, required — Base64-encoded initialization vector
    - `embedding` number[], required — Client-computed embedding vector (zembed-1, 2560 dims)
    - `blind_index_tokens` string[] — HMAC-SHA256 keyword tokens for server-side filtering
    - `contact_hash` string, nullable — HMAC hash of the contact identifier
    - `conversation_hash` string, nullable — HMAC hash of the conversation identifier
    - `day_bucket` string, nullable — Date bucket for time-based filtering (YYYY-MM-DD)
    - `connector_type` string, required — Source adapter type: imessage, whatsapp, notes, contacts, stickies, reminders, screenshots

## Response `200`

Successful Response

- E2ESyncResponse
  - `chunks_accepted` integer, required — Number of chunks successfully stored
  - `chunks_rejected` integer, required — Number of chunks rejected (duplicates or errors)
  - `cursor` string, nullable — Updated sync cursor

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/nozomio-labs/apis/nia-ai-api.md) · [All operations](https://skmtc.net/nozomio-labs/apis/nia-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/nozomio-labs/nia-ai-api/versions/dbb602a3ef17/schema)
