Topolo Docs Topolo Platform
Open workspace

Export Voice organization data

Read six local Voice table sets across every workspace of the authenticated organization, with remote artifact URLs redacted.

Outcome

Read six local Voice table sets across every workspace of the authenticated organization, with remote artifact URLs redacted.

Before you start

  • Verify the exact authenticated identity, environment and approved organization context before preparing the request.
  • The published application permission is privacy:read. This privacy action spans all local Voice workspaces in the authenticated organization. A workspace header does not narrow it.

Discover the target

topolo whoami --json
topolo actions get app_topolo_voice.organizations.data.export --detail --json
  • Confirm the authenticated organization id and the explicit privacy purpose across all local Voice workspaces.

Request

GET /api/organizations/data/export

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

  • Reads local workspace mirrors, calls, provider failures, recordings, transcripts and voicemails in rowid order. A workspace resource header does not narrow this organization-wide export.
  • Replaces artifact_url and recording_url with boolean presence fields; provider call ids, phone strings, operator/recipient ids and other local metadata remain.
  • Does not export remote audio/transcript bytes, Auth grants, credentials, provider account data or notification delivery state. Separate table reads are not an atomic snapshot.

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 organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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.organizations.data.export --data @payload.json --json
topolo actions plan app_topolo_voice.organizations.data.export --data @payload.json --json
topolo actions call app_topolo_voice.organizations.data.export --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.organizations.data.export",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "success": true,
  "organization_id": "org_voice_fixture",
  "credentials_included": false,
  "data": {
    "voice_workspaces": [
      {
        "id": "ws_voice_minimal",
        "organization_id": "org_voice_fixture",
        "status": "active",
        "created_at": "2026-10-04T07:54:39.071Z",
        "updated_at": "2026-10-04T07:54:39.071Z"
      }
    ],
    "voice_calls": [
      {
        "id": "call_399b0403-b561-498d-95aa-d8fa70c583e6",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "operator_user_id": "usr_voice_fixture",
        "provider": "twilio",
        "provider_call_id": "synthetic_minimal",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "completed",
        "duration_seconds": 0,
        "created_at": "2026-10-04T07:54:39.172Z",
        "ended_at": "2026-10-04T07:54:39.410Z"
      },
      {
        "id": "call_f276520a-cee6-4e3c-8846-fc14157ae147",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "operator_user_id": "usr_voice_fixture",
        "provider": "twilio",
        "provider_call_id": "missed_minimal",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "missed",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:39.490Z",
        "ended_at": "2026-10-04T07:54:39.501Z"
      }
    ],
    "voice_provider_failures": [
      {
        "id": "provider_failure_827b7d6a-388f-40b2-ab0c-a2edb1a4b52f",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "operator_user_id": "usr_voice_fixture",
        "call_id": null,
        "provider": "fixture-provider",
        "operation": "connect",
        "error_code": "fixture_failure",
        "status": "open",
        "occurred_at": "2026-10-04T07:54:39.298Z"
      }
    ],
    "voice_recordings": [
      {
        "id": "recording_83afd788-e6c8-4575-b2c2-59b20f842121",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "call_id": "call_399b0403-b561-498d-95aa-d8fa70c583e6",
        "duration_seconds": 0,
        "status": "ready",
        "created_at": "2026-10-04T07:54:39.245Z",
        "artifact_url_present": true
      },
      {
        "id": "recording_3ca66a56-191d-4875-bb41-8c9b870896fb",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "call_id": "call_399b0403-b561-498d-95aa-d8fa70c583e6",
        "duration_seconds": 1,
        "status": "ready",
        "created_at": "2026-10-04T07:54:39.263Z",
        "artifact_url_present": true
      }
    ],
    "voice_transcripts": [
      {
        "id": "transcript_3849a452-27f2-4e5a-ba07-5d6bd05fd1c5",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "call_id": "call_399b0403-b561-498d-95aa-d8fa70c583e6",
        "language": "en",
        "status": "ready",
        "created_at": "2026-10-04T07:54:39.284Z",
        "artifact_url_present": true
      },
      {
        "id": "transcript_ce993271-81ba-4ea2-9105-1f05fd17e140",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "call_id": "call_f276520a-cee6-4e3c-8846-fc14157ae147",
        "language": "fr",
        "status": "ready",
        "created_at": "2026-10-04T07:54:39.585Z",
        "artifact_url_present": true
      }
    ],
    "voice_voicemails": [
      {
        "id": "voicemail_42284c9f-d666-408e-ab09-289c6a3e32c0",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "call_id": "call_f276520a-cee6-4e3c-8846-fc14157ae147",
        "recipient_user_id": "usr_voice_fixture",
        "duration_seconds": 0,
        "status": "received",
        "received_at": "2026-10-04T07:54:39.536Z",
        "recording_url_present": true
      },
      {
        "id": "voicemail_428c666d-e7c1-4bcf-892b-253b092555c1",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_minimal",
        "call_id": "call_f276520a-cee6-4e3c-8846-fc14157ae147",
        "recipient_user_id": "usr_voice_fixture",
        "duration_seconds": 0,
        "status": "received",
        "received_at": "2026-10-04T07:54:39.564Z",
        "recording_url_present": true
      }
    ]
  }
}

HTTP 200. Verify organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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.organizations.data.export --data @payload.json --json
topolo actions plan app_topolo_voice.organizations.data.export --data @payload.json --json
topolo actions call app_topolo_voice.organizations.data.export --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.organizations.data.export",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "success": true,
  "organization_id": "org_voice_fixture",
  "credentials_included": false,
  "data": {
    "voice_workspaces": [],
    "voice_calls": [],
    "voice_provider_failures": [],
    "voice_recordings": [],
    "voice_transcripts": [],
    "voice_voicemails": []
  }
}

HTTP 200. Verify organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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.organizations.data.export --data @payload.json --json
topolo actions plan app_topolo_voice.organizations.data.export --data @payload.json --json
topolo actions call app_topolo_voice.organizations.data.export --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.organizations.data.export",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "success": true,
  "organization_id": "org_voice_fixture",
  "credentials_included": false,
  "data": {
    "voice_workspaces": [
      {
        "id": "ws_voice_workflow",
        "organization_id": "org_voice_fixture",
        "status": "active",
        "created_at": "2026-10-04T07:54:40.040Z",
        "updated_at": "2026-10-04T07:54:40.040Z"
      }
    ],
    "voice_calls": [
      {
        "id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "synthetic_workflow",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "completed",
        "duration_seconds": 125,
        "created_at": "2026-10-04T07:54:40.127Z",
        "ended_at": "2026-10-04T07:54:40.341Z"
      },
      {
        "id": "call_3a8602fc-ada3-4b69-bf7e-b8bdb6a733a6",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "missed_workflow",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "missed",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:40.450Z",
        "ended_at": "2026-10-04T07:54:40.466Z"
      }
    ],
    "voice_provider_failures": [
      {
        "id": "provider_failure_beb51cc6-5a3f-4a4a-85d2-cae9c1329834",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "operator_user_id": "usr_voice_fixture",
        "call_id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "provider": "fixture-provider",
        "operation": "connect",
        "error_code": "fixture_failure",
        "status": "open",
        "occurred_at": "2026-10-04T07:54:40.237Z"
      }
    ],
    "voice_recordings": [
      {
        "id": "recording_29fd1eaa-03c0-4155-a022-15e69fe3deef",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "call_id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "duration_seconds": 63,
        "status": "ready",
        "created_at": "2026-10-04T07:54:40.175Z",
        "artifact_url_present": true
      },
      {
        "id": "recording_180e70bc-438f-4c61-8de7-95782c42e321",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "call_id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "duration_seconds": 1,
        "status": "ready",
        "created_at": "2026-10-04T07:54:40.192Z",
        "artifact_url_present": true
      }
    ],
    "voice_transcripts": [
      {
        "id": "transcript_15ecc19e-7fc9-4257-8732-b27a6f4a88e0",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "call_id": "call_772a7b3c-7ee3-4295-b44a-8c4a24e47ba3",
        "language": "en-GB",
        "status": "ready",
        "created_at": "2026-10-04T07:54:40.213Z",
        "artifact_url_present": true
      },
      {
        "id": "transcript_7aea62e3-c8ed-4657-8600-0118cfe6b5d6",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "call_id": "call_3a8602fc-ada3-4b69-bf7e-b8bdb6a733a6",
        "language": "fr",
        "status": "ready",
        "created_at": "2026-10-04T07:54:40.578Z",
        "artifact_url_present": true
      }
    ],
    "voice_voicemails": [
      {
        "id": "voicemail_816f3eb8-657b-4876-b7b7-fa54c785bf57",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "call_id": "call_3a8602fc-ada3-4b69-bf7e-b8bdb6a733a6",
        "recipient_user_id": "usr_voice_fixture",
        "duration_seconds": 8,
        "status": "received",
        "received_at": "2026-10-04T07:54:40.511Z",
        "recording_url_present": true
      },
      {
        "id": "voicemail_1262aecd-95cd-4280-a852-b13e406f46db",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_workflow",
        "call_id": "call_3a8602fc-ada3-4b69-bf7e-b8bdb6a733a6",
        "recipient_user_id": "usr_voice_fixture",
        "duration_seconds": 0,
        "status": "received",
        "received_at": "2026-10-04T07:54:40.546Z",
        "recording_url_present": true
      }
    ]
  }
}

HTTP 200. Verify organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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.organizations.data.export --data @payload.json --json
topolo actions plan app_topolo_voice.organizations.data.export --data @payload.json --json
topolo actions call app_topolo_voice.organizations.data.export --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.organizations.data.export",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "success": true,
  "organization_id": "org_voice_fixture",
  "credentials_included": false,
  "data": {
    "voice_workspaces": [],
    "voice_calls": [],
    "voice_provider_failures": [],
    "voice_recordings": [],
    "voice_transcripts": [],
    "voice_voicemails": []
  }
}

HTTP 200. Verify organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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.organizations.data.export --data @payload.json --json
topolo actions plan app_topolo_voice.organizations.data.export --data @payload.json --json
topolo actions call app_topolo_voice.organizations.data.export --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.organizations.data.export",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "success": true,
  "organization_id": "org_voice_fixture",
  "credentials_included": false,
  "data": {
    "voice_workspaces": [
      {
        "id": "ws_voice_privacy",
        "organization_id": "org_voice_fixture",
        "status": "active",
        "created_at": "2026-10-04T07:54:41.380Z",
        "updated_at": "2026-10-04T07:54:41.380Z"
      }
    ],
    "voice_calls": [
      {
        "id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "synthetic_privacy",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "completed",
        "duration_seconds": 125,
        "created_at": "2026-10-04T07:54:41.559Z",
        "ended_at": "2026-10-04T07:54:42.065Z"
      },
      {
        "id": "call_069a28ec-eef8-4c21-989e-ac402b49cf6b",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "missed_privacy",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "missed",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.238Z",
        "ended_at": "2026-10-04T07:54:42.261Z"
      },
      {
        "id": "call_fe30745f-5955-49d5-b445-c4678aece5bf",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_0",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.494Z",
        "ended_at": null
      },
      {
        "id": "call_badd6852-00e8-49c9-8227-e3094cf25b02",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_1",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.528Z",
        "ended_at": null
      },
      {
        "id": "call_2832096e-04b4-4012-82f9-dfce6b1e7b5b",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_2",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.551Z",
        "ended_at": null
      },
      {
        "id": "call_be2dc867-b031-4955-bcdf-2b04d9f2dcae",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_3",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.584Z",
        "ended_at": null
      },
      {
        "id": "call_a65d3e7b-fcd2-4ea4-a264-41bbbd83db59",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_4",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.601Z",
        "ended_at": null
      },
      {
        "id": "call_1d30b594-430d-45f2-b733-afafe12c48f1",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_5",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.628Z",
        "ended_at": null
      },
      {
        "id": "call_7943f9da-e949-4a6e-b843-6bb79c6d32aa",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_6",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.650Z",
        "ended_at": null
      },
      {
        "id": "call_cd4e3a6b-0a43-4713-9af1-92da04cdd418",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_7",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.668Z",
        "ended_at": null
      },
      {
        "id": "call_5abcf8de-e52a-4c42-a02f-5ce8ce57ebc1",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_8",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.684Z",
        "ended_at": null
      },
      {
        "id": "call_fc5d6e03-0f5e-47d2-b5c5-9fe5dbd9d1a2",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_9",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.699Z",
        "ended_at": null
      },
      {
        "id": "call_0ccea151-557b-4dd9-897d-eeab02cf8df2",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_10",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.713Z",
        "ended_at": null
      },
      {
        "id": "call_387f3042-3e67-4d8e-9aa5-7501c3d08b89",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_11",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.744Z",
        "ended_at": null
      },
      {
        "id": "call_ffc8159b-643e-404e-ae48-2f7ad74ad421",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_12",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.771Z",
        "ended_at": null
      },
      {
        "id": "call_2cc17569-0aae-4174-bf5d-3eb85c55a5cd",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_13",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.787Z",
        "ended_at": null
      },
      {
        "id": "call_b1cec99a-d38d-4b91-8518-d2c87b8d5a6d",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_14",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.809Z",
        "ended_at": null
      },
      {
        "id": "call_81188391-2ec9-4d35-bb4e-aa8b59c6ab44",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_15",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.837Z",
        "ended_at": null
      },
      {
        "id": "call_93d49c2d-e8a8-44f2-b2a0-94d622737eaa",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_16",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.852Z",
        "ended_at": null
      },
      {
        "id": "call_81050e7b-1379-4133-b80a-306d527dc8b3",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_17",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.865Z",
        "ended_at": null
      },
      {
        "id": "call_5d24cf03-d64d-4fe3-bc3a-61fa36a76b1e",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_18",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.880Z",
        "ended_at": null
      },
      {
        "id": "call_8f109153-84e6-4083-b95d-9cd2a8882fff",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_19",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.895Z",
        "ended_at": null
      },
      {
        "id": "call_ae2be444-f5b9-463d-9f8b-3f0ab3e740b7",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_20",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.919Z",
        "ended_at": null
      },
      {
        "id": "call_66dbd2fa-9843-4d4a-b53c-04491cedb76e",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_21",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.946Z",
        "ended_at": null
      },
      {
        "id": "call_f687bbfb-c2ac-4fad-8bd0-23dfdf072d55",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_22",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.972Z",
        "ended_at": null
      },
      {
        "id": "call_33152e77-8c04-4bdd-8b5c-43a739d83c6f",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_23",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:42.987Z",
        "ended_at": null
      },
      {
        "id": "call_c6db6a1c-868f-4485-8f1e-b32e67c741a1",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "provider": "fixture-provider",
        "provider_call_id": "bounded_24",
        "direction": "incoming",
        "from_number": "+15550100001",
        "to_number": "+15550100002",
        "status": "ringing",
        "duration_seconds": null,
        "created_at": "2026-10-04T07:54:43.012Z",
        "ended_at": null
      }
    ],
    "voice_provider_failures": [
      {
        "id": "provider_failure_01db6ecd-8a7b-4753-a145-6a43ca5f741f",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "operator_user_id": "usr_voice_fixture",
        "call_id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "provider": "fixture-provider",
        "operation": "connect",
        "error_code": "fixture_failure",
        "status": "open",
        "occurred_at": "2026-10-04T07:54:41.856Z"
      }
    ],
    "voice_recordings": [
      {
        "id": "recording_011da024-ed24-4ae4-a2bc-22decd2e50ce",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "call_id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "duration_seconds": 63,
        "status": "ready",
        "created_at": "2026-10-04T07:54:41.739Z",
        "artifact_url_present": true
      },
      {
        "id": "recording_c1001f8f-8427-41a5-9af2-2125dc2c8de1",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "call_id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "duration_seconds": 1,
        "status": "ready",
        "created_at": "2026-10-04T07:54:41.766Z",
        "artifact_url_present": true
      }
    ],
    "voice_transcripts": [
      {
        "id": "transcript_1f36a55a-18e0-4204-8f18-622f1ed022e6",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "call_id": "call_34f3ad97-75be-4c5d-bb06-ae16acb413e9",
        "language": "en-GB",
        "status": "ready",
        "created_at": "2026-10-04T07:54:41.796Z",
        "artifact_url_present": true
      },
      {
        "id": "transcript_bd4ff7f6-a5e6-4198-891d-336fc969d29f",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "call_id": "call_069a28ec-eef8-4c21-989e-ac402b49cf6b",
        "language": "fr",
        "status": "ready",
        "created_at": "2026-10-04T07:54:42.395Z",
        "artifact_url_present": true
      }
    ],
    "voice_voicemails": [
      {
        "id": "voicemail_8610b6d4-cc73-4c66-8bdb-c507d9772ba3",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "call_id": "call_069a28ec-eef8-4c21-989e-ac402b49cf6b",
        "recipient_user_id": "usr_voice_fixture",
        "duration_seconds": 8,
        "status": "received",
        "received_at": "2026-10-04T07:54:42.343Z",
        "recording_url_present": true
      },
      {
        "id": "voicemail_ea2a9af5-7f9e-4d48-a7b2-4466a58b4b84",
        "organization_id": "org_voice_fixture",
        "workspace_id": "ws_voice_privacy",
        "call_id": "call_069a28ec-eef8-4c21-989e-ac402b49cf6b",
        "recipient_user_id": "usr_voice_fixture",
        "duration_seconds": 0,
        "status": "received",
        "received_at": "2026-10-04T07:54:42.374Z",
        "recording_url_present": true
      }
    ]
  }
}

HTTP 200. Verify organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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.organizations.data.export --data @payload.json --json
topolo actions plan app_topolo_voice.organizations.data.export --data @payload.json --json
topolo actions call app_topolo_voice.organizations.data.export --data @payload.json --detail --json

MCP tool and arguments:

{
  "tool": "topolo_read_action",
  "arguments": {
    "actionId": "app_topolo_voice.organizations.data.export",
    "input": {}
  }
}

Captured response · HTTP 200:

{
  "success": true,
  "organization_id": "org_voice_fixture",
  "credentials_included": false,
  "data": {
    "voice_workspaces": [],
    "voice_calls": [],
    "voice_provider_failures": [],
    "voice_recordings": [],
    "voice_transcripts": [],
    "voice_voicemails": []
  }
}

HTTP 200. Verify organization_id equals the approved context, credentials_included false and all six table arrays exist. Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

Verify the result

  • Verify organization_id equals the approved context, credentials_included false and all six table arrays exist.
  • Handle the export as sensitive organization data. URL presence only proves a stored reference; empty arrays do not prove remote provider deletion.

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 action changes no local rows. Restrict storage and sharing of the retrieved data. The next privacy erase action requires independent authorization for all local Voice workspaces.

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.