> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.withpaygent.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.withpaygent.com/_mcp/server.

# Manual STS Tracking

For custom providers or fine-grained control, use `track_voice_sts` with a manually constructed `SpeechToSpeechUsageMetadata` object.

> **Warning**
>
> **Prerequisite:** Complete the [Voice Agent Setup](/documentation/voice-tracking/voice-agent-setup) before implementing STS tracking.

**`manual_sts_tracking.py`**

```python title="manual_sts_tracking.py"
from paygent_sdk import Client
from paygent_sdk.models import SpeechToSpeechUsageMetadata, StsInputSide, StsOutputSide, StsModalityUsage

from paygent_sdk.models import CustomerCreateOrGetRequest

paygent = Client("your-paygent-api-key")
session_id = f"voice_call_{int(time.time() * 1000)}"
customer_id = "customer-manual-123"

# 1. Ensure Customer exists
paygent.create_or_get_customer(CustomerCreateOrGetRequest(
    name="Manual Customer",
    external_id=customer_id
))

# 2. Initialize Voice Session
paygent.initialize_voice_session(session_id, "external-agent-id", customer_id)

# 3. Construct usage metadata manually
usage = SpeechToSpeechUsageMetadata(
    input=StsInputSide(
        audio=StsModalityUsage(minutes=1.2),
        text=StsModalityUsage(tokens=150)
    ),
    output=StsOutputSide(
        audio=StsModalityUsage(minutes=2.5),
        text=StsModalityUsage(tokens=400)
    ),
)

# 4. Track STS
paygent.track_voice_sts(
    session_id=session_id,
    usage_metadata=usage,
    service_provider="custom-provider",
    model="custom-model"
)

# 5. Finalize Session
paygent.set_voice_indicator(session_id, indicator_name, 3.0)
```