TypeScript SDK: Admin API
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| Method | Endpoint | Returns |
|---|---|---|
organization.retrieve | GET /v1/organizations/me | Organization |
workspaces.create | POST /v1/organizations/workspaces | Workspace |
members.list | GET /v1/organizations/users | SyncPage[Member] |
invites.create | POST /v1/organizations/invites | Invite |
apiKeys.update | PATCH /v1/organizations/api_keys/{api_key_id} | ApiKey |
serviceAccounts.create | POST /v1/organizations/service_accounts | ServiceAccount |
usageReport.messages | GET /v1/organizations/usage_report/messages | UsageReport |
costReport.retrieve | GET /v1/organizations/cost_report | CostReport |
analytics.summary | GET /v1/organizations/analytics/summary | AnalyticsSummary |
auditEvents.list | GET /v1/organizations/audit_events | SyncPage[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.