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

# Ingestion Options

> Choose between Sentrial-native SDK tracking and OpenTelemetry trace ingestion.

Sentrial supports two ingestion paths. You can use the Sentrial SDK for the richest agent-aware experience, or send OpenTelemetry traces when you already have an OTel pipeline.

<CardGroup cols={2}>
  <Card title="Sentrial SDK" icon="code" href="/quickstart">
    Best for new integrations, agent sessions, tool calls, prompt variants, costs, and
    Sentrial-specific workflows.
  </Card>

  <Card title="OpenTelemetry" icon="route" href="/integrations/opentelemetry">
    Best when your agents already emit OTel spans or you need vendor-neutral collection through an
    existing collector.
  </Card>
</CardGroup>

## Which Path Should I Use?

Use the **Sentrial SDK** when you want the most complete Sentrial experience with minimal mapping:

* `begin()` and `finish()` sessions
* automatic tool and LLM wrappers
* `convo_id` grouping
* production prompt variant routing with `getVariant()`
* automatic run classification after completion

Use **OpenTelemetry** when you already have traces:

* existing OTel SDKs or collectors
* GenAI semantic convention spans
* multi-vendor observability pipelines
* gradual migration from another tracing tool

<Note>
  You can use both. For example, call `getVariant()` from the Sentrial SDK to route a prompt
  variant, then attach the returned assignment ID to your OTel root span as
  `sentrial.experiment.assignment_id`.
</Note>

## Data Model Mapping

| Concept               | Sentrial SDK                                       | OpenTelemetry                                                          |
| --------------------- | -------------------------------------------------- | ---------------------------------------------------------------------- |
| Run                   | Session created by `begin()` or `create_session()` | One trace becomes one Sentrial session                                 |
| Timeline item         | SDK event, tool call, or decision                  | Each span becomes a Sentrial event                                     |
| Conversation grouping | `convo_id` / `convoId`                             | `conversation.id`, `sentrial.convo_id`, `thread.id`, or trace fallback |
| User grouping         | `user_id` / `userId`                               | `user.id`, `enduser.id`, or `sentrial.user_id`                         |
| Prompt variants       | `getVariant()` returns sticky assignment           | Add assignment attributes to spans after routing                       |
| Classification        | Runs are classified after terminal status          | Imported traces are classified after ingest                            |

## Recommendation

Start with the Sentrial SDK unless your application already has mature OpenTelemetry traces. Use OTel when you need interoperability, but keep Sentrial attributes on the root span so sessions, conversations, experiments, and classifications line up cleanly.

## Next Steps

<CardGroup cols={2}>
  <Card title="Quickstart" icon="rocket" href="/quickstart">
    Install the SDK and track your first agent run.
  </Card>

  <Card title="OpenTelemetry" icon="route" href="/integrations/opentelemetry">
    Send OTLP HTTP JSON traces to Sentrial.
  </Card>
</CardGroup>
