Skip to main content
Stream audit logs and execution traces to your own infrastructure for compliance, analytics, and observability.

Overview

Relevance AI delivers events in OpenTelemetry (OTEL) format—an open, vendor-neutral standard for telemetry data. This provides several advantages:
  • Interoperability: OTEL is supported by most major observability platforms, making it easy to route data to your existing tools
  • Future-proof: As an industry standard backed by CNCF, OTEL ensures your data pipelines won’t be locked into proprietary formats
  • Rich semantics: Built-in support for traces, logs, and metrics with standardized attribute naming conventions
  • Correlation: Trace IDs link related events across agent invocations, LLM calls, and workforce executions
You don’t need to run an OTEL collector to use this feature. Events are delivered directly to your S3 bucket where you can:
  • Query them directly using Athena, BigQuery, or similar tools
  • Ingest into your data lake (Snowflake, Databricks, etc.)
  • Forward to any OTEL-compatible backend for visualization and alerting
S3 is currently the only supported destination. Support for direct OTEL collector endpoints is on our roadmap.

Setup

Prerequisites

  • AWS account with permissions to create S3 buckets and bucket policies
  • Relevance AI Enterprise plan

1. Create an S3 Bucket

Create a bucket in the same AWS region as your Relevance data:
Relevance RegionAWS Region
Australiaap-southeast-2 (Sydney)
Europeeu-west-2 (London)
USus-east-1 (N. Virginia)

2. Configure Bucket Policy

Add this policy to allow Relevance to write events to your bucket:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowRelevanceEventConsumer",
      "Effect": "Allow",
      "Principal": {
        "AWS": "RELEVANCE_EVENT_CONSUMER_ROLE_ARN"
      },
      "Action": ["s3:PutObject", "s3:GetBucketLocation"],
      "Resource": [
        "arn:aws:s3:::YOUR_BUCKET_NAME",
        "arn:aws:s3:::YOUR_BUCKET_NAME/*"
      ]
    }
  ]
}
Replace:
  • YOUR_BUCKET_NAME: Your S3 bucket name
  • RELEVANCE_EVENT_CONSUMER_ROLE_ARN: Contact your Relevance team for the region-specific IAM role ARN

3. Provide Configuration to Relevance

Send your Account Manager or support team:
  • Bucket Name: Your S3 bucket name
  • Region: AWS region of the bucket
  • Prefix: S3 prefix for events (e.g., relevance-events/)

Delivery Format

Format: Gzipped JSON following the OpenTelemetry JSON specification. File path pattern:
{prefix}/customer-otel-{type}-formatted/org_id={org_id}/dt={YYYY-MM-DD}/year={YYYY}/month={MM}/day={DD}/hour={HH}/minute={MM}/{type}_{org_id}_{timestamp}_{uuid}.json.gz
Event types:
  • logs - Audit logs for administrative and lifecycle events
  • traces - Execution traces for agents, workforces, and LLM completions

Logs

Audit logs provide a complete record of activity across your organization for security monitoring, compliance reporting, and operational visibility. Events capture who did what, when, and from where.
We’re actively expanding our event coverage. If there are specific operations or attributes you’d like to see, let your Account Manager know.

Structure

{
  "resourceLogs": [{
    "scopeLogs": [{
      "logRecords": [...]
    }]
  }]
}

Base Attributes

Included on all log records:
AttributeTypeRequiredDescription
relevance_ai.organization_idstringYesOrganization ID
relevance_ai.project_idstringYesProject ID
relevance_ai.user_idstringNoUser ID that performed the action
relevance_ai.user_emailstringNoEmail of the user
relevance_ai.user_typestringNoType of user (user, api_key, etc.)
relevance_ai.ip_addressstringNoIP address of the request
relevance_ai.device_infostringNoUser agent / device information

Log Record Properties

PropertyTypeDescription
timeUnixNanoint64Timestamp in nanoseconds since Unix epoch
severityNumberintOTEL severity level (9 = Info)
severityTextstring"Info"
body.stringValuestringThe event name
attributesarrayKey-value pairs with base + event attributes

Supported Events

Agent Events

agent_created - Emitted when a new agent is created (from scratch, cloned, or duplicated).
AttributeTypeRequiredDescription
relevance_ai.event.agent_idstringYesID of the newly created agent
relevance_ai.event.cloned_from_agent_idstringNoSource agent ID if cloned
relevance_ai.event.cloned_from_regionstringNoSource region if cloned
relevance_ai.event.cloned_from_project_idstringNoSource project if cloned
agent_updated - Emitted when an agent’s configuration is updated directly (outside draft/publish workflow).
AttributeTypeRequiredDescription
relevance_ai.event.agent_idstringYesID of the updated agent
agent_deleted - Emitted when an agent is permanently deleted.
AttributeTypeRequiredDescription
relevance_ai.event.agent_idstringYesID of the deleted agent
agent_draft_saved - Emitted when work-in-progress changes are saved to an agent.
AttributeTypeRequiredDescription
relevance_ai.event.agent_idstringYesID of the agent being edited
relevance_ai.event.version_idstringYesID of the draft version saved
agent_published - Emitted when agent changes are published to make them live.
AttributeTypeRequiredDescription
relevance_ai.event.agent_idstringYesID of the agent being published
relevance_ai.event.version_idstringYesID of the version now live

Tool Events

tool_created - Emitted when a new tool is created (from scratch or cloned).
AttributeTypeRequiredDescription
relevance_ai.event.tool_idstringYesID of the newly created tool
relevance_ai.event.cloned_from_tool_idstringNoSource tool ID if cloned
relevance_ai.event.cloned_from_regionstringNoSource region if cloned
relevance_ai.event.cloned_from_project_idstringNoSource project if cloned
tool_deleted - Emitted when a tool is permanently deleted.
AttributeTypeRequiredDescription
relevance_ai.event.tool_idstringYesID of the deleted tool
tool_draft_saved - Emitted when work-in-progress changes are saved to a tool.
AttributeTypeRequiredDescription
relevance_ai.event.tool_idstringYesID of the tool being edited
relevance_ai.event.version_idstringNoID of the draft version saved
tool_published - Emitted when tool changes are published to make them live.
AttributeTypeRequiredDescription
relevance_ai.event.tool_idstringYesID of the tool being published
relevance_ai.event.version_idstringYesID of the version now live

Workforce Events

workforce_created - Emitted when a new workforce is created (from scratch, cloned, or duplicated).
AttributeTypeRequiredDescription
relevance_ai.event.workforce_idstringYesID of the newly created workforce
relevance_ai.event.cloned_from_workforce_idstringNoSource workforce ID if cloned
relevance_ai.event.cloned_from_regionstringNoSource region if cloned
relevance_ai.event.cloned_from_project_idstringNoSource project if cloned
workforce_deleted - Emitted when a workforce is permanently deleted.
AttributeTypeRequiredDescription
relevance_ai.event.workforce_idstringYesID of the deleted workforce
workforce_draft_saved - Emitted when work-in-progress changes are saved to a workforce.
AttributeTypeRequiredDescription
relevance_ai.event.workforce_idstringYesID of the workforce being edited
relevance_ai.event.version_idstringNoID of the draft version saved
workforce_published - Emitted when workforce changes are published to make them live.
AttributeTypeRequiredDescription
relevance_ai.event.workforce_idstringYesID of the workforce being published
relevance_ai.event.version_idstringNoID of the version now live

Permission Events

project_user_role_updated - Emitted when a user’s role within a project is updated. This occurs when an admin changes another user’s access level in the project settings.
AttributeTypeRequiredDescription
relevance_ai.event.target_user_idstringYesID of the user whose role was changed
relevance_ai.event.project_rolestringYesThe new project role assigned to the user
organization_user_role_updated - Emitted when a user’s role within an organization is updated. This occurs when an admin changes another user’s organization-level access.
AttributeTypeRequiredDescription
relevance_ai.event.target_user_idstringYesID of the user whose role was changed
relevance_ai.event.organization_rolestringYesThe new organization role assigned to the user

Example Log Record

{
  "resourceLogs": [{
    "scopeLogs": [{
      "logRecords": [{
        "timeUnixNano": 1768742472616000000,
        "severityNumber": 9,
        "severityText": "Info",
        "body": { "stringValue": "agent_deleted" },
        "attributes": [
          { "key": "relevance_ai.organization_id", "value": { "stringValue": "f6fb76a4-..." }},
          { "key": "relevance_ai.project_id", "value": { "stringValue": "3acde218-..." }},
          { "key": "relevance_ai.user_id", "value": { "stringValue": "941afb4d-..." }},
          { "key": "relevance_ai.user_email", "value": { "stringValue": "[email protected]" }},
          { "key": "relevance_ai.user_type", "value": { "stringValue": "user" }},
          { "key": "relevance_ai.ip_address", "value": { "stringValue": "119.18.1.156" }},
          { "key": "relevance_ai.device_info", "value": { "stringValue": "Mozilla/5.0..." }},
          { "key": "relevance_ai.event.agent_id", "value": { "stringValue": "3d47a9f5-..." }}
        ],
        "droppedAttributesCount": 0,
        "traceId": "",
        "spanId": ""
      }]
    }]
  }]
}

Traces

Traces track execution flows for agents, workforces, and LLM completions. Use traces to understand performance, debug issues, and analyze agent behavior.
We’re actively expanding our trace coverage. If there are specific spans or attributes you’d like to see, let your Account Manager know.

Structure

{
  "resourceSpans": [{
    "scopeSpans": [{
      "spans": [...]
    }]
  }]
}

Base Attributes

Included on all spans:
AttributeTypeRequiredDescription
relevance_ai.organization_idstringYesOrganization ID
relevance_ai.project_idstringYesProject ID
relevance_ai.user_idstringNoUser ID that triggered the run
relevance_ai.user_emailstringNoEmail of the user

Span Properties

PropertyTypeDescription
traceIdstring32-character hex trace identifier
spanIdstring16-character hex span identifier
parentSpanIdstringParent span ID (if child span)
namestringSpan name (e.g., invoke_agent My Agent)
kindintSpan kind (3 = CLIENT)
startTimeUnixNanoint64Start time in nanoseconds
endTimeUnixNanoint64End time in nanoseconds
attributesarrayKey-value pairs with span details
status.codeint1 = OK, 2 = ERROR

Trace Hierarchy

Spans share traceId and link via parentSpanId:
multi_agent_system_trigger
├── condition_trigger
└── invoke_agent
    ├── llm_completion
    └── invoke_agent (sub-agent)
        └── llm_completion

Supported Spans

invoke_agent

Records a complete agent conversation/invocation. Name: invoke_agent or invoke_agent {agent_name}
AttributeTypeRequiredDescription
gen_ai.operation.namestringYes"invoke_agent"
gen_ai.agent.idstringYesAgent UUID
gen_ai.agent.namestringNoAgent name
gen_ai.agent.descriptionstringNoAgent description
gen_ai.conversation.idstringYesConversation/task UUID
relevance_ai.agent.relevance_modelstringYesRelevance model ID
relevance_ai.agent.runtimestringYes"default" or "phone_call"
relevance_ai.agent.metadataobjectYesCustom metadata key-value pairs
relevance_ai.agent.knowledge_usedarrayYesKnowledge set IDs used
relevance_ai.agent.escalation.reasonstringNoEscalation reason
relevance_ai.agent.escalation.contextstringNoEscalation context

llm_completion

Records a single LLM inference call. Name: llm_completion {model_name}
AttributeTypeRequiredDescription
gen_ai.operation.namestringYes"llm_completion"
gen_ai.request.modelstringYesRequested model ID
gen_ai.request.temperatureintNoTemperature setting
gen_ai.request.max_tokensintNoMax tokens setting
gen_ai.system_instructionsstringNoSystem prompt
gen_ai.input.messagesstringYesJSON-stringified input messages
gen_ai.tool.definitionsarrayYesJSON-stringified tool definitions
gen_ai.response.idstringYesProvider’s response ID
gen_ai.response.modelstringYesActual model used
gen_ai.response.finish_reasonsarrayYesFinish reasons (e.g., ["stop"])
gen_ai.output.messagesstringYesJSON-stringified output messages
gen_ai.usage.input_tokensintYesInput tokens used
gen_ai.usage.output_tokensintYesOutput tokens generated

multi_agent_system_trigger

Records a complete workforce execution. Name: multi_agent_system_trigger
AttributeTypeRequiredDescription
gen_ai.operation.namestringYes"multi_agent_system_trigger"
relevance_ai.workforce.workforce_idstringYesWorkforce UUID
relevance_ai.workforce.workforce_task_idstringYesTask UUID (for correlation)
relevance_ai.workforce.typestringYes"chat" or "default"
relevance_ai.workforce.metadataobjectYesCustom metadata
relevance_ai.workforce.statusstringYesFinal status

condition_trigger

Records a condition node evaluation in a workforce. Name: condition_trigger
AttributeTypeRequiredDescription
gen_ai.operation.namestringYes"condition_trigger"
relevance_ai.condition.workforce_node_idstringYesNode ID in workforce
relevance_ai.condition.workforce_node_labelstringNoNode label/name
relevance_ai.condition.inputstringYesJSON-stringified condition input
relevance_ai.condition.decisionsarrayYesDecision objects (see below)
relevance_ai.condition.reasoningstringNoLLM reasoning
Decision object:
{ "node": { "id": "node-id", "name": "Node Name" }, "will_run": true }

Attribute Value Types

TypeJSON Format
String{ "stringValue": "text" }
Integer{ "intValue": 123 }
Double{ "doubleValue": 1.23 }
Boolean{ "boolValue": true }
Array{ "arrayValue": { "values": [...] }}
Object{ "kvlistValue": { "values": [{ "key": "k", "value": {...} }] }}

Resources

Understanding OpenTelemetry

Compatible Observability Platforms

OTEL is supported by most major observability platforms. See the OpenTelemetry Registry for a full list of compatible vendors and integrations. For a detailed example of ingesting OTEL data, see Honeycomb’s OpenTelemetry guide.

Querying OTEL Data Directly

OTEL JSON files in S3 can be queried directly using SQL tools like AWS Athena.