> ## Documentation Index
> Fetch the complete documentation index at: https://docs.natural.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> When building application code, use `@naturalpay/sdk` for TypeScript or `naturalpay` for Python.
> When operating Natural directly for a user, use the payments MCP at `https://mcp.natural.com`.
> When searching Natural documentation, use the docs MCP at `https://docs.natural.com/mcp`.
> Use the Natural CLI for terminal and CI automation.
> Use REST only for unsupported languages or when the user explicitly requests raw HTTP.
> Start integration development and testing in the sandbox. Do not use production unless the user explicitly requests it.
> For sandbox requests that require `customerPartyId`, list customers first. Reuse only the intended fixture; otherwise create a customer.
> REST and SDK amounts use integer minor units. Payments MCP amounts use decimal strings with a required currency code.

# Read the call log

> Review voice sessions and redacted transcripts

View call details and transcripts in the dashboard or through the API, with card details redacted.

<Snippet file="shared/prerequisites.mdx" />

## List sessions

[List voice sessions](/api-reference/voice/list-voice-sessions) to review recent calls. Filter by status or creation date. Use `customerPartyId` to view a customer's sessions.

For platform users and API keys, the default call log also includes sessions initiated by the platform or its agents for customers. Like payment-request and transaction history, this recorded activity remains available after the customer disconnects, subject to the reader's platform permissions. The same access applies to call details and transcripts.

Calls started directly by a customer appear in that customer's view. Pass `customerPartyId` to read that view. Cross-customer history does not include a dial URI.

<CodeGroup>
  ```python Python theme={null}
  from naturalpay import Natural

  # Set NATURAL_API_KEY to your API key.
  client = Natural()
  sessions = client.voice_sessions.list(status="ended", limit=20)
  ```

  ```typescript TypeScript theme={null}
  import Natural from "@naturalpay/sdk";

  // Set NATURAL_API_KEY to your API key.
  const client = new Natural();
  const sessions = await client.voiceSessions.list({ status: "ended", limit: 20 });
  ```

  ```bash CLI theme={null}
  natural voice-sessions list --status ended --limit 20
  ```

  ```text MCP theme={null}
  Show my 20 most recent ended voice sessions.
  ```

  ```bash cURL theme={null}
  curl "https://api.natural.com/voice/sessions?status=ended&limit=20" \
    -H "Authorization: Bearer $NATURAL_API_KEY"
  ```
</CodeGroup>

<Snippet file="api-examples/voice.list.response.mdx" />

Session status describes the call, not the payment outcome.

| Status | Meaning |
| - | - |
| `awaitingCall` | Waiting for the caller to connect |
| `inProgress` | Call is in progress |
| `ended` | Call end was recorded |
| `failed` | Session failed |
| `canceled` | A newer session replaced this one |
| `expired` | The time limit passed without a recorded call end |

The result lives in the block named after the session's `kind`. For `payment` sessions, `payment.outcome` is `paid`, `linkSent`, or `unpaid`, and `payment.failure` holds the last decline. `completedAt` is set once the call has ended and the result is known, when `voiceSession.completed` fires. New kinds may be added; ignore kinds you don't handle.

## Read one session

[Get a voice session](/api-reference/voice/get-voice-session) to view its call details.

<CodeGroup>
  ```python Python theme={null}
  session = client.voice_sessions.get("vos_019d0a1b2c3d4e5f60718293a4b5c6f0")
  ```

  ```typescript TypeScript theme={null}
  const session = await client.voiceSessions.get({
    voiceSessionId: "vos_019d0a1b2c3d4e5f60718293a4b5c6f0",
  });
  ```

  ```bash CLI theme={null}
  natural voice-sessions get --voice-session-id vos_019d0a1b2c3d4e5f60718293a4b5c6f0
  ```

  ```text MCP theme={null}
  Show the details for voice session vos_019d0a1b2c3d4e5f60718293a4b5c6f0.
  ```

  ```bash cURL theme={null}
  curl https://api.natural.com/voice/sessions/vos_019d0a1b2c3d4e5f60718293a4b5c6f0 \
    -H "Authorization: Bearer $NATURAL_API_KEY"
  ```
</CodeGroup>

<Snippet file="api-examples/voice.get.response.mdx" />

The `call` object includes the start time, end time, duration, and who ended the call. Fields remain `null` until those details are known.

For the payment outcome, follow the `paymentIntent` relationship. See [Follow the payment](/guides/accept/pay-by-link#follow-the-payment).

## Fetch the transcript

[Get the transcript](/api-reference/voice/get-voice-session-transcript) to read the conversation with card details redacted.

<CodeGroup>
  ```python Python theme={null}
  transcript = client.voice_sessions.get_transcript(session.data.id)
  ```

  ```typescript TypeScript theme={null}
  const transcript = await client.voiceSessions.getTranscript({
    voiceSessionId: session.data.id,
  });
  ```

  ```bash CLI theme={null}
  natural voice-sessions get-transcript --voice-session-id vos_019d0a1b2c3d4e5f60718293a4b5c6f0
  ```

  ```text MCP theme={null}
  Show the transcript for that voice session.
  ```

  ```bash cURL theme={null}
  curl https://api.natural.com/voice/sessions/vos_019d0a1b2c3d4e5f60718293a4b5c6f0/transcript \
    -H "Authorization: Bearer $NATURAL_API_KEY"
  ```
</CodeGroup>

<Snippet file="api-examples/voice.transcript.response.mdx" />

If no call started, the response has status `notAvailable` and no transcript turns.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.