TypeScript SDK: Compliance API

⚠️
Preview — this feature is being built; the design below is the spec.

Enterprise records access with a compliance-scoped Admin key: SynticAdmin(compliance=True) sets the compliance beta flag.

import { SynticAdmin } from '@syntic/sdk'
 
const admin = new SynticAdmin() // reads SYNTIC_ADMIN_KEY
MethodEndpointReturns
compliance.activities.listGET /v1/compliance/activitiesSyncPage[Activity]
compliance.exports.createPOST /v1/compliance/exportsComplianceExport
compliance.exports.downloadGET /v1/compliance/exports/{export_id}/contentNone (writes the file)
compliance.legalHolds.createPOST /v1/compliance/legal_holdsLegalHold

Methods

compliance.activities.list

Iterate activity records. Maps to GET /v1/compliance/activities.

for await (const item of admin.compliance.activities.list({
  starting_at: "2026-11-01T00:00:00Z",
  product: "chat,code"
})) {
  console.log(item)
}

compliance.exports.create

Start a bulk export. Maps to POST /v1/compliance/exports.

const result = await admin.compliance.exports.create({
  kind: "chats",
  starting_at: "2026-10-01T00:00:00Z",
  ending_at: "2026-11-01T00:00:00Z"
})

compliance.exports.download

Stream an export to disk. Maps to GET /v1/compliance/exports/{export_id}/content.

const result = await admin.compliance.exports.download("cexp_01JCS5T7V9X1Z3B5D7F9", {
  path: "chats.jsonl"
})

compliance.legalHolds.create

Preserve records for named people. Maps to POST /v1/compliance/legal_holds.

const result = await admin.compliance.legalHolds.create({
  name: "Matter 2026-117",
  user_ids: [
    "user_01J9Y0A2C4E6G8J0L2N4"
  ]
})

Conventions

Every method accepts a final options object with headers, query, timeout, maxRetries and signal (an AbortSignal). List methods return pages that work with for await across all pages.

See the TypeScript SDK overview for installation, errors and retries.

Was this page helpful?