Topolo Docs Topolo Platform
Open workspace

Get Voice identity

Read delegated user and organization identity for the current Voice credential.

Outcome

Read delegated user and organization identity for the current Voice credential.

Before you start

  • Verify the exact authenticated identity, environment and approved organization context before preparing the request.
  • The published application permission is workspace:read. Bootstrap reads delegated identity; it neither selects nor returns a workspace.

Discover the target

topolo whoami --json
topolo actions get app_topolo_voice.workspace.bootstrap --detail --json

Request

GET /api/bootstrap

Save the exact action input as payload.json. Validate it and inspect the exact path, query and body before executing.

Inspect and test this action in the signed action console.

Input fields

Supply an empty action input object. Credential and resource context are separate.

The complete input and response schemas are available in the action console and through CLI/MCP action discovery.

Effects

  • Returns Auth identity projections. It does not discover, create or mirror a Voice workspace and returns no workspace id.
  • The organization projection can be absent even when user.orgId exists; do not invent delegated organization fields.

Interpret the response

No new reusable resource identifier is returned. Retain the exact input and approved organization/workspace context for verification.

Examples retain complete raw Worker responses. CLI/MCP adds a transport envelope; use CLI --detail for the full result. Delegated Auth projections can vary, and the widget uses the canonical SDK contract.

Verify user.id and organization.id against the approved identity/context. Discover granted Voice workspaces separately; do not infer a workspace from organization.id.

Worked examples

Actual worker and isolated migrated D1; synthetic Auth identity, nondefault workspace grants and archive transport. Notify and Nexus are disabled. No live telephony, remote audio or transcript hosting/deletion is tested. Refused examples explain boundaries; do not execute them as successful workflows.

minimal · Successful request · HTTP 200

Actual local worker response and migrated D1. Auth identity/grants/archive are simulated. Notify and metering are disabled; no telephony or remote audio/transcript provider is contacted. Fixture identifiers authorize no live action.

Input · payload.json:

{}

CLI:

topolo actions validate app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions call app_topolo_voice.workspace.bootstrap --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.bootstrap",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "user": {
    "id": "usr_voice_fixture",
    "email": "operator@example.com",
    "role": "admin",
    "orgId": "org_voice_fixture",
    "permissions": [
      "*"
    ]
  },
  "organization": {
    "id": "org_voice_fixture",
    "slug": "voice-fixture",
    "name": "Synthetic Voice organization"
  }
}

HTTP 200. Verify user.id and organization.id against the approved identity/context. Discover granted Voice workspaces separately; do not infer a workspace from organization.id.

workflow · Successful request · HTTP 200

Actual local worker response and migrated D1. Auth identity/grants/archive are simulated. Notify and metering are disabled; no telephony or remote audio/transcript provider is contacted. Fixture identifiers authorize no live action.

Input · payload.json:

{}

CLI:

topolo actions validate app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions call app_topolo_voice.workspace.bootstrap --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.bootstrap",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "user": {
    "id": "usr_voice_fixture",
    "email": "operator@example.com",
    "role": "admin",
    "orgId": "org_voice_fixture",
    "permissions": [
      "*"
    ]
  },
  "organization": {
    "id": "org_voice_fixture",
    "slug": "voice-fixture",
    "name": "Synthetic Voice organization"
  }
}

HTTP 200. Verify user.id and organization.id against the approved identity/context. Discover granted Voice workspaces separately; do not infer a workspace from organization.id.

privacy · Successful request · HTTP 200

Actual local worker response and migrated D1. Auth identity/grants/archive are simulated. Notify and metering are disabled; no telephony or remote audio/transcript provider is contacted. Fixture identifiers authorize no live action.

Input · payload.json:

{}

CLI:

topolo actions validate app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions call app_topolo_voice.workspace.bootstrap --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.bootstrap",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "user": {
    "id": "usr_voice_fixture",
    "email": "operator@example.com",
    "role": "admin",
    "orgId": "org_voice_fixture",
    "permissions": [
      "*"
    ]
  },
  "organization": {
    "id": "org_voice_fixture",
    "slug": "voice-fixture",
    "name": "Synthetic Voice organization"
  }
}

HTTP 200. Verify user.id and organization.id against the approved identity/context. Discover granted Voice workspaces separately; do not infer a workspace from organization.id.

identity-only · Successful request · HTTP 200

Actual local worker response and migrated D1. Auth identity/grants/archive are simulated. Notify and metering are disabled; no telephony or remote audio/transcript provider is contacted. Fixture identifiers authorize no live action.

Input · payload.json:

{}

CLI:

topolo actions validate app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.bootstrap --data @payload.json --json
topolo actions call app_topolo_voice.workspace.bootstrap --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.bootstrap",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "user": {
    "id": "usr_voice_fixture",
    "email": "operator@example.com",
    "role": "admin",
    "orgId": "org_voice_fixture",
    "permissions": [
      "*"
    ]
  }
}

HTTP 200. Verify user.id and organization.id against the approved identity/context. Discover granted Voice workspaces separately; do not infer a workspace from organization.id.

Verify the result

  • Verify user.id and organization.id against the approved identity/context. Discover granted Voice workspaces separately; do not infer a workspace from organization.id.

Errors and recovery

Auth, resource resolution and published input validation can refuse a request before its handler. Retain the actual error, request id and approved context. A plain-text HTTP 500 is surfaced by CLI/MCP as http_error; that transport code is not a structured Voice handler error.

Recovery boundary

Read again after resolving the identity problem. Bootstrap changes no call state; fixture identity fields are not a fixed Auth schema.

  • Get Voice workspace overview: Read all-workspace counts and the most recent 25 calls and provider failures in one granted Voice workspace.
  • Get Voice widget: Read the canonical workspace activity widget with call, minute, ringing and missed-call counts.

Evidence

Actual worker and isolated migrated D1; synthetic Auth identity, nondefault workspace grants and archive transport. Notify and Nexus are disabled. No live telephony, remote audio or transcript hosting/deletion is tested.