TypeScript SDK: Admin API

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

Organization management with an Admin key. Use the separate SynticAdmin client, which reads SYNTIC_ADMIN_KEY and sets the admin beta flag.

import { SynticAdmin } from '@syntic/sdk'
 
const admin = new SynticAdmin() // reads SYNTIC_ADMIN_KEY
MethodEndpointReturns
organization.retrieveGET /v1/organizations/meOrganization
workspaces.createPOST /v1/organizations/workspacesWorkspace
members.listGET /v1/organizations/usersSyncPage[Member]
invites.createPOST /v1/organizations/invitesInvite
apiKeys.updatePATCH /v1/organizations/api_keys/{api_key_id}ApiKey
serviceAccounts.createPOST /v1/organizations/service_accountsServiceAccount
usageReport.messagesGET /v1/organizations/usage_report/messagesUsageReport
costReport.retrieveGET /v1/organizations/cost_reportCostReport
analytics.summaryGET /v1/organizations/analytics/summaryAnalyticsSummary
auditEvents.listGET /v1/organizations/audit_eventsSyncPage[AuditEvent]

Methods

organization.retrieve

Organization info and real plan name. Maps to GET /v1/organizations/me.

const result = await admin.organization.retrieve()

workspaces.create

Create a workspace. Maps to POST /v1/organizations/workspaces.

const result = await admin.workspaces.create({
  name: "support-prod"
})

members.list

List members; auto-paginates. Maps to GET /v1/organizations/users.

for await (const item of admin.members.list({
  role: "developer"
})) {
  console.log(item)
}

invites.create

Invite by email. Maps to POST /v1/organizations/invites.

const result = await admin.invites.create({
  email: "new.hire@example.com",
  role: "developer"
})

apiKeys.update

Rename or disable a key. Maps to PATCH /v1/organizations/api_keys/{api_key_id}.

const result = await admin.apiKeys.update("apikey_01JA0B2D4F6H8K0M2P4R", {
  status: "inactive"
})

serviceAccounts.create

Create a service account. Maps to POST /v1/organizations/service_accounts.

const result = await admin.serviceAccounts.create({
  name: "ci-billing",
  workspace_id: "wrkspc_01JC0A2C4E6G8J0L2N4Q",
  permissions: [
    "inference"
  ]
})

usageReport.messages

Token usage in buckets, grouped as you choose. Maps to GET /v1/organizations/usage_report/messages.

const result = await admin.usageReport.messages({
  starting_at: "2026-11-01T00:00:00Z",
  bucket_width: "1d",
  group_by: [
    "model"
  ]
})

costReport.retrieve

Spend by day and workspace. Maps to GET /v1/organizations/cost_report.

const result = await admin.costReport.retrieve({
  starting_at: "2026-11-01T00:00:00Z"
})

analytics.summary

Headline numbers for a period. Maps to GET /v1/organizations/analytics/summary.

const result = await admin.analytics.summary({
  starting_at: "2026-10-01T00:00:00Z"
})

auditEvents.list

Audit feed, cursor-paginated. Maps to GET /v1/organizations/audit_events.

for await (const item of admin.auditEvents.list({
  action: "api_key.*"
})) {
  console.log(item)
}

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?