Skip to main content
POST
/
v1
/
schemas
import olira

olira.init(api_key="YOUR_API_KEY")
registration = olira.register_schema(
    subtype="widget_ping",
    description="Widget sensor ping events",
    input_examples=[{"reading_value": 42, "unit": "lux"}],
)
print(registration.status)
POST /v1/schemas
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "subtype": "widget_ping",
  "description": "Widget sensor ping events",
  "input_examples": [{"reading_value": 42, "unit": "lux"}]
}
SchemaRegistrationResult(
    registration_id="6a5523da0d094fdeed36f566",
    subtype="widget_ping",
    target_version=1,
    submission_mode="assisted",
    status="pending_review",
    self_check=None,
)
{
  "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.register_schema(
    subtype: str,
    description: str = "",
    input_examples: list[dict] | None = None,
    schema: dict | None = None,
    mapping: dict | None = None,
) -> SchemaRegistrationResult
Requires scope: api:org-config Pass both schema and mapping for a “full_spec” submission (e.g. your own agent already authored them); pass neither/either for an “assisted” submission Olira will author from your input_examples + description. Always lands as a pending request — Olira reviews and materializes it before it can be activated.

Parameters

subtype
str
required
New org-defined source event subtype, e.g. rc_conversation_completed (lowercase snake_case, 3–64 chars).
description
str
default:"\"\""
What this source event represents.
input_examples
list[dict] | None
default:"None"
Sample raw payloads (capped at 20).
schema
dict | None
default:"None"
Full JSON Schema for the payload, if already authored (e.g. by your agent).
mapping
dict | None
default:"None"
Full mapping spec (source_root/targets/unmapped_fields_policy), if already authored.

Returns

SchemaRegistrationResult
registration_id
str
Id of the created registration.
subtype
str
The registered subtype.
target_version
int
Version this registration is proposing (1 for a new subtype).
submission_mode
str
“full_spec” if both schema and mapping were provided, else “assisted”.
status
str
“pending_review” — registrations never auto-activate.
self_check
dict | None
Dry-run result against input_examples; populated only for full_spec submissions.

Raises

ExceptionWhen
AuthErrorHTTP 401 or 403 — invalid API key or insufficient OAuth scope for this endpoint.
ValidationErrorHTTP 400, 404, or 422 — malformed JSON, unknown patient, or validation failure (message includes response excerpt).
ServerErrorHTTP 409 (e.g. conflicting external identifier) or repeated 5xx after retries; includes status_code when applicable.
RateLimitErrorHTTP 429 — rate limited; check retry_after (seconds).
NetworkErrorConnection timeout, DNS failure, or read error after retries.
import olira

olira.init(api_key="YOUR_API_KEY")
registration = olira.register_schema(
    subtype="widget_ping",
    description="Widget sensor ping events",
    input_examples=[{"reading_value": 42, "unit": "lux"}],
)
print(registration.status)
POST /v1/schemas
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "subtype": "widget_ping",
  "description": "Widget sensor ping events",
  "input_examples": [{"reading_value": 42, "unit": "lux"}]
}
SchemaRegistrationResult(
    registration_id="6a5523da0d094fdeed36f566",
    subtype="widget_ping",
    target_version=1,
    submission_mode="assisted",
    status="pending_review",
    self_check=None,
)
{
  "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"
}