Topolo Docs Topolo Platform
Open workspace

Get Voice workspace overview

Read all-workspace counts and the most recent 25 calls and provider failures in one granted Voice workspace.

Outcome

Read all-workspace counts and the most recent 25 calls and provider failures in one granted Voice workspace.

Before you start

  • Verify the exact authenticated identity, environment and approved organization context before preparing the request.
  • The published application permission is workspace:read. Discover a granted canonical Voice workspace and bind its exact id. A supplied id does not grant access.

Discover the target

topolo whoami --json
topolo actions get app_topolo_voice.workspace.overview.get --detail --json
topolo resources topolo-voice --json
topolo workspaces list topolo-voice --json
  • Select the actual granted resource id as VOICE_WORKSPACE_ID; synthetic fixture ids authorize no live operation.

Request

GET /api/workspace/overview

Save the exact action input as payload.json. Set VOICE_WORKSPACE_ID from granted canonical resource discovery. 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

  • Creates the local identity-only mirror if missing after canonical Auth grant resolution.
  • Summary counts all scoped rows; minutes is floor of total duration_seconds divided by 60. Calls and providerFailures arrays each contain at most 25 recent records and provide no cursor. Provider-failure summary counts only open failures, while the recent array is not filtered by status.

Interpret the response

Use $.data.workspace.id for the returned workspace identifier.

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.

Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_minimal",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 0,
      "minutes": 0,
      "ringing": 0,
      "missed": 0,
      "providerFailures": 0,
      "recordings": 0,
      "transcripts": 0,
      "voicemails": 0
    },
    "calls": [],
    "providerFailures": []
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_minimal",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 1,
      "minutes": 0,
      "ringing": 1,
      "missed": 0,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 1,
      "voicemails": 0
    },
    "calls": [
      {
        "id": "call_399b0403-b561-498d-95aa-d8fa70c583e6",
        "provider": "twilio",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:39.172Z",
        "endedAt": null
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_827b7d6a-388f-40b2-ab0c-a2edb1a4b52f",
        "callId": null,
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:39.298Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_minimal",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 2,
      "minutes": 0,
      "ringing": 0,
      "missed": 1,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 2,
      "voicemails": 2
    },
    "calls": [
      {
        "id": "call_f276520a-cee6-4e3c-8846-fc14157ae147",
        "provider": "twilio",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "missed",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:39.490Z",
        "endedAt": "2026-10-04T07:54:39.501Z"
      },
      {
        "id": "call_399b0403-b561-498d-95aa-d8fa70c583e6",
        "provider": "twilio",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "completed",
        "durationSeconds": 0,
        "createdAt": "2026-10-04T07:54:39.172Z",
        "endedAt": "2026-10-04T07:54:39.410Z"
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_827b7d6a-388f-40b2-ab0c-a2edb1a4b52f",
        "callId": null,
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:39.298Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_minimal",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 0,
      "minutes": 0,
      "ringing": 0,
      "missed": 0,
      "providerFailures": 0,
      "recordings": 0,
      "transcripts": 0,
      "voicemails": 0
    },
    "calls": [],
    "providerFailures": []
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_workflow",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 0,
      "minutes": 0,
      "ringing": 0,
      "missed": 0,
      "providerFailures": 0,
      "recordings": 0,
      "transcripts": 0,
      "voicemails": 0
    },
    "calls": [],
    "providerFailures": []
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_workflow",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 1,
      "minutes": 0,
      "ringing": 1,
      "missed": 0,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 1,
      "voicemails": 0
    },
    "calls": [
      {
        "id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:40.127Z",
        "endedAt": null
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_beb51cc6-5a3f-4a4a-85d2-cae9c1329834",
        "callId": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:40.237Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_workflow",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 2,
      "minutes": 2,
      "ringing": 0,
      "missed": 1,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 2,
      "voicemails": 2
    },
    "calls": [
      {
        "id": "call_3a8602fc-ada3-4b69-bf7e-b8bdb6a733a6",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "missed",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:40.450Z",
        "endedAt": "2026-10-04T07:54:40.466Z"
      },
      {
        "id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "completed",
        "durationSeconds": 125,
        "createdAt": "2026-10-04T07:54:40.127Z",
        "endedAt": "2026-10-04T07:54:40.341Z"
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_beb51cc6-5a3f-4a4a-85d2-cae9c1329834",
        "callId": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:40.237Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_workflow",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 0,
      "minutes": 0,
      "ringing": 0,
      "missed": 0,
      "providerFailures": 0,
      "recordings": 0,
      "transcripts": 0,
      "voicemails": 0
    },
    "calls": [],
    "providerFailures": []
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_privacy",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 0,
      "minutes": 0,
      "ringing": 0,
      "missed": 0,
      "providerFailures": 0,
      "recordings": 0,
      "transcripts": 0,
      "voicemails": 0
    },
    "calls": [],
    "providerFailures": []
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_privacy",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 1,
      "minutes": 0,
      "ringing": 1,
      "missed": 0,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 1,
      "voicemails": 0
    },
    "calls": [
      {
        "id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:41.559Z",
        "endedAt": null
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_01db6ecd-8a7b-4753-a145-6a43ca5f741f",
        "callId": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:41.856Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_privacy",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 2,
      "minutes": 2,
      "ringing": 0,
      "missed": 1,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 2,
      "voicemails": 2
    },
    "calls": [
      {
        "id": "call_069a28ec-eef8-4c21-989e-ac402b49cf6b",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "missed",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.238Z",
        "endedAt": "2026-10-04T07:54:42.261Z"
      },
      {
        "id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "completed",
        "durationSeconds": 125,
        "createdAt": "2026-10-04T07:54:41.559Z",
        "endedAt": "2026-10-04T07:54:42.065Z"
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_01db6ecd-8a7b-4753-a145-6a43ca5f741f",
        "callId": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:41.856Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_privacy",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 27,
      "minutes": 2,
      "ringing": 25,
      "missed": 1,
      "providerFailures": 1,
      "recordings": 2,
      "transcripts": 2,
      "voicemails": 2
    },
    "calls": [
      {
        "id": "call_c6db6a1c-868f-4485-8f1e-b32e67c741a1",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:43.012Z",
        "endedAt": null
      },
      {
        "id": "call_33152e77-8c04-4bdd-8b5c-43a739d83c6f",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.987Z",
        "endedAt": null
      },
      {
        "id": "call_f687bbfb-c2ac-4fad-8bd0-23dfdf072d55",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.972Z",
        "endedAt": null
      },
      {
        "id": "call_66dbd2fa-9843-4d4a-b53c-04491cedb76e",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.946Z",
        "endedAt": null
      },
      {
        "id": "call_ae2be444-f5b9-463d-9f8b-3f0ab3e740b7",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.919Z",
        "endedAt": null
      },
      {
        "id": "call_8f109153-84e6-4083-b95d-9cd2a8882fff",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.895Z",
        "endedAt": null
      },
      {
        "id": "call_5d24cf03-d64d-4fe3-bc3a-61fa36a76b1e",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.880Z",
        "endedAt": null
      },
      {
        "id": "call_81050e7b-1379-4133-b80a-306d527dc8b3",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.865Z",
        "endedAt": null
      },
      {
        "id": "call_93d49c2d-e8a8-44f2-b2a0-94d622737eaa",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.852Z",
        "endedAt": null
      },
      {
        "id": "call_81188391-2ec9-4d35-bb4e-aa8b59c6ab44",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.837Z",
        "endedAt": null
      },
      {
        "id": "call_b1cec99a-d38d-4b91-8518-d2c87b8d5a6d",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.809Z",
        "endedAt": null
      },
      {
        "id": "call_2cc17569-0aae-4174-bf5d-3eb85c55a5cd",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.787Z",
        "endedAt": null
      },
      {
        "id": "call_ffc8159b-643e-404e-ae48-2f7ad74ad421",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.771Z",
        "endedAt": null
      },
      {
        "id": "call_387f3042-3e67-4d8e-9aa5-7501c3d08b89",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.744Z",
        "endedAt": null
      },
      {
        "id": "call_0ccea151-557b-4dd9-897d-eeab02cf8df2",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.713Z",
        "endedAt": null
      },
      {
        "id": "call_fc5d6e03-0f5e-47d2-b5c5-9fe5dbd9d1a2",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.699Z",
        "endedAt": null
      },
      {
        "id": "call_5abcf8de-e52a-4c42-a02f-5ce8ce57ebc1",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.684Z",
        "endedAt": null
      },
      {
        "id": "call_cd4e3a6b-0a43-4713-9af1-92da04cdd418",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.668Z",
        "endedAt": null
      },
      {
        "id": "call_7943f9da-e949-4a6e-b843-6bb79c6d32aa",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.650Z",
        "endedAt": null
      },
      {
        "id": "call_1d30b594-430d-45f2-b733-afafe12c48f1",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.628Z",
        "endedAt": null
      },
      {
        "id": "call_a65d3e7b-fcd2-4ea4-a264-41bbbd83db59",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.601Z",
        "endedAt": null
      },
      {
        "id": "call_be2dc867-b031-4955-bcdf-2b04d9f2dcae",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.584Z",
        "endedAt": null
      },
      {
        "id": "call_2832096e-04b4-4012-82f9-dfce6b1e7b5b",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.551Z",
        "endedAt": null
      },
      {
        "id": "call_badd6852-00e8-49c9-8227-e3094cf25b02",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.528Z",
        "endedAt": null
      },
      {
        "id": "call_fe30745f-5955-49d5-b445-c4678aece5bf",
        "provider": "fixture-provider",
        "direction": "incoming",
        "fromNumber": "+15550100001",
        "toNumber": "+15550100002",
        "status": "ringing",
        "durationSeconds": null,
        "createdAt": "2026-10-04T07:54:42.494Z",
        "endedAt": null
      }
    ],
    "providerFailures": [
      {
        "id": "provider_failure_01db6ecd-8a7b-4753-a145-6a43ca5f741f",
        "callId": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "provider": "fixture-provider",
        "operation": "connect",
        "errorCode": "fixture_failure",
        "status": "open",
        "occurredAt": "2026-10-04T07:54:41.856Z"
      }
    ]
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

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.overview.get --data @payload.json --json
topolo actions plan app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --json
topolo actions call app_topolo_voice.workspace.overview.get --resource-type workspace --resource-id "$VOICE_WORKSPACE_ID" --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.workspace.overview.get",
    "input": {},
    "resourceType": "workspace",
    "resourceId": "<id returned by granted resource discovery>"
  }
}

Captured response · HTTP 200:

{
  "data": {
    "workspace": {
      "id": "ws_voice_privacy",
      "organizationId": "org_voice_fixture"
    },
    "summary": {
      "calls": 0,
      "minutes": 0,
      "ringing": 0,
      "missed": 0,
      "providerFailures": 0,
      "recordings": 0,
      "transcripts": 0,
      "voicemails": 0
    },
    "calls": [],
    "providerFailures": []
  }
}

HTTP 200. Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records. Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

Verify the result

  • Check data.workspace.id and organizationId match the granted target. Compare summary with retained event responses; an empty list means no scoped local records.
  • Do not use the bounded recent arrays as exhaustive call/failure exports. Counts and lists are separate queries and can change during concurrent events.

Errors and recovery

  • organization_required (HTTP 403): The authenticated request has no organization. Stop and establish the approved owning organization; supplied workspace ids do not create membership.

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

This read does not alter call states. Its identity mirror can be recreated after local erasure; use organization privacy export for an authorized exhaustive local data snapshot.

  • Export Voice organization data: Read six local Voice table sets across every workspace of the authenticated organization, with remote artifact URLs redacted.
  • 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.