apps/opik-documentation/python-sdk-docs/source/rest_api/overview.rst
The Opik SDK provides direct access to the underlying REST API client through the rest_client property.
This allows advanced users to make direct API calls when needed, providing full access to all Opik platform functionality.
.. warning:: The REST client is not guaranteed to be backward compatible with future SDK versions. While it provides a convenient way to use the current REST API of Opik, it's not considered safe to heavily rely on its API as Opik's REST API contracts may change.
The REST API is useful when you need to:
To access the REST client, first create an Opik instance and then use the rest_client property:
.. code-block:: python
import opik
client = opik.Opik()
rest_client = client.rest_client
Here are some common patterns for using the REST API:
Working with Traces
.. code-block:: python
trace = client.rest_client.traces.get_trace_by_id("trace-id")
traces = client.rest_client.traces.search_traces( project_name="my-project", filters=[{ "field": "name", "operator": "contains", "value": "important" }], max_results=100 )
Managing Datasets
.. code-block:: python
datasets = client.rest_client.datasets.find_datasets( page=0, size=20 )
dataset = client.rest_client.datasets.create_dataset( name="my-dataset", description="A test dataset" )
items = [ { "input": {"question": "What is AI?"}, "expected_output": {"answer": "Artificial Intelligence"} } ] client.rest_client.datasets.create_or_update_dataset_items( dataset_id=dataset.id, items=items )
Running Experiments
.. code-block:: python
experiment = client.rest_client.experiments.create_experiment( name="my-experiment", dataset_name="my-dataset" )
client.rest_client.experiments.create_experiment_items( experiment_id=experiment.id, items=[{ "dataset_item_id": "item-id", "trace_id": "trace-id", "output": {"result": "success"} }] )
Most list operations return paginated results with a consistent structure:
.. code-block:: python
response = client.rest_client.datasets.find_datasets(page=0, size=10)
datasets = response.content # List of dataset objects total_count = response.total # Total number of items current_page = response.page # Current page number page_size = response.size # Items per page
The REST API raises specific exceptions for different error conditions:
.. code-block:: python
from opik.rest_api.core.api_error import ApiError
try: trace = client.rest_client.traces.get_trace_by_id("invalid-id") except ApiError as e: if e.status_code == 404: print("Trace not found") else: print(f"API error: {e.status_code} - {e.body}")
clients/index for detailed API referenceobjects for data type documentation