| title |
|---|
REST API Client |
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 settings
feedback_definitions- Define feedback score typesautomation_rule_evaluators- Set up automated evaluation rulesoptimizations- Run optimization experiments
prompts- Manage prompt templates and versionsattachments- Handle file attachments for traces and spans
check- System health and access verificationworkspaces- Workspace managementllm_provider_key- API key management for LLM providersservice_toggles- Feature flag managementsystem_usage- Usage metrics and monitoring
chat_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"
)
# 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 pageThe 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:
- Advanced Filtering: Complex search operations with multiple filters
- Batch Operations: Process large amounts of data efficiently
- Custom Integrations: Build tools that integrate with external systems
- Raw Data Access: Work directly with API responses for specific use cases
- Unsupported Operations: Access functionality not available in the high-level SDK
For comprehensive documentation of all REST API methods, parameters, and response types, see the complete REST API Reference.
The reference documentation includes:
- Overview & Getting Started - Detailed usage patterns and examples
- API Clients - Complete method reference for all clients
- Data Types - Response models and data structures
- Use High-Level SDK First: Try the main SDK APIs before resorting to REST client
- Handle Pagination: Always implement proper pagination for list operations
- Error Handling: Implement robust error handling for network and API errors
- Rate Limiting: Be mindful of API rate limits for batch operations
- Version Compatibility: Test thoroughly when upgrading SDK versions