Enqueues a single log for background delivery via the SDK worker (singleton after olira.init()).
POST
/
v1
/
logs
/
batch
import olira
from olira import OliraLogType
olira.init(api_key="YOUR_API_KEY")
olira.log(
log_type=OliraLogType.SYMPTOM_REPORT,
patient_id="8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
payload={"symptoms": []},
)
using Olira;
OliraModule.Init(apiKey: "YOUR_API_KEY");
OliraModule.Log(
logType: OliraLogType.SymptomReport,
patientId: "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
payload: new Dictionary<string, object?> { ["symptoms"] = new List<object?>() });
POST /v1/logs/batch
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"logs": [
{
"log_type": "symptom_report",
"patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
"payload": { "symptoms": [] },
"context": {
"service": "",
"sdk_version": "…",
"sdk_language": "python"
}
}
]
}
# Returns None once the event is accepted into the SDK queue
{
"error": true,
"status_code": 401,
"error_type": "authentication_error",
"message": "Could not validate credentials",
"details": [
{
"type": "authentication_error",
"message": "Could not validate credentials"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 403,
"error_type": "authorization_error",
"message": "Insufficient OAuth scope for this endpoint",
"details": [
{
"type": "authorization_error",
"message": "Insufficient OAuth scope for this endpoint"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 404,
"error_type": "not_found_error",
"message": "Patient not found",
"details": [
{
"type": "not_found_error",
"message": "Patient not found"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 422,
"error_type": "validation_error",
"message": "Request validation failed (1 error)",
"details": [
{
"type": "missing",
"message": "Field required",
"field": "patient_id",
"location": ["body", "patient_id"],
"input_value": null
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 429,
"error_type": "server_error",
"message": "Rate limit exceeded",
"details": [
{
"type": "rate_limit",
"message": "Too many requests; retry after backoff"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 500,
"error_type": "internal_server_error",
"message": "An internal server error occurred",
"details": [
{
"type": "internal_server_error",
"message": "An unexpected error occurred while processing your request"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
olira.log(
log_type: OliraLogType,
patient_id: str,
payload: dict[str, Any] | None = None,
trace: OliraTrace | None = None,
timestamp: str | None = None,
metadata: dict[str, Any] | None = None,
) -> None
OliraModule.Log(
OliraLogType logType,
string patientId,
Dictionary<string, object?>? payload = null,
OliraTrace? trace = null,
string? timestamp = null,
Dictionary<string, object?>? metadata = null,
) // -> None
sdk:event-log
The worker batches and POSTs to /v1/logs/batch. Returns immediately after enqueue unless the queue rejects the event.
Parameters
OliraLogType
required
Catalog log type enum value.
str
required
Olira patient id. Must not be empty; SDK rejects obvious PII patterns.
dict[str, Any] | None
Event-specific JSON payload (≤512 KB wire limit per event).
OliraTrace | None
Optional linkage to your object_type / object_id.
str | None
ISO 8601 timestamp; omit for server default.
dict[str, Any] | None
Arbitrary key/value context stored alongside the event, separate from the typed payload. Surfaced in the Olira Console event detail panel.
Returns
None
Raises
| Exception | When |
|---|---|
OliraError | olira.init() was not called, or the background queue could not accept the event. |
ValidationError | Client-side validation failed (e.g. patient_id rules, payload too large). |
AuthError | HTTP 401 or 403 — invalid API key or insufficient OAuth scope for this endpoint. |
ServerError | HTTP 409 (e.g. conflicting external identifier) or repeated 5xx after retries; includes status_code when applicable. |
RateLimitError | HTTP 429 — rate limited; check retry_after (seconds). |
NetworkError | Connection timeout, DNS failure, or read error after retries. |
import olira
from olira import OliraLogType
olira.init(api_key="YOUR_API_KEY")
olira.log(
log_type=OliraLogType.SYMPTOM_REPORT,
patient_id="8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
payload={"symptoms": []},
)
using Olira;
OliraModule.Init(apiKey: "YOUR_API_KEY");
OliraModule.Log(
logType: OliraLogType.SymptomReport,
patientId: "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
payload: new Dictionary<string, object?> { ["symptoms"] = new List<object?>() });
POST /v1/logs/batch
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"logs": [
{
"log_type": "symptom_report",
"patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
"payload": { "symptoms": [] },
"context": {
"service": "",
"sdk_version": "…",
"sdk_language": "python"
}
}
]
}
# Returns None once the event is accepted into the SDK queue
{
"error": true,
"status_code": 401,
"error_type": "authentication_error",
"message": "Could not validate credentials",
"details": [
{
"type": "authentication_error",
"message": "Could not validate credentials"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 403,
"error_type": "authorization_error",
"message": "Insufficient OAuth scope for this endpoint",
"details": [
{
"type": "authorization_error",
"message": "Insufficient OAuth scope for this endpoint"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 404,
"error_type": "not_found_error",
"message": "Patient not found",
"details": [
{
"type": "not_found_error",
"message": "Patient not found"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 422,
"error_type": "validation_error",
"message": "Request validation failed (1 error)",
"details": [
{
"type": "missing",
"message": "Field required",
"field": "patient_id",
"location": ["body", "patient_id"],
"input_value": null
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 429,
"error_type": "server_error",
"message": "Rate limit exceeded",
"details": [
{
"type": "rate_limit",
"message": "Too many requests; retry after backoff"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 500,
"error_type": "internal_server_error",
"message": "An internal server error occurred",
"details": [
{
"type": "internal_server_error",
"message": "An unexpected error occurred while processing your request"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
⌘I
import olira
from olira import OliraLogType
olira.init(api_key="YOUR_API_KEY")
olira.log(
log_type=OliraLogType.SYMPTOM_REPORT,
patient_id="8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
payload={"symptoms": []},
)
using Olira;
OliraModule.Init(apiKey: "YOUR_API_KEY");
OliraModule.Log(
logType: OliraLogType.SymptomReport,
patientId: "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
payload: new Dictionary<string, object?> { ["symptoms"] = new List<object?>() });
POST /v1/logs/batch
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{
"logs": [
{
"log_type": "symptom_report",
"patient_id": "8a4fde23-0f1b-4c2a-9d7e-b36c1a5f0e82",
"payload": { "symptoms": [] },
"context": {
"service": "",
"sdk_version": "…",
"sdk_language": "python"
}
}
]
}
# Returns None once the event is accepted into the SDK queue
{
"error": true,
"status_code": 401,
"error_type": "authentication_error",
"message": "Could not validate credentials",
"details": [
{
"type": "authentication_error",
"message": "Could not validate credentials"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 403,
"error_type": "authorization_error",
"message": "Insufficient OAuth scope for this endpoint",
"details": [
{
"type": "authorization_error",
"message": "Insufficient OAuth scope for this endpoint"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 404,
"error_type": "not_found_error",
"message": "Patient not found",
"details": [
{
"type": "not_found_error",
"message": "Patient not found"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 422,
"error_type": "validation_error",
"message": "Request validation failed (1 error)",
"details": [
{
"type": "missing",
"message": "Field required",
"field": "patient_id",
"location": ["body", "patient_id"],
"input_value": null
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 429,
"error_type": "server_error",
"message": "Rate limit exceeded",
"details": [
{
"type": "rate_limit",
"message": "Too many requests; retry after backoff"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}
{
"error": true,
"status_code": 500,
"error_type": "internal_server_error",
"message": "An internal server error occurred",
"details": [
{
"type": "internal_server_error",
"message": "An unexpected error occurred while processing your request"
}
],
"timestamp": "2026-05-06T12:00:00+00:00"
}

