Uteke Cloud / docs

Import / Export

Your memory data is never locked in. Both directions are NDJSON over the same API — move a self-hosted workspace to the cloud, take a backup, or leave with everything.

Export

curl https://your-deployment/api/v2/export \
  -H "Authorization: Bearer utek_YOUR_KEY" \
  -o workspace.ndjson

The response is a stream of JSON objects, one per line. Line 1 is a manifest describing the export; every following line is a memory. Embeddings are not included — entries are re-embedded automatically after an import, so files stay small and portable.

Import

curl https://your-deployment/api/v2/import \
  -H "Authorization: Bearer utek_YOUR_KEY" \
  -H "content-type: application/json" \
  -d "$(jq -Rs '{data: .}' workspace.ndjson)"

The body takes { "data": "…", "namespace": "…" } where data is the raw NDJSON text (or a JSON array of entries). Optional namespace is a default for entries that lack one.

The jq -Rs wrapper reads the file and wraps it as a JSON string safely.

What import preserves

  • IDs and created_at — entries exported from a cloud or OSS workspace keep their identity on re-import.
  • Dedup — identical content is skipped, so re-running an import does not duplicate memories.
  • Atomicity — a malformed entry fails the whole request fast (400 with the line number); there are no partial imports.

Response shape:

{ "imported": 128, "duplicates_skipped": 3, "id_conflicts_skipped": 0, "ignored": 1, "total": 132 }

ignored counts non-memory lines such as the export manifest, which is skipped automatically when you re-import a cloud export file.

Migrating from self-hosted OSS

  1. Run /export against your self-hosted instance (same Bearer auth, same NDJSON format).
  2. Generate a cloud key at /portal/keys.
  3. Run /import against the cloud with the same file. Search is usable immediately; vector recall warms up as re-embedding completes.

Base URL for every example: https://your-deployment/api/v2 · Get a key at /portal/keys