apps/opik-documentation/documentation/fern/docs/reference/python-sdk/rest-api.mdx
The Opik Python SDK includes a complete REST API client that provides direct access to all Opik platform functionality. This low-level client is available through the rest_client property and is useful for advanced operations, custom integrations, and scenarios where the high-level SDK doesn't provide the needed functionality.
The REST client is accessible through any Opik instance:
import opik
# Initialize Opik client
client = opik.Opik()
# Access the REST API client
rest_client = client.rest_client
# Now you can use any of the available client methods
traces = rest_client.traces.search_traces(project_name="my-project")
The REST API is organized into functional client modules:
traces - Manage traces and their lifecyclespans - Manage spans within tracesdatasets - Manage datasets and dataset itemsexperiments - Manage experiments and resultsprojects - Manage projects and project settingsfeedback_definitions - Define feedback score typesautomation_rule_evaluators - Set up automated evaluation rulesoptimizations - Run optimization experimentsprompts - Manage prompt templates and versionsattachments - Handle file attachments for traces and spanscheck - System health and access verificationworkspaces - Workspace managementllm_provider_key - API key management for LLM providersservice_toggles - Feature flag managementsystem_usage - Usage metrics and monitoringchat_completions - Chat completion endpointsopen_telemetry_ingestion - OpenTelemetry data ingestionguardrails - Content validation and safety checks# Get a specific trace by ID
trace = client.rest_client.traces.get_trace_by_id("trace-id")
# Search traces with advanced filters
traces = client.rest_client.traces.search_traces(
project_name="my-project",
filters=[{
"field": "name",
"operator": "contains",
"value": "important"
}],
max_results=100
)
# Add feedback to a trace
client.rest_client.traces.add_trace_feedback_score(
id="trace-id",
name="accuracy",
value=0.95,
source="manual"
)
# List all datasets with pagination
datasets = client.rest_client.datasets.find_datasets(
page=0,
size=20
)
# Create a new dataset
dataset = client.rest_client.datasets.create_dataset(
name="evaluation-dataset",
description="Dataset for model evaluation",
project_name="my-project"
)
# Add items to the dataset
items = [
{
"input": {"question": "What is machine learning?"},
"expected_output": {"answer": "A subset of AI..."}
}
]
client.rest_client.datasets.create_or_update_dataset_items(
dataset_id=dataset.id,
items=items
)
# Create an experiment linked to a dataset
experiment = client.rest_client.experiments.create_experiment(
name="model-comparison",
dataset_name="evaluation-dataset"
)
# Add experiment results
client.rest_client.experiments.create_experiment_items(
experiment_id=experiment.id,
items=[{
"dataset_item_id": "item-id",
"trace_id": "trace-id",
"output": {"prediction": "model output"},
"feedback_scores": [
{"name": "accuracy", "value": 0.8}
]
}]
)
Most list operations return paginated responses with a consistent structure:
# Example paginated response
response = client.rest_client.datasets.find_datasets(page=0, size=10)
# Access the response data
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:
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")
elif e.status_code == 403:
print("Access denied")
else:
print(f"API error: {e.status_code} - {e.body}")
Consider using the REST API client when you need to:
For comprehensive documentation of all REST API methods, parameters, and response types, see the complete REST API Reference.
The reference documentation includes: