Skip to content

API Reference

Generated gateway API reference grouped by operationId namespace.

This page is generated from the gateway’s OpenAPI document that already drives the JS SDK build.

What you see here is pulled from:

  • the checked-in OpenAPI document in packages/sdk/openapi.json
  • the SDK code samples embedded into that document by the gateway generator

Curated prose still belongs in the guide pages. This page is intentionally reference-first.

10 operations

Gateway

#gateway
GET /gateway/v1/internal/agent/wait

Deprecated run wait endpoint

Removed one-shot JSON wait endpoint. Use the internal runtime WebSocket transport instead.

Response

{
  ok: true
  data: {
  removed: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.agent.wait.deprecated({
  ...
})
GET /gateway/v1/internal/event

Deprecated runtime event stream

Removed legacy SSE runtime stream. Use the runtime WebSocket transport instead.

Response

{
  ok: true
  data: {
  removed: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.event.deprecated({
  ...
})
POST /gateway/v1/internal/event/socket-ticket

Deprecated runtime socket ticket

Removed legacy gateway event socket ticket endpoint. Use the runtime lease endpoint instead.

Response

{
  ok: true
  data: {
  removed: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.event.socketTicket({
  ...
})
GET /gateway/health

Gateway health

Gateway liveness check

Response

{
  ok: true
  data: GatewayHealthData = {
  status: "healthy"
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.health({
  ...
})
POST /gateway/v1/internal/managed-app-connections

Create managed app connection

Create a gateway-owned app credential for a runtime-managed plugin app.

Request

{
  appId: string
  name?: string | null | null
  appVersion?: string | null | null
  deviceName?: string | null | null
  scopes?: string[] | null
  spaceSlugs?: string[] | null
}

Response

{
  ok: true
  data: {
  connection: GatewayInternalManagedAppConnection = { ... }
  token: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.internal.managedAppConnection.create({
  ...
})
POST /gateway/v1/internal/managed-app-connections/{connectionId}/revoke

Revoke managed app connection

Parameters

  • connectionId · path · required

Response

{
  ok: true
  data: {
  connectionId: string
  revoked: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.internal.managedAppConnection.revoke({
  ...
})
POST /gateway/v1/internal/services/permission-authorize

Authorize runtime permission request

Block on a runtime-authenticated permission request until policy resolves it

Request

{
  requestId?: string | null
  permissionProviderId?: string | null
  permission: string
  patterns: unknown
  always?: string[] | null
  metadata?: { [key: string]: unknown } | null
  scope?: string | null
  timeoutMs?: unknown | null
  source?: string | null
}

Response

{
  ok: true
  data: {
  decision: "allow" | "deny"
  message?: string | null
  restartRequired?: boolean | null
  mount?: GatewayInternalAdditionalMount | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.internal.permissionAuthorize({
  ...
})
POST /gateway/v1/internal/runtime-event

Forward runtime event

Forward runtime-authenticated runtime event envelope to gateway stream subscribers

Request

{
  event: GatewayInternalRuntimeEventEnvelope = RuntimeEventEnvelope.server.connected | RuntimeEventEnvelope.server.heartbeat | RuntimeEventEnvelope.runtime.session_run.lock_conflict | RuntimeEventEnvelope.runtime.session_run.lock_acquired | RuntimeEventEnvelope.runtime.agent_run.started | RuntimeEventEnvelope.runtime.agent_response.finished | RuntimeEventEnvelope.runtime.agent_run.finished | RuntimeEventEnvelope.runtime.agent_run.failed | RuntimeEventEnvelope.runtime.subagent_run.started | RuntimeEventEnvelope.runtime.subagent_run.finished | RuntimeEventEnvelope.runtime.subagent_run.failed | RuntimeEventEnvelope.runtime.app_event.claimed | RuntimeEventEnvelope.runtime.app_event.completed | RuntimeEventEnvelope.runtime.app_event.failed | RuntimeEventEnvelope.runtime.app_ingress.dropped | RuntimeEventEnvelope.runtime.app_ingress.failed | RuntimeEventEnvelope.runtime.app_channel.outbound_message | RuntimeEventEnvelope.runtime.app_channel.outbound_typing | RuntimeEventEnvelope.runtime.configuration.updated | RuntimeEventEnvelope.runtime.mcp_status.upserted | RuntimeEventEnvelope.runtime.extension_status.upserted | RuntimeEventEnvelope.runtime.extension_status.removed | RuntimeEventEnvelope.runtime.session.updated | RuntimeEventEnvelope.runtime.message.updated | RuntimeEventEnvelope.runtime.message.part.updated | RuntimeEventEnvelope.runtime.message.part.delta | RuntimeEventEnvelope.runtime.permission.asked | RuntimeEventEnvelope.runtime.permission.replied | RuntimeEventEnvelope.runtime.mcp_elicitation.asked | RuntimeEventEnvelope.runtime.mcp_elicitation.replied | RuntimeEventEnvelope.runtime.interaction.asked | RuntimeEventEnvelope.runtime.interaction.replied
}

Response

{
  ok: true
  data: {
  accepted: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.internal.runtimeEvent({
  ...
})
POST /gateway/v1/internal/runtime-ready

Mark runtime instance ready

Store runtime-authenticated readiness for a spawned user runtime

Request

{
  runtimeInstanceId: string
  leaseSecret: string
  socket: {
  host?: string | null | null
  port: unknown & unknown
  path?: string | null | null
  maxFrameBytes?: unknown | null | null
}
}

Response

{
  ok: true
  data: {
  accepted: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.internal.runtimeReady({
  ...
})
GET /gateway/ready

Gateway readiness

Gateway readiness check

Response

{
  ok: true
  data: GatewayReadyData = {
  status: "ready"
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gateway.ready({
  ...
})

8 operations

Sessions

#sessions
POST /gateway/v1/internal/session/{sessionId}/abort

Abort session run

Interrupt a queued or active conversation session run

Parameters

  • sessionId · path · required

Response

{
  ok: true
  data: {
  accepted: true
  sessionId: string
  spaceSlug: string
  interrupted: boolean
  pendingCancelledCount: unknown
  runId?: string | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.abort({
  ...
})
POST /gateway/v1/internal/session/{sessionId}/archive

Archive session

Archive a conversation session

Parameters

  • sessionId · path · required

Response

{
  ok: true
  data: {
  session: Session = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.archive({
  ...
})
POST /gateway/v1/internal/session/{sessionId}/command

Submit session command

Queue a slash command for a specific assistant session bound to one concrete space target

Parameters

  • sessionId · path · required

Request

{
  command: string
  arguments: string
  messageID?: string | null
  idempotencyKey?: string | null
  agentId?: string | null
  subagentId?: unknown | null
  model?: {
  providerID: string
  modelID: string
} | null
  modeId?: SessionPromptModeId = string | null | null
  permissionProviderId?: SessionPromptPermissionProviderId = string | null | null
  variant?: string | null
  serviceTier?: string | null
  crawl?: boolean | null
  parts?: SessionPromptPartInput[] | null
}

Response

{
  ok: true
  data: {
  accepted: true
  eventId: string
  runId: string
  sessionId: string
  spaceSlug: string
  status: "queued" | "running" | "ok" | "error"
  deduplicated?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.command({
  ...
})
POST /gateway/v1/internal/session

Create session

Create a conversation session for one concrete space target, including child spaces.

Request

{
  spaceSlug?: string | null
  title?: string | null
  purpose?: "chat" | "space_settings" | null
}

Response

{
  ok: true
  data: {
  session: Session = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.create({
  ...
})
POST /gateway/v1/internal/session/{sessionId}/fork

Fork session

Create a new conversation session from an existing transcript.

Parameters

  • sessionId · path · required

Request

{
  messageID?: string | null
}

Response

{
  ok: true
  data: {
  session: Session = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.fork({
  ...
})
POST /gateway/v1/internal/session/{sessionId}/message

Submit session prompt

Queue a prompt for a specific session bound to one concrete space target

Parameters

  • sessionId · path · required

Request

{
  messageID?: string | null
  agent?: unknown | null
  agentId?: string | null
  subagentId?: unknown | null
  model?: {
  providerID: string
  modelID: string
} | null
  modeId?: SessionPromptModeId = string | null | null
  permissionProviderId?: SessionPromptPermissionProviderId = string | null | null
  noReply?: boolean | null
  tools?: { [key: string]: unknown } | null
  format?: OutputFormat = { ... } | null
  system?: string | null
  variant?: string | null
  serviceTier?: string | null
  crawl?: boolean | null
  parts: SessionPromptPartInput = TextPartInput | FilePartInput | AgentPartInput | MentionPartInput | SubtaskPartInput[]
  externalEventId?: string | null
  idempotencyKey?: string | null
}

Response

{
  ok: true
  data: {
  accepted: true
  eventId: string
  runId: string
  sessionId: string
  spaceSlug: string
  status: "queued" | "running" | "ok" | "error"
  deduplicated?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.prompt({
  ...
})
PATCH /gateway/v1/internal/session/{sessionId}

Rename session

Rename a conversation session

Parameters

  • sessionId · path · required

Request

{
  title: string
}

Response

{
  ok: true
  data: {
  session: Session = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.rename({
  ...
})
POST /gateway/v1/internal/session/{sessionId}/uploads

Upload session file

Upload a conversation-scoped file into server storage and mount it for the session

Parameters

  • sessionId · path · required

Response

{
  ok: true
  data: {
  session: Session = { ... }
  file: SessionUploadedFile = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.sessions.uploads({
  ...
})

3 operations

Spaces

#spaces
GET /gateway/v1/internal/spaces

List spaces

List spaces available to the runtime user

Parameters

  • chatJid · query

Response

{
  ok: true
  data: {
  spaces: Space[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.spaces.list({
  ...
})
GET /gateway/v1/internal/spaces/model

Space model catalog

List model choices and strict variant options for a space

Parameters

  • spaceSlug · query

Response

{
  ok: true
  data: {
  spaceSlug: string
  defaultModel?: ModelDescriptor | null
  effectiveModel?: ModelDescriptor | null
  overrideModel?: ModelDescriptor | null
  models: SpaceModelCatalogModel[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.spaces.model({
  ...
})
GET /gateway/v1/internal/spaces/prompt-search

Search prompt trigger results for a space

Search normalized prompt results for an active trigger in a space.

Parameters

  • spaceSlug · query
  • sessionId · query
  • triggerId · query · required
  • query · query
  • limit · query

Response

{
  ok: true
  data: {
  spaceSlug: string
  triggerId: string
  results: SpacePromptSearchEntry[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.spaces.searchPromptTrigger({
  ...
})

86 operations

Users

#users
DELETE /gateway/v1/internal/users/{userId}/auth/password

Clear user password

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  userId: string
  password: GatewayUserPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.auth.password.clear({
  ...
})
GET /gateway/v1/internal/users/{userId}/auth/password

Get user password status

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  userId: string
  password: GatewayUserPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.auth.password.get({
  ...
})
POST /gateway/v1/internal/users/{userId}/auth/password

Set user password

Parameters

  • userId · path · required

Request

{
  password: string
}

Response

{
  ok: true
  data: {
  userId: string
  password: GatewayUserPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.auth.password.set({
  ...
})
POST /gateway/v1/internal/users/{userId}/auth/tokens

Create user access token

Parameters

  • userId · path · required

Request

{
  name?: string | null
}

Response

{
  ok: true
  data: {
  userId: string
  token: string
  tokenInfo: GatewayUserAccessToken = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.auth.tokens.create({
  ...
})
GET /gateway/v1/internal/users/{userId}/auth/tokens

List user access tokens

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  userId: string
  tokens: GatewayUserAccessToken[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.auth.tokens.list({
  ...
})
DELETE /gateway/v1/internal/users/{userId}/auth/tokens/{tokenId}

Revoke user access token

Parameters

  • userId · path · required
  • tokenId · path · required

Response

{
  ok: true
  data: {
  userId: string
  tokenId: string
  revoked: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.auth.tokens.revoke({
  ...
})
POST /gateway/v1/internal/users

Create user

Create or upsert a runtime user

Request

{
  userId: string
  password?: string | null
  serverPassword?: string | null
}

Response

{
  ok: true
  data: {
  user: GatewayUser = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.create({
  ...
})
DELETE /gateway/v1/internal/users/{userId}

Delete user

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  removed: boolean
  userId: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.delete({
  ...
})
POST /gateway/v1/internal/users/installables/update-outdated

Update outdated installables for every active user

Response

{
  ok: true
  data: {
  checked: unknown
  updated: unknown
  skipped: unknown
  failed: unknown
  items: { ... }[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.installables.updateOutdated({
  ...
})
GET /gateway/v1/internal/users

List users

List known control-plane users

Parameters

  • includeInactive · query

Response

{
  ok: true
  data: {
  users: GatewayUser[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.list({
  ...
})
GET /gateway/v1/internal/users/me/apps

List current user app connections

Response

{
  ok: true
  data: {
  userId: string
  connections: GatewayUserAppConnection[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.apps.list({
  ...
})
POST /gateway/v1/internal/users/me/apps/pair-requests/{pairRequestId}/approve

Approve pending app pair request

Parameters

  • pairRequestId · path · required

Request

{
  scopes?: string[] | null
  spaceSlugs?: string[] | null
}

Response

{
  ok: true
  data: {
  request: GatewayAppPairRequest = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.apps.pairRequests.approve({
  ...
})
POST /gateway/v1/internal/users/me/apps/pair-requests/{pairRequestId}/deny

Deny pending app pair request

Parameters

  • pairRequestId · path · required

Response

{
  ok: true
  data: {
  request: GatewayAppPairRequest = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.apps.pairRequests.deny({
  ...
})
GET /gateway/v1/internal/users/me/apps/pair-requests

List pending app pair requests

Response

{
  ok: true
  data: {
  requests: GatewayAppPairRequest[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.apps.pairRequests.list({
  ...
})
POST /gateway/v1/internal/users/me/apps/{connectionId}/revoke

Revoke current user app connection

Parameters

  • connectionId · path · required

Response

{
  ok: true
  data: {
  userId: string
  connectionId: string
  revoked: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.apps.revoke({
  ...
})
DELETE /gateway/v1/internal/users/me/apps/revoked

Delete revoked current user app connections

Response

{
  ok: true
  data: {
  userId: string
  deleted: number | "NaN" | "Infinity" | "-Infinity" | "Infinity" | "-Infinity" | "NaN"
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.apps.revoked.delete({
  ...
})
DELETE /gateway/v1/internal/users/me/auth/password

Clear current user password

Request

{
  currentPassword?: string | null
}

Response

{
  ok: true
  data: {
  userId: string
  password: GatewayUserPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.password.clear({
  ...
})
GET /gateway/v1/internal/users/me/auth/password

Get current user password status

Response

{
  ok: true
  data: {
  userId: string
  password: GatewayUserPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.password.get({
  ...
})
POST /gateway/v1/internal/users/me/auth/password

Set current user password

Request

{
  password: string
  currentPassword?: string | null
}

Response

{
  ok: true
  data: {
  userId: string
  password: GatewayUserPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.password.set({
  ...
})
PUT /gateway/v1/internal/users/me/auth/providers/{providerId}/api-key

Set current user provider API key

Parameters

  • providerId · path · required

Request

{
  apiKey: string
}

Response

{
  ok: true
  data: {
  providerId: string
  cleared?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.providers.apiKey.set({
  ...
})
DELETE /gateway/v1/internal/users/me/auth/providers/{providerId}

Clear current user provider auth

Parameters

  • providerId · path · required

Response

{
  ok: true
  data: {
  providerId: string
  cleared?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.providers.clear({
  ...
})
GET /gateway/v1/internal/users/me/auth/providers

List current user auth providers

Response

{
  ok: true
  data: {
  providers: GatewayProviderAuthProvider[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.providers.list({
  ...
})
POST /gateway/v1/internal/users/me/auth/providers/{providerId}/oauth/authorize

Start current user provider OAuth

Parameters

  • providerId · path · required

Response

{
  ok: true
  data: {
  step: GatewayProviderAuthStep = { ... } | { ... } | { ... } | { ... } | { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.providers.oauth.authorize({
  ...
})
POST /gateway/v1/internal/users/me/auth/providers/{providerId}/oauth/callback

Continue current user provider OAuth

Parameters

  • providerId · path · required

Request

{
  loginId: string
  value?: string | null
}

Response

{
  ok: true
  data: {
  step: GatewayProviderAuthStep = { ... } | { ... } | { ... } | { ... } | { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.auth.providers.oauth.callback({
  ...
})
POST /gateway/v1/internal/users/me/default-space

Set current user default space

Request

{
  spaceId?: string | null
  spaceSlug?: string | null
}

Response

{
  ok: true
  data: {
  user: GatewayUser = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.defaultSpace.set({
  ...
})
POST /gateway/v1/internal/users/me/dictation/cancel

Cancel current user dictation

Response

{
  ok: true
  data: {
  state: "idle" | "recording"
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.dictation.cancel({
  ...
})
GET /gateway/v1/internal/users/me/dictation

Get current user dictation services

Response

{
  ok: true
  data: GatewayDictationSelection = {
  selectedDictationServiceId: string | null
  selectionMode: "auto" | "none" | "selected"
  services: GatewayDictationService[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.dictation.get({
  ...
})
POST /gateway/v1/internal/users/me/dictation/service

Set current user dictation service

Request

{
  dictationServiceId: string | null
}

Response

{
  ok: true
  data: GatewayDictationSelection = {
  selectedDictationServiceId: string | null
  selectionMode: "auto" | "none" | "selected"
  services: GatewayDictationService[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.dictation.service.set({
  ...
})
POST /gateway/v1/internal/users/me/dictation/start

Start current user dictation

Response

{
  ok: true
  data: {
  state: "idle" | "recording"
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.dictation.start({
  ...
})
POST /gateway/v1/internal/users/me/dictation/stop

Stop current user dictation

Response

{
  ok: true
  data: {
  text: string
  model: string
  backend: string
  language?: string | null
  durationSeconds: number | "NaN" | "Infinity" | "-Infinity" | "Infinity" | "-Infinity" | "NaN"
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.dictation.stop({
  ...
})
DELETE /gateway/v1/internal/users/me/extensions/{extensionId}

Delete current user installed extension

Parameters

  • extensionId · path · required

Response

{
  ok: true
  data: {
  userId: string
  extensionId: string
  deleted: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.extensions.delete({
  ...
})
POST /gateway/v1/internal/users/me/extensions/import-local

Import current user extension from a local folder

Request

{
  folderPath: string
}

Response

{
  ok: true
  data: {
  userId: string
  extension: GatewayUserInstalledExtension = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.extensions.importLocal({
  ...
})
GET /gateway/v1/internal/users/me/extensions

List current user installed extensions

Response

{
  ok: true
  data: {
  userId: string
  extensions: GatewayUserInstalledExtension[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.extensions.list({
  ...
})
POST /gateway/v1/internal/users/me/extensions/{extensionId}/reload

Reload current user installed extension

Parameters

  • extensionId · path · required

Response

{
  ok: true
  data: {
  userId: string
  extension: GatewayUserInstalledExtension = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.extensions.reload({
  ...
})
PATCH /gateway/v1/internal/users/me/extensions/{extensionId}/status

Set current user installed extension status

Parameters

  • extensionId · path · required

Request

{
  status: "active" | "disabled"
}

Response

{
  ok: true
  data: {
  userId: string
  extension: GatewayUserInstalledExtension = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.extensions.status.patch({
  ...
})
GET /gateway/v1/internal/users/me

Get current user

Response

{
  ok: true
  data: {
  user: GatewayUser = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.get({
  ...
})
POST /gateway/v1/internal/users/me/installable-images/resolve

Resolve current user installable image

Request

{
  kind: "marketplace_primitive"
  itemKind: "extension" | "plugin" | "skill" | "tool"
  repoId: string
  itemId: string
} | {
  kind: "installed_extension"
  extensionId: string
} | {
  kind: "installed_skill"
  skillId: string
} | {
  kind: "installed_tool"
  toolPackageId: string
} | {
  kind: "service_plugin"
  pluginId: string
}

Response

{
  ok: true
  data: {
  dataUrl: string | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.installableImages.resolve({
  ...
})
GET /gateway/v1/internal/users/me/installables/available/{kind}/{repoId}/{itemId}

Get current user available installable detail

Parameters

  • kind · path · required
  • repoId · path · required
  • itemId · path · required

Response

{
  ok: true
  data: {
  userId: string
  detail: GatewayInstallableDetail = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.installables.available.detail({
  ...
})
GET /gateway/v1/internal/users/me/installables/installed/{kind}/{installedId}

Get current user installed installable detail

Parameters

  • kind · path · required
  • installedId · path · required

Response

{
  ok: true
  data: {
  userId: string
  detail: GatewayInstallableDetail = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.installables.installed.detail({
  ...
})
DELETE /gateway/v1/internal/users/me/marketplace/auth/github

Clear current user GitHub marketplace token

Response

{
  ok: true
  data: {
  connected: boolean
  updatedAt: string | null
  cleared?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplace.auth.github.clear({
  ...
})
GET /gateway/v1/internal/users/me/marketplace/auth/github

Get current user GitHub marketplace auth status

Response

{
  ok: true
  data: {
  connected: boolean
  updatedAt: string | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplace.auth.github.get({
  ...
})
PUT /gateway/v1/internal/users/me/marketplace/auth/github

Store current user GitHub marketplace token

Request

{
  token: string
}

Response

{
  ok: true
  data: {
  connected: boolean
  updatedAt: string | null
  cleared?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplace.auth.github.set({
  ...
})
POST /gateway/v1/internal/users/me/marketplace/install

Install one marketplace primitive for current user

Request

{
  kind: "extension" | "plugin" | "skill" | "tool"
  repoId: string
  itemId: string
}

Response

{
  ok: true
  data: {
  userId: string
  item: GatewayMarketplacePrimitive = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplace.install({
  ...
})
POST /gateway/v1/internal/users/me/marketplace/items/install

Install one marketplace primitive for current user

Request

{
  kind: "extension" | "plugin" | "skill" | "tool"
  repoId: string
  itemId: string
}

Response

{
  ok: true
  data: {
  userId: string
  item: GatewayMarketplacePrimitive = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplace.items.install({
  ...
})
GET /gateway/v1/internal/users/me/marketplace/items

List available marketplace primitives for current user

Response

{
  ok: true
  data: {
  userId: string
  items: GatewayMarketplacePrimitive[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplace.items.list({
  ...
})
DELETE /gateway/v1/internal/users/me/marketplace-repos/{repoId}

Delete current user marketplace repo

Parameters

  • repoId · path · required

Response

{
  ok: true
  data: {
  userId: string
  repoId: string
  deleted: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplaceRepos.delete({
  ...
})
GET /gateway/v1/internal/users/me/marketplace-repos

List current user marketplace repos

Response

{
  ok: true
  data: {
  userId: string
  repos: GatewayMarketplaceRepo[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplaceRepos.list({
  ...
})
POST /gateway/v1/internal/users/me/marketplace-repos

Add or update current user marketplace repo

Request

{
  sourceKind: "local"
  repoId: string
  displayName?: string | null
  localPath: string
} | {
  sourceKind: "github"
  repoId: string
  displayName?: string | null
  githubOwner: string
  githubRepo: string
  githubRef: string
}

Response

{
  ok: true
  data: {
  userId: string
  repo: GatewayMarketplaceRepo = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.marketplaceRepos.upsert({
  ...
})
POST /gateway/v1/internal/users/me/plugins/{pluginId}/actions/{actionId}

Invoke current user plugin action

Parameters

  • pluginId · path · required
  • actionId · path · required

Request

{
  input?: { [key: string]: unknown } | null | null
}

Response

{
  ok: true
  data: {
  userId: string
  pluginId: string
  actionId: string
  status: { [key: string]: unknown } | null
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.plugins.actions.invoke({
  ...
})
GET /gateway/v1/internal/users/me/plugins

List current user configurable plugins

Response

{
  ok: true
  data: {
  userId: string
  plugins: GatewayUserPlugin[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.plugins.list({
  ...
})
PUT /gateway/v1/internal/users/me/plugins/{pluginId}/settings

Update current user plugin settings

Parameters

  • pluginId · path · required

Request

{
  settings: { [key: string]: unknown } | null
}

Response

{
  ok: true
  data: {
  userId: string
  plugin: GatewayUserPlugin = { ... }
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.plugins.settings.put({
  ...
})
GET /gateway/v1/internal/users/me/plugins/{pluginId}/status

Get current user plugin status

Parameters

  • pluginId · path · required

Response

{
  ok: true
  data: {
  userId: string
  pluginId: string
  status: { [key: string]: unknown }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.plugins.status.get({
  ...
})
PATCH /gateway/v1/internal/users/me/plugins/{pluginId}/status

Set current user plugin runtime status

Parameters

  • pluginId · path · required

Request

{
  enabled: boolean
}

Response

{
  ok: true
  data: {
  userId: string
  plugin: GatewayUserPlugin = { ... }
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.plugins.status.patch({
  ...
})
POST /gateway/v1/internal/users/me/runtime/lease

Create current user runtime lease

Request

{
  clientKind: string
  shellMode?: "desktop" | "web-attached" | "web-detached" | null
  profileKind?: "local" | "remote" | null
  origin?: string | null
  sessionId?: string | null
  spaceSlug?: string | null
  scopes?: string[] | null
}

Response

{
  ok: true
  data: {
  leaseId: string
  runtimeInstanceId: string
  transportMode: "direct" | "tunneled"
  socketUrl: string
  token: string
  expiresAt: string
  capabilities: {
  commandSocket: true
  uploads: true
}
  maxFrameBytes: unknown
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.runtime.lease({
  ...
})
GET /gateway/v1/internal/users/me/runtime/ready

Get current user runtime readiness

Response

{
  ok: true
  data: {
  runtime: GatewayUserRuntimeState = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.runtime.ready({
  ...
})
DELETE /gateway/v1/internal/users/me/skills/{skillId}

Delete current user installed skill

Parameters

  • skillId · path · required

Response

{
  ok: true
  data: {
  userId: string
  skillId: string
  deleted: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.skills.delete({
  ...
})
POST /gateway/v1/internal/users/me/skills/import-local

Import current user skill from a local folder

Request

{
  folderPath: string
}

Response

{
  ok: true
  data: {
  userId: string
  skill: GatewayInstalledSkill = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.skills.importLocal({
  ...
})
GET /gateway/v1/internal/users/me/skills

List current user installed skills

Response

{
  ok: true
  data: {
  userId: string
  skills: GatewayInstalledSkill[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.skills.list({
  ...
})
POST /gateway/v1/internal/users/me/skills/{skillId}/reload

Reload current user installed skill

Parameters

  • skillId · path · required

Response

{
  ok: true
  data: {
  userId: string
  skill: GatewayInstalledSkill = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.skills.reload({
  ...
})
PATCH /gateway/v1/internal/users/me/skills/{skillId}/status

Set current user installed skill status

Parameters

  • skillId · path · required

Request

{
  status: "active" | "disabled"
}

Response

{
  ok: true
  data: {
  userId: string
  skill: GatewayInstalledSkill = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.skills.status.set({
  ...
})
POST /gateway/v1/internal/users/me/spaces/{spaceSlug}/apply

Apply current user space config

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  userId: string
  space: GatewayUserSpace = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.apply({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/capabilities

Get current user space capabilities

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: { [key: string]: unknown }
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.capabilities.get({
  ...
})
DELETE /gateway/v1/internal/users/me/spaces/{spaceSlug}/capabilities/tools/{toolId}

Clear current user space tool override

Parameters

  • spaceSlug · path · required
  • toolId · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  toolId: string
  cleared: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.capabilities.tools.clear({
  ...
})
PUT /gateway/v1/internal/users/me/spaces/{spaceSlug}/capabilities/tools/{toolId}

Set current user space tool override

Parameters

  • spaceSlug · path · required
  • toolId · path · required

Request

{
  enabled: boolean
}

Response

{
  ok: true
  data: {
  userId: string
  spaceSlug: string
  toolId: string
  enabled: boolean
  updatedAt: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.capabilities.tools.set({
  ...
})
POST /gateway/v1/internal/users/me/spaces

Create current user space

Request

{
  slug?: string | null
  displayName?: string | null
  description?: string | null | null
  parentSpaceSlug?: string | null | null
  workspaceMode?: "shared" | "isolated" | "hybrid" | null
  workingDirectory?: string | null
  additionalMounts?: { ... }[] | null
}

Response

{
  ok: true
  data: {
  userId: string
  space: GatewayUserSpace = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.create({
  ...
})
DELETE /gateway/v1/internal/users/me/spaces/{spaceSlug}

Delete current user space

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  userId: string
  spaceSlug: string
  deleted: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.delete({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/extensions

List current user space extensions

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  extensions: GatewayUserSpaceExtension[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.extensions.list({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/extensions/runtime-config

List current user space extension runtime configs

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  extensions: GatewayUserSpaceExtensionRuntimeConfig[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.extensions.runtimeConfig({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/extensions/runtime-status

List current user space extension runtime statuses

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  statuses: { [key: string]: unknown }[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.extensions.runtimeStatus({
  ...
})
PUT /gateway/v1/internal/users/me/spaces/{spaceSlug}/extensions/{extensionId}

Update current user space extension

Parameters

  • spaceSlug · path · required
  • extensionId · path · required

Request

{
  enabled: boolean
  settings?: { [key: string]: unknown } | null | null
  selectedAgentId?: string | null | null
}

Response

{
  ok: true
  data: {
  spaceSlug: string
  extension: GatewayUserSpaceExtension = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.extensions.update({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/mcp-servers/capabilities

Get current user space MCP server capabilities

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  capabilities: {
  tools: { ... }[]
  resources: { ... }[]
  prompts: { ... }[]
}
  statuses: { ... }[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.mcpServers.capabilities({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/mcp-servers

List current user space MCP servers

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  servers: GatewayUserSpaceMcpServer[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.mcpServers.list({
  ...
})
PATCH /gateway/v1/internal/users/me/spaces/{spaceSlug}/mcp-servers/{serverId}

Update current user space MCP server

Parameters

  • spaceSlug · path · required
  • serverId · path · required

Request

{
  enabled: boolean
  settings?: { [key: string]: unknown } | null | null
  skipRuntimeRefresh?: boolean | null
}

Response

{
  ok: true
  data: {
  spaceSlug: string
  server: GatewayUserSpaceMcpServer = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.mcpServers.update({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/skills

List current user space skills

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  skills: GatewayUserSpaceSkill[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.skills.list({
  ...
})
PUT /gateway/v1/internal/users/me/spaces/{spaceSlug}/skills/{skillId}

Update current user space skill

Parameters

  • spaceSlug · path · required
  • skillId · path · required

Request

{
  enabled: boolean
}

Response

{
  ok: true
  data: {
  spaceSlug: string
  skill: GatewayUserSpaceSkill = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.skills.update({
  ...
})
POST /gateway/v1/internal/users/me/spaces/{spaceSlug}/tasks/{taskId}/run

Run current user task

Parameters

  • spaceSlug · path · required
  • taskId · path · required

Request

{
  sessionId?: string | null
}

Response

{
  ok: true
  data: {
  sessionId: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.tasks.run({
  ...
})
GET /gateway/v1/internal/users/me/spaces/{spaceSlug}/tools

List current user space tools

Parameters

  • spaceSlug · path · required

Response

{
  ok: true
  data: {
  spaceSlug: string
  tools: GatewayUserSpaceToolPackage[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.tools.list({
  ...
})
PATCH /gateway/v1/internal/users/me/spaces/{spaceSlug}/tools/{toolPackageId}

Update current user space tool

Parameters

  • spaceSlug · path · required
  • toolPackageId · path · required

Request

{
  enabled: boolean
}

Response

{
  ok: true
  data: {
  spaceSlug: string
  tool: GatewayUserSpaceToolPackage = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.tools.update({
  ...
})
PATCH /gateway/v1/internal/users/me/spaces/{spaceSlug}

Update current user space

Parameters

  • spaceSlug · path · required

Request

{
  displayName?: string | null
  description?: string | null | null
  parentSpaceSlug?: string | null | null
  workspaceMode?: "shared" | "isolated" | "hybrid" | null
  workingDirectory?: string | null
  primaryAgentId?: string | null | null
  primarySubagentId?: string | null | null
  model?: GatewayModelDescriptor | null | null
  permissionProviderId?: string | null | null
  modeId?: string | null | null
  additionalMounts?: { ... }[] | null
}

Response

{
  ok: true
  data: {
  userId: string
  space: GatewayUserSpace = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.me.spaces.update({
  ...
})
POST /gateway/v1/internal/users/{userId}/pause

Pause user

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  user: GatewayUser = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.pause({
  ...
})
POST /gateway/v1/internal/users/{userId}/plugins/{pluginId}/actions/{actionId}

Invoke user plugin action

Parameters

  • userId · path · required
  • pluginId · path · required
  • actionId · path · required

Request

{
  input?: { [key: string]: unknown } | null | null
}

Response

{
  ok: true
  data: {
  userId: string
  pluginId: string
  actionId: string
  status: { [key: string]: unknown } | null
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.plugins.actions.invoke({
  ...
})
GET /gateway/v1/internal/users/{userId}/plugins

List user configurable plugins

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  userId: string
  plugins: GatewayUserPlugin[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.plugins.list({
  ...
})
PUT /gateway/v1/internal/users/{userId}/plugins/{pluginId}/settings

Update user plugin settings

Parameters

  • userId · path · required
  • pluginId · path · required

Request

{
  settings: { [key: string]: unknown } | null
}

Response

{
  ok: true
  data: {
  userId: string
  plugin: GatewayUserPlugin = { ... }
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.plugins.settings.put({
  ...
})
GET /gateway/v1/internal/users/{userId}/plugins/{pluginId}/status

Get user plugin status

Parameters

  • userId · path · required
  • pluginId · path · required

Response

{
  ok: true
  data: {
  userId: string
  pluginId: string
  status: { [key: string]: unknown }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.plugins.status.get({
  ...
})
PATCH /gateway/v1/internal/users/{userId}/plugins/{pluginId}/status

Set user plugin runtime status

Parameters

  • userId · path · required
  • pluginId · path · required

Request

{
  enabled: boolean
}

Response

{
  ok: true
  data: {
  userId: string
  plugin: GatewayUserPlugin = { ... }
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.plugins.status.patch({
  ...
})
POST /gateway/v1/internal/users/{userId}/resume

Resume user

Parameters

  • userId · path · required

Response

{
  ok: true
  data: {
  user: GatewayUser = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.users.resume({
  ...
})

15 operations

Apps

#apps
GET /gateway/v1/apps/agent/wait

Deprecated app wait endpoint

Removed one-shot JSON wait endpoint. Use the Apps runtime WebSocket lease instead.

Response

{
  ok: true
  data: {
  accepted: true
  eventId: string
  ingressEventId: string
  deduplicated?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.agent.wait.deprecated({
  ...
})
GET /gateway/v1/apps/connection/current

Get current paired app connection

Response

{
  ok: true
  data: {
  connection: {
  id: string
  userId: string
  appId: string
  name: string
  appVersion: string | null
  deviceName: string | null
  scopes: string[]
  spaceSlugs: string[]
}
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.connection.current({
  ...
})
POST /gateway/v1/apps/connection/revoke

Revoke current paired app connection

Response

{
  ok: true
  data: {
  revoked: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.connection.revoke({
  ...
})
POST /gateway/v1/apps/events

Submit app event

Queue an external app ingress event for watcher dispatch

Request

{
  type?: string | null
  content: string
  externalEventId?: string | null
  metadata?: { [key: string]: unknown } | null
  spaceSlug?: string | null
  space?: string | null
}

Response

{
  ok: true
  data: {
  accepted: true
  eventId: string
  ingressEventId: string
  deduplicated?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.events.create({
  ...
})
GET /gateway/v1/apps/events

Deprecated app event stream

Removed legacy app event SSE stream. Use the Apps runtime WebSocket lease instead.

Response

{
  ok: true
  data: {
  accepted: true
  eventId: string
  ingressEventId: string
  deduplicated?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.events.stream.deprecated({
  ...
})
POST /gateway/v1/apps/events/types

Register app event types

Register typed event names and optional JSON schema hints for this app connection.

Request

{
  types: unknown & unknown
}

Response

{
  ok: true
  data: {
  types: AppEventType[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.events.types.register({
  ...
})
POST /gateway/v1/apps/pair

Create app pairing request

Create a local pairing request for a user to approve in Aster.

Request

{
  app: {
  id: string
  name?: string | null
  version?: string | null | null
}
  deviceName?: string | null | null
  scopes?: string[] | null | null
  spaceSlugs?: string[] | null
  ttlMs?: unknown & unknown | null
}

Response

{
  ok: true
  data: {
  request: GatewayAppPairRequest = { ... }
  secret: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.pair.create({
  ...
})
GET /gateway/v1/apps/pair/{pairRequestId}

Get app pairing request status

Poll a local pairing request. Approved responses include the app credential token once.

Parameters

  • pairRequestId · path · required

Response

{
  ok: true
  data: {
  request: GatewayAppPairRequest = { ... }
  token?: string | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.pair.get({
  ...
})
POST /gateway/v1/apps/runtime/lease

Create app runtime lease

Request

{
  clientKind?: string | null
  shellMode?: "desktop" | "web-attached" | "web-detached" | null
  profileKind?: "local" | "remote" | null
  origin?: string | null
}

Response

{
  ok: true
  data: {
  leaseId: string
  runtimeInstanceId: string
  transportMode: "direct" | "tunneled"
  socketUrl: string
  token: string
  expiresAt: string
  capabilities: {
  commandSocket: true
  uploads: true
}
  maxFrameBytes: unknown
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.runtime.lease({
  ...
})
GET /gateway/v1/apps/runtime/ready

Get app runtime readiness

Response

{
  ok: true
  data: {
  runtime: {
  userId: string
  runtimeInstanceId: string | null
  ready: boolean
  lifecycleState: string
}
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.runtime.ready({
  ...
})
POST /gateway/v1/apps/connect

Create app socket ticket

Create a short-lived one-time ticket for the durable paired app WebSocket.

Response

{
  ok: true
  data: GatewayAppSocketTicket = {
  ticket: string
  url: string
  expiresAt: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.socket.connect({
  ...
})
POST /gateway/v1/apps/socket-ticket

Create app socket ticket

Create a short-lived one-time ticket for the durable paired app WebSocket.

Response

{
  ok: true
  data: GatewayAppSocketTicket = {
  ticket: string
  url: string
  expiresAt: string
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.socket.ticket({
  ...
})
POST /gateway/v1/apps/spaces/make

Create an app-owned space module

Create a space backed by a managed TypeScript space module.

Request

{
  slug: string
  displayName: string
  description?: string | null | null
  parentSpaceSlug?: string | null | null
  workspaceMode?: "shared" | "isolated" | "hybrid" | null
  workingDirectory?: string | null
  moduleSource: string
  moduleManifest: AppSpaceModuleManifest = {
  version: 1
  slug: string
  id: string
  name: string
  displayName: string
  description: string | null
  composition: { [key: string]: unknown }
}
}

Response

{
  ok: true
  data: {
  space: GatewayUserSpace = { ... }
  module: GatewayAppManagedSpaceModule = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.spaces.make({
  ...
})
PATCH /gateway/v1/apps/spaces/{spaceSlug}/module

Update an app-owned space module

Replace the managed TypeScript module for a space owned by or granted to the app.

Parameters

  • spaceSlug · path · required

Request

{
  moduleSource: string
  moduleManifest: AppSpaceModuleManifest = {
  version: 1
  slug: string
  id: string
  name: string
  displayName: string
  description: string | null
  composition: { [key: string]: unknown }
}
}

Response

{
  ok: true
  data: {
  module: GatewayAppManagedSpaceModule = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.spaces.module.update({
  ...
})
GET /gateway/v1/apps/user

Get current app user

Response

{
  ok: true
  data: {
  user: {
  id: string
}
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.apps.user.current({
  ...
})

11 operations

GatewayAuth

#gatewayAuth
POST /gateway/v1/auth/login

Login with user credentials

Create a user access token by user ID and optional password

Request

{
  userId: string
  password?: string | null
  name?: string | null
}

Response

{
  ok: true
  data: {
  user: GatewayAuthUser = { ... }
  token: string
  tokenInfo: GatewayAuthToken = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.login({
  ...
})
POST /gateway/v1/auth/logout

Logout current user access token

Revoke the active bearer user access token

Response

{
  ok: true
  data: {
  userId: string
  tokenId: string
  revoked: true
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.logout({
  ...
})
GET /gateway/v1/auth/self-signup

Get self-sign-up policy

Return whether unauthenticated visitors can create member accounts on this server

Response

{
  ok: true
  data: {
  selfSignup: GatewaySelfSignupStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.selfSignup.get({
  ...
})
POST /gateway/v1/auth/self-signup

Set self-sign-up policy

Enable or disable unauthenticated member self-sign-up for this server

Request

{
  enabled: boolean
}

Response

{
  ok: true
  data: {
  selfSignup: GatewaySelfSignupStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.selfSignup.set({
  ...
})
POST /gateway/v1/auth/server-name

Set server name

Set or clear the public server name shown to users throughout the UI

Request

{
  name?: string | null | null
}

Response

{
  ok: true
  data: {
  serverName: GatewayServerNameStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.serverName.set({
  ...
})
DELETE /gateway/v1/auth/server-password

Clear server password

Disable the shared server password requirement for creating users

Response

{
  ok: true
  data: {
  password: GatewayServerPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.serverPassword.clear({
  ...
})
GET /gateway/v1/auth/server-password

Get server password status

Return whether the shared server password is configured for user creation

Response

{
  ok: true
  data: {
  password: GatewayServerPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.serverPassword.get({
  ...
})
POST /gateway/v1/auth/server-password

Set server password

Set or change the shared server password used to authorize user creation

Request

{
  password: string
  currentPassword?: string | null
}

Response

{
  ok: true
  data: {
  password: GatewayServerPasswordStatus = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.serverPassword.set({
  ...
})
POST /gateway/v1/auth/setup/admin

Create the first admin user

Bootstrap a fresh server by creating its first admin account and auth token

Request

{
  userId: string
  password?: string | null
  serverPassword?: string | null
  serverName?: string | null | null
  name?: string | null
}

Response

{
  ok: true
  data: {
  user: GatewayAuthUser = { ... }
  token: string
  tokenInfo: GatewayAuthToken = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.setup.admin.create({
  ...
})
GET /gateway/v1/auth/setup

Get server setup status

Return whether the server still needs its first admin user

Response

{
  ok: true
  data: GatewaySetupStatus = {
  setupRequired: boolean
  serverPasswordConfigured: boolean
  selfSignupEnabled: boolean
  serverName: string | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.setup.get({
  ...
})
POST /gateway/v1/auth/signup

Sign up for a new member account

Create a new member account when server self-sign-up is enabled, then return a user access token

Request

{
  userId: string
  password?: string | null
  serverPassword?: string | null
  name?: string | null
}

Response

{
  ok: true
  data: {
  user: GatewayAuthUser = { ... }
  token: string
  tokenInfo: GatewayAuthToken = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.gatewayAuth.signup({
  ...
})

7 operations

Plugins

#plugins
DELETE /gateway/v1/internal/plugins/{pluginId}

Uninstall one configured service plugin

Parameters

  • pluginId · path · required

Response

{
  ok: true
  data: {
  deleted: boolean
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.delete({
  ...
})
POST /gateway/v1/internal/plugins/import-local

Import service plugin from local folder

Request

{
  folderPath: string
}

Response

{
  ok: true
  data: {
  plugin: GatewayServicePlugin = { ... }
  configuredRevision: unknown
  activeRevision: unknown | null
  restartRequired: boolean
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.importLocal({
  ...
})
GET /gateway/v1/internal/plugins

List configured service plugins

Response

{
  ok: true
  data: {
  plugins: GatewayServicePlugin[]
  diagnostics: GatewayServicePluginDiagnostic[]
  configuredRevision: unknown
  activeRevision: unknown | null
  restartRequired: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.list({
  ...
})
POST /gateway/v1/internal/plugins/{pluginId}/reload

Reload one configured service plugin from its source

Parameters

  • pluginId · path · required

Response

{
  ok: true
  data: {
  plugin: GatewayServicePlugin = { ... }
  configuredRevision: unknown
  activeRevision: unknown | null
  restartRequired: boolean
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.reload({
  ...
})
PUT /gateway/v1/internal/plugins/{pluginId}/settings

Update configured service plugin settings

Parameters

  • pluginId · path · required

Request

{
  settings: { [key: string]: unknown } | null
}

Response

{
  ok: true
  data: {
  plugin: GatewayServicePlugin = { ... }
  configuredRevision: unknown
  activeRevision: unknown | null
  restartRequired: boolean
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.settings.put({
  ...
})
POST /gateway/v1/internal/plugins/{pluginId}/sidecars/{sidecarId}/install

Install or repair one configured plugin sidecar

Parameters

  • pluginId · path · required
  • sidecarId · path · required

Response

{
  ok: true
  data: {
  plugin: GatewayServicePlugin = { ... }
  configuredRevision: unknown
  activeRevision: unknown | null
  restartRequired: boolean
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.sidecars.install({
  ...
})
PATCH /gateway/v1/internal/plugins/{pluginId}/status

Update configured service plugin status

Parameters

  • pluginId · path · required

Request

{
  status: "active" | "disabled"
}

Response

{
  ok: true
  data: {
  plugin: GatewayServicePlugin = { ... }
  configuredRevision: unknown
  activeRevision: unknown | null
  restartRequired: boolean
  queuedForAgentRun?: boolean | null
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.plugins.status.patch({
  ...
})

6 operations

UserMcpServers

#userMcpServers
POST /gateway/v1/internal/users/me/mcp-servers

userMcpServers.currentMcpServersCreate

Request

{
  serverId?: string | null
  name: string
  command: string
  args?: string[] | null
  env?: { ... }[] | null
  status?: "active" | "disabled" | null
  skipRuntimeRefresh?: boolean | null
}

Response

{
  ok: true
  data: {
  userId: string
  server: GatewayUserMcpServer = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userMcpServers.currentMcpServersCreate({
  ...
})
DELETE /gateway/v1/internal/users/me/mcp-servers/{serverId}

userMcpServers.currentMcpServersDelete

Parameters

  • serverId · path · required

Response

{
  ok: true
  data: {
  userId: string
  serverId: string
  deleted: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userMcpServers.currentMcpServersDelete({
  ...
})
GET /gateway/v1/internal/users/me/mcp-servers/{serverId}

userMcpServers.currentMcpServersGet

Parameters

  • serverId · path · required

Response

{
  ok: true
  data: {
  userId: string
  server: GatewayUserMcpServer = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userMcpServers.currentMcpServersGet({
  ...
})
GET /gateway/v1/internal/users/me/mcp-servers

userMcpServers.currentMcpServersList

Response

{
  ok: true
  data: {
  userId: string
  servers: GatewayUserMcpServer[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userMcpServers.currentMcpServersList({
  ...
})
POST /gateway/v1/internal/users/me/mcp-servers/{serverId}/test

userMcpServers.currentMcpServersTest

Parameters

  • serverId · path · required

Response

{
  ok: true
  data: {
  userId: string
  state: "ready" | "error"
  error?: string | null
  capabilities: {
  tools: { ... }[]
  resources: { ... }[]
  prompts: { ... }[]
}
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userMcpServers.currentMcpServersTest({
  ...
})
PATCH /gateway/v1/internal/users/me/mcp-servers/{serverId}

userMcpServers.currentMcpServersUpdate

Parameters

  • serverId · path · required

Request

{
  name?: string | null
  command?: string | null
  args?: string[] | null
  env?: { ... }[] | null
  status?: "active" | "disabled" | null
  skipRuntimeRefresh?: boolean | null
}

Response

{
  ok: true
  data: {
  userId: string
  server: GatewayUserMcpServer = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userMcpServers.currentMcpServersUpdate({
  ...
})

5 operations

UserTools

#userTools
DELETE /gateway/v1/internal/users/me/tools/{toolPackageId}

userTools.currentToolsDelete

Parameters

  • toolPackageId · path · required

Response

{
  ok: true
  data: {
  userId: string
  toolPackageId: string
  deleted: boolean
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userTools.currentToolsDelete({
  ...
})
POST /gateway/v1/internal/users/me/tools/import-local

userTools.currentToolsImportLocal

Request

{
  folderPath: string
}

Response

{
  ok: true
  data: {
  userId: string
  toolPackage: GatewayUserInstalledToolPackage = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userTools.currentToolsImportLocal({
  ...
})
GET /gateway/v1/internal/users/me/tools

userTools.currentToolsList

Response

{
  ok: true
  data: {
  userId: string
  tools: GatewayUserInstalledToolPackage[]
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userTools.currentToolsList({
  ...
})
POST /gateway/v1/internal/users/me/tools/{toolPackageId}/reload

userTools.currentToolsReload

Parameters

  • toolPackageId · path · required

Response

{
  ok: true
  data: {
  userId: string
  toolPackage: GatewayUserInstalledToolPackage = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userTools.currentToolsReload({
  ...
})
PATCH /gateway/v1/internal/users/me/tools/{toolPackageId}/status

userTools.currentToolsSetStatus

Parameters

  • toolPackageId · path · required

Request

{
  status: "active" | "disabled"
}

Response

{
  ok: true
  data: {
  userId: string
  toolPackage: GatewayUserInstalledToolPackage = { ... }
}
}

SDK sample

import { createAsterGatewayClient } from "@aster/sdk"

const client = createAsterGatewayClient()
await client.userTools.currentToolsSetStatus({
  ...
})