generated: '2026-10-18' method: derived generator: derive-data-model.py source: - openapi/latitude-so-openapi.json notation: has_one = property $ref; has_many = array of $ref; belongs_to = _id field summary: entities: 262 entities_in_spec: 262 relationships: 243 entities: - name: AbsoluteVariantTimeRange fields: 3 - name: AccountOrganization fields: 3 description: Organization the request is scoped to. - name: AccountResponse fields: 3 - name: AccountUser fields: 4 description: The user the request is acting on behalf of. `null` for API-key callers — API keys are org-scoped, not user-scoped. - name: ActiveMember fields: 9 - name: AddDatasetColumnBody fields: 1 - name: AgentScoreCauseRow fields: 8 - name: AgentScoreCauses fields: 2 - name: AgentScoreDimension fields: 2 description: Share of comparable sessions expected to accomplish the user's task. - name: AgentScoreDimensionAttribution fields: 6 - name: AgentScoreDimensions fields: 5 - name: AgentScoreExplanation fields: 8 description: Evidence for today's UTC date, retained with the published score when available, or `null` if unavailable. - name: AgentScoreHistory fields: 1 - name: AgentScoreInterval fields: 2 - name: AgentScoreIssueRow fields: 8 - name: AgentScoreSnapshot fields: 8 - name: AlertBaseline fields: 2 description: Fixed-window baseline the current rate is compared against. - name: AlertEscalatingCondition fields: 6 - name: AlertThresholdCondition fields: 4 - name: AnalyticsSeries fields: 1 - name: Annotation fields: 23 - name: AnnotationAnchor fields: 5 description: Optional anchor pinning the annotation to a specific message / part / offset range inside the trace. - name: AnnotationMetadata fields: 6 description: 'Annotation-specific metadata: `rawFeedback` plus a snapshot of the anchor at write time.' - name: ApiKey fields: 11 - name: ApiKeyList fields: 1 - name: ApiKeyListItem fields: 11 - name: BootstrapAccountBody fields: 3 - name: BootstrapAccountResponse fields: 6 - name: BraintrustImportCredentials fields: 3 - name: CreateAnnotationBody fields: 7 - name: CreateApiKeyBody fields: 3 - name: CreateCustomScoreBody fields: 12 - name: CreateDatasetBody fields: 2 - name: CreateEvaluationScoreBody fields: 12 description: Internal, don't use - name: CreateExperimentBody fields: 3 - name: CreateImportBody fields: 7 - name: CreateProjectBody fields: 1 - name: CreateSavedSearchBody fields: 3 - name: CreateSignalBody fields: 5 - name: CreateSignalResponse fields: 3 - name: CurrentAgentScore fields: 3 - name: CustomScoreResponse fields: 23 - name: Dataset fields: 10 - name: DatasetColumn fields: 4 - name: DatasetColumnsList fields: 1 - name: DatasetRow fields: 9 - name: DeleteDatasetRowsBody fields: 1 - name: DeleteDatasetRowsResponse fields: 3 - name: DestinationNotificationsSetting fields: 1 description: Project-level opt-out for data-destination notifications. - name: Error fields: 1 - name: EscalationSetting fields: 1 description: Tuning parameters for the escalation detector. Affects detector behaviour regardless of whether notifications are enabled. - name: Evaluation fields: 10 - name: EvaluationAlignmentMetrics fields: 9 description: Alignment metrics computed from the evaluation's confusion matrix, or `null` for an unaligned (e.g. raw / deterministic) evaluation. - name: EvaluationScoreMetadata fields: 1 description: Evaluation-specific metadata. - name: EvaluationScoreResponse fields: 23 - name: Experiment fields: 9 - name: ExperimentBehavioursMetrics fields: 4 - name: ExperimentComparison fields: 2 - name: ExperimentListItem fields: 12 - name: ExperimentSessionsMetrics fields: 14 - name: ExperimentSignalsMetrics fields: 7 - name: ExperimentToolsMetrics fields: 8 - name: ExperimentTopListItem fields: 3 - name: ExperimentUsersMetrics fields: 8 - name: ExperimentVariant fields: 6 - name: ExportDatasetRowsBody fields: 2 - name: ExportDatasetRowsQueuedResponse fields: 3 - name: ExportDatasetRowsReadyResponse fields: 5 - name: ExportDatasetRowsTooLargeResponse fields: 4 - name: ExportSignalsBody fields: 3 - name: ExportSignalsResponse fields: 1 - name: ExportTracesBody fields: 2 - name: ExportTracesResponse fields: 1 - name: FilterCondition fields: 2 - name: FilterSet fields: 0 description: Filter set keyed by field name. Each entry holds an array of conditions ANDed together for that field; field-level groups are also ANDed across the set. - name: GenAIMessage fields: 0 description: Message in OpenTelemetry GenAI format (`role` + content parts + optional tool calls). - name: GenAISpanMessage fields: 0 description: Message in OpenTelemetry GenAI format (`role` + content parts + optional tool calls). - name: HealthResponse fields: 2 - name: Import fields: 13 - name: ImportConfig fields: 7 description: What the import was asked to bring in, snapshotted when it was created. - name: ImportDetail fields: 0 - name: ImportRowsFromTracesBody fields: 1 - name: ImportRowsFromTracesResponse fields: 3 - name: ImportRun fields: 5 - name: ImportStats fields: 5 description: What the import has brought in so far. - name: Incident fields: 10 - name: IncidentNotificationsSetting fields: 4 description: Per-alert-kind opt-out for incident notifications. - name: InsertDatasetRowsBody fields: 1 - name: InsertDatasetRowsResponse fields: 3 - name: InviteMemberBody fields: 2 - name: InvitedMember fields: 11 - name: LangfuseImportCredentials fields: 4 - name: LangsmithImportCredentials fields: 4 - name: ListImportsResponse fields: 1 - name: ListIncidentsResponse fields: 1 - name: ListMonitorsForTargetBody fields: 2 - name: ListSessionsBody fields: 6 - name: ListTracesBody fields: 6 - name: MemberList fields: 1 - name: MemoryRecordChangeDiff fields: 4 - name: MemoryRecordDetail fields: 3 - name: MemoryRecordRead fields: 7 - name: MemoryRecordReads fields: 1 - name: MemoryRecordSummary fields: 5 - name: MemoryRecordUser fields: 4 - name: MemoryRecordUsers fields: 1 - name: MemoryRecordVersion fields: 9 - name: MemoryStore fields: 7 - name: MemoryStoreChange fields: 5 - name: MemoryStoreDiff fields: 5 - name: MemoryStoreRecord fields: 3 - name: MemoryStoreSnapshot fields: 1 - name: MemoryStoreUser fields: 2 - name: MemoryStoreUsers fields: 1 - name: MemoryUserStore fields: 2 - name: Monitor fields: 13 - name: MonitorConfig fields: 4 description: Rule configuration used when the monitor is evaluated. - name: MonitorFilterSet fields: 0 description: Additional filters applied when evaluating the monitor. - name: MonitorIncident fields: 11 - name: MonitorList fields: 1 - name: MonitorRule fields: 3 description: Single rule evaluated by this monitor. - name: MonitorSignalResponse fields: 2 - name: MonitorTarget fields: 8 description: Entity or filter set watched by this monitor. - name: NotificationsSetting fields: 2 description: Per-group project-level notification toggles (`incidents`, `destinations`). - name: OAuthKey fields: 10 - name: OAuthKeyList fields: 1 - name: OAuthProtectedResourceMetadata fields: 2 - name: PaginatedDatasetRows fields: 3 - name: PaginatedDatasets fields: 3 - name: PaginatedExperiments fields: 3 - name: PaginatedMemoryStores fields: 3 - name: PaginatedMonitorIncidents fields: 3 - name: PaginatedMonitors fields: 3 - name: PaginatedProjects fields: 3 - name: PaginatedSavedSearches fields: 3 - name: PaginatedSessions fields: 3 - name: PaginatedSignals fields: 3 - name: PaginatedToolCalls fields: 3 - name: PaginatedTraceAnnotations fields: 3 - name: PaginatedTraces fields: 3 - name: Project fields: 10 - name: ProjectSettings fields: 4 description: Per-project settings overrides. `null` means inherit from the organization. - name: ProjectSettingsPatch fields: 4 description: Patch the project's settings overrides. Only the fields you send are changed; omitted fields keep their stored values. To clear overrides entirely, edit via the web UI. - name: ProjectUsageResponse fields: 0 - name: ProjectUser fields: 11 - name: QuerySpans fields: 3 - name: QuerySpansBody fields: 5 - name: RecentToolCall fields: 13 - name: RedactionSetting fields: 4 description: Server-side PII redaction applied before spans are stored. An organization-wide policy can override this one; when the organization locks its policy, project values are ignored entirely rather than me - name: RelativeVariantTimeRange fields: 2 - name: ReorderDatasetColumnsBody fields: 1 - name: ResolveSignalsBody fields: 2 - name: ResolvedRange fields: 2 description: The absolute window the metrics were computed over. - name: RetryImportBody fields: 1 - name: SavedSearch fields: 10 - name: Session fields: 33 - name: SessionAnalyticsBucket fields: 2 - name: SessionAnalyticsCost fields: 2 - name: SessionAnalyticsDuration fields: 2 - name: SessionAnalyticsResponse fields: 7 - name: SessionAnalyticsSessions fields: 2 - name: SessionAnalyticsSpans fields: 2 - name: SessionAnalyticsTimeToFirstToken fields: 2 - name: SessionAnalyticsTokens fields: 2 - name: SessionAnalyticsTraces fields: 2 - name: SessionAssessment fields: 5 - name: SessionAssessmentCostEvaluation fields: 5 description: Cost family evaluation for this evidence. Only Cost evidence carries one. - name: SessionAssessmentCostFamilySummary fields: 5 - name: SessionAssessmentCostMetricEvidence fields: 11 - name: SessionAssessmentEstimateRange fields: 5 description: 'Impact in the family''s own unit. Never a score: sessions do not receive Cost numbers.' - name: SessionAssessmentItem fields: 16 - name: SessionDetail fields: 35 - name: SessionFilterSet fields: 0 description: 'Filter set keyed by session field. Each entry holds an array of conditions ANDed together for that field; field-level groups are ANDed across the set. Valid fields: status, name, traceId, sessionId, s' - name: SessionMemoryChange fields: 9 - name: SessionMemoryChanges fields: 1 - name: SessionMemorySummary fields: 2 - name: SessionSignal fields: 19 - name: SessionSignals fields: 1 - name: Signal fields: 21 - name: SignalAnalyticsBucket fields: 2 - name: SignalAnalyticsEscalating fields: 1 - name: SignalAnalyticsIgnored fields: 1 - name: SignalAnalyticsNew fields: 1 - name: SignalAnalyticsOccurrences fields: 2 - name: SignalAnalyticsOngoing fields: 1 - name: SignalAnalyticsResolved fields: 1 - name: SignalAnalyticsResponse fields: 6 - name: SignalDetail fields: 24 - name: SignalFeedback fields: 3 description: The verdict submitted for this signal, or `null` when none has been submitted yet. - name: SignalHistogram fields: 1 - name: SignalHistogramBucket fields: 2 - name: SignalLifecycleItem fields: 7 - name: SignalTrendBucket fields: 2 - name: SignalsLifecycleBody fields: 1 - name: SignalsLifecycleResponse fields: 1 - name: Span fields: 42 - name: SpanDetail fields: 58 - name: SpanRowFilterSet fields: 0 description: Structured filter set over span row fields. `gtePercentile` is not supported — use absolute thresholds or a percentile metric. - name: SubmitSignalFeedbackBody fields: 4 - name: SubmitSignalFeedbackResponse fields: 4 - name: ToolCallHistogramBucket fields: 4 - name: ToolCoOccurrenceResponse fields: 1 - name: ToolCoOccurrenceRow fields: 2 - name: ToolContextBreakdownResponse fields: 1 - name: ToolContextBreakdownRow fields: 3 - name: ToolDefinition fields: 3 - name: ToolDefinitionDetail fields: 5 description: Latest definition seen for the tool. `null` when never offered in the range. - name: ToolDetailResponse fields: 3 - name: ToolErrorBreakdownResponse fields: 1 - name: ToolErrorBreakdownRow fields: 4 - name: ToolHistogramResponse fields: 1 - name: ToolParameterStat fields: 3 - name: ToolParameterStatsResponse fields: 2 - name: ToolParameterValueStat fields: 2 - name: ToolSummary fields: 7 - name: ToolUsageMetrics fields: 13 description: Call-side usage metrics. `null` when the tool was defined but never called in the range. - name: ToolsAnalyticsResponse fields: 2 - name: ToolsAnalyticsTotals fields: 4 description: Project-wide denominators for the range. - name: Trace fields: 29 - name: TraceAnalyticsBucket fields: 2 - name: TraceAnalyticsCost fields: 2 - name: TraceAnalyticsDuration fields: 2 - name: TraceAnalyticsResponse fields: 6 - name: TraceAnalyticsSpans fields: 2 - name: TraceAnalyticsTimeToFirstToken fields: 2 - name: TraceAnalyticsTokens fields: 2 - name: TraceAnalyticsTraces fields: 2 - name: TraceDetail fields: 31 - name: TraceFilterSet fields: 0 description: 'Filter set keyed by trace field. Each entry holds an array of conditions ANDed together for that field; field-level groups are ANDed across the set. Valid fields: status, name, traceId, sessionId, sim' - name: TraceSpans fields: 1 - name: UpdateAnnotationBody fields: 3 - name: UpdateApiKeyBody fields: 1 - name: UpdateDatasetBody fields: 2 - name: UpdateDatasetColumnBody fields: 1 - name: UpdateDatasetRowBody fields: 5 - name: UpdateDatasetRowResponse fields: 2 - name: UpdateExperimentBody fields: 3 - name: UpdateMemberRoleBody fields: 1 - name: UpdateMonitorBody fields: 3 - name: UpdateProjectBody fields: 3 - name: UpdateSavedSearchBody fields: 3 - name: UpdateSignalBody fields: 3 - name: UpdateSignalResponse fields: 3 - name: UsageCategory fields: 2 - name: UsageProject fields: 5 - name: UsageResponse fields: 5 - name: UserActivityBucket fields: 3 - name: UserActivityResponse fields: 4 - name: UserBehaviour fields: 6 - name: UserBehavioursResponse fields: 1 - name: UserCostRollup fields: 3 description: Cost aggregates across every matching user, not just this page. - name: UserListResponse fields: 6 - name: UserMemoryStores fields: 1 - name: UserProfileResponse fields: 13 - name: UserSignal fields: 9 - name: UserSignalsResponse fields: 1 - name: UserUsageResponse fields: 1 - name: UserUsageSlice fields: 2 - name: UsersOverviewBucket fields: 5 - name: UsersOverviewResponse fields: 10 - name: VariantComparison fields: 6 - name: VariantMetrics fields: 5 description: 'Population-scoped metrics grouped by entity. Each metric is a `{ value, delta }` pair; `delta` is the change vs the baseline (`null` on the baseline itself). `tools`, `signals`, and `behaviours` also ' relationships: - from: Project to: ProjectSettings type: has_one via: settings - from: ProjectSettings to: RedactionSetting type: has_one via: redaction - from: ProjectSettings to: NotificationsSetting type: has_one via: notifications - from: ProjectSettings to: EscalationSetting type: has_one via: escalation - from: NotificationsSetting to: IncidentNotificationsSetting type: has_one via: incidents - from: NotificationsSetting to: DestinationNotificationsSetting type: has_one via: destinations - from: PaginatedProjects to: Project type: has_many via: items - from: UpdateProjectBody to: ProjectSettingsPatch type: has_one via: settings - from: ProjectSettingsPatch to: RedactionSetting type: has_one via: redaction - from: ProjectSettingsPatch to: NotificationsSetting type: has_one via: notifications - from: ProjectSettingsPatch to: EscalationSetting type: has_one via: escalation - from: CustomScoreResponse to: Project type: belongs_to via: projectId - from: CustomScoreResponse to: Session type: belongs_to via: sessionId - from: CustomScoreResponse to: Trace type: belongs_to via: traceId - from: CustomScoreResponse to: Span type: belongs_to via: spanId - from: CustomScoreResponse to: Signal type: belongs_to via: signalId - from: EvaluationScoreResponse to: Project type: belongs_to via: projectId - from: EvaluationScoreResponse to: Session type: belongs_to via: sessionId - from: EvaluationScoreResponse to: Trace type: belongs_to via: traceId - from: EvaluationScoreResponse to: Span type: belongs_to via: spanId - from: EvaluationScoreResponse to: Signal type: belongs_to via: signalId - from: EvaluationScoreResponse to: EvaluationScoreMetadata type: has_one via: metadata - from: CreateEvaluationScoreBody to: EvaluationScoreMetadata type: has_one via: metadata - from: Annotation to: Project type: belongs_to via: projectId - from: Annotation to: Session type: belongs_to via: sessionId - from: Annotation to: Trace type: belongs_to via: traceId - from: Annotation to: Span type: belongs_to via: spanId - from: Annotation to: Signal type: belongs_to via: signalId - from: Annotation to: AnnotationMetadata type: has_one via: metadata - from: CreateAnnotationBody to: Signal type: belongs_to via: signalId - from: CreateAnnotationBody to: AnnotationAnchor type: has_one via: anchor - from: PaginatedTraces to: Trace type: has_many via: items - from: Trace to: Project type: belongs_to via: projectId - from: Trace to: Session type: belongs_to via: sessionId - from: ListTracesBody to: TraceFilterSet type: has_one via: filters - from: TraceAnalyticsResponse to: TraceAnalyticsTraces type: has_one via: traces - from: TraceAnalyticsResponse to: TraceAnalyticsCost type: has_one via: cost - from: TraceAnalyticsResponse to: TraceAnalyticsDuration type: has_one via: duration - from: TraceAnalyticsResponse to: TraceAnalyticsTokens type: has_one via: tokens - from: TraceAnalyticsResponse to: TraceAnalyticsTimeToFirstToken type: has_one via: timeToFirstToken - from: TraceAnalyticsResponse to: TraceAnalyticsSpans type: has_one via: spans - from: TraceAnalyticsTraces to: TraceAnalyticsBucket type: has_many via: buckets - from: TraceAnalyticsCost to: TraceAnalyticsBucket type: has_many via: buckets - from: TraceAnalyticsDuration to: TraceAnalyticsBucket type: has_many via: buckets - from: TraceAnalyticsTokens to: TraceAnalyticsBucket type: has_many via: buckets - from: TraceAnalyticsTimeToFirstToken to: TraceAnalyticsBucket type: has_many via: buckets - from: TraceAnalyticsSpans to: TraceAnalyticsBucket type: has_many via: buckets - from: TraceDetail to: Project type: belongs_to via: projectId - from: TraceDetail to: Trace type: belongs_to via: traceId - from: TraceDetail to: Session type: belongs_to via: sessionId - from: TraceDetail to: GenAIMessage type: has_many via: conversation - from: TraceSpans to: Span type: has_many via: items - from: Span to: Project type: belongs_to via: projectId - from: Span to: Trace type: belongs_to via: traceId - from: Span to: Session type: belongs_to via: sessionId - from: Span to: ApiKey type: belongs_to via: apiKeyId - from: SpanDetail to: Project type: belongs_to via: projectId - from: SpanDetail to: Trace type: belongs_to via: traceId - from: SpanDetail to: Span type: belongs_to via: spanId - from: SpanDetail to: Session type: belongs_to via: sessionId - from: SpanDetail to: ApiKey type: belongs_to via: apiKeyId - from: SpanDetail to: GenAISpanMessage type: has_many via: inputMessages - from: SpanDetail to: GenAISpanMessage type: has_many via: outputMessages - from: SpanDetail to: ToolDefinition type: has_many via: toolDefinitions - from: PaginatedTraceAnnotations to: Annotation type: has_many via: items - from: SessionMemorySummary to: MemoryRecordSummary type: has_many via: records - from: SessionMemoryChanges to: SessionMemoryChange type: has_many via: records - from: ToolsAnalyticsResponse to: ToolsAnalyticsTotals type: has_one via: totals - from: ToolsAnalyticsResponse to: ToolSummary type: has_many via: tools - from: ToolSummary to: ToolUsageMetrics type: has_one via: metrics - from: ToolSummary to: ToolCallHistogramBucket type: has_many via: trend - from: ToolHistogramResponse to: ToolCallHistogramBucket type: has_many via: items - from: ToolParameterStatsResponse to: ToolParameterStat type: has_many via: stats - from: ToolParameterStat to: ToolParameterValueStat type: has_many via: topValues - from: ToolContextBreakdownResponse to: ToolContextBreakdownRow type: has_many via: items - from: ToolCoOccurrenceResponse to: ToolCoOccurrenceRow type: has_many via: items - from: ToolErrorBreakdownResponse to: ToolErrorBreakdownRow type: has_many via: items - from: PaginatedToolCalls to: RecentToolCall type: has_many via: items - from: RecentToolCall to: Span type: belongs_to via: spanId - from: RecentToolCall to: Trace type: belongs_to via: traceId - from: RecentToolCall to: Session type: belongs_to via: sessionId - from: ToolDetailResponse to: ToolDefinitionDetail type: has_one via: definition - from: ToolDetailResponse to: ToolUsageMetrics type: has_one via: usage - from: ToolDetailResponse to: ToolUsageMetrics type: has_one via: errorsUsage - from: UserListResponse to: ProjectUser type: has_many via: items - from: UserListResponse to: UserCostRollup type: has_one via: costRollup - from: UsersOverviewResponse to: UsersOverviewBucket type: has_many via: histogram - from: UserActivityResponse to: UserActivityBucket type: has_many via: buckets - from: UserUsageResponse to: UserUsageSlice type: has_many via: items - from: UserSignalsResponse to: UserSignal type: has_many via: items - from: UserSignal to: Signal type: belongs_to via: signalId - from: UserBehavioursResponse to: UserBehaviour type: has_many via: items - from: UserMemoryStores to: MemoryUserStore type: has_many via: items - from: PaginatedSavedSearches to: SavedSearch type: has_many via: items - from: SavedSearch to: Project type: belongs_to via: projectId - from: SavedSearch to: FilterSet type: has_one via: filters - from: CreateSavedSearchBody to: FilterSet type: has_one via: filters - from: UpdateSavedSearchBody to: FilterSet type: has_one via: filters - from: PaginatedSignals to: Signal type: has_many via: items - from: Signal to: Project type: belongs_to via: projectId - from: Signal to: SignalTrendBucket type: has_many via: trend - from: CreateSignalResponse to: Evaluation type: belongs_to via: evaluationId - from: SignalAnalyticsResponse to: SignalAnalyticsOngoing type: has_one via: ongoing - from: SignalAnalyticsResponse to: SignalAnalyticsNew type: has_one via: new - from: SignalAnalyticsResponse to: SignalAnalyticsEscalating type: has_one via: escalating - from: SignalAnalyticsResponse to: SignalAnalyticsResolved type: has_one via: resolved - from: SignalAnalyticsResponse to: SignalAnalyticsIgnored type: has_one via: ignored - from: SignalAnalyticsResponse to: SignalAnalyticsOccurrences type: has_one via: occurrences - from: SignalAnalyticsOccurrences to: SignalAnalyticsBucket type: has_many via: buckets - from: SignalDetail to: Project type: belongs_to via: projectId - from: SignalDetail to: SignalTrendBucket type: has_many via: trend - from: SignalDetail to: Evaluation type: has_many via: evaluations - from: SignalDetail to: SignalFeedback type: has_one via: feedback - from: Evaluation to: EvaluationAlignmentMetrics type: has_one via: alignment - from: SignalHistogram to: SignalHistogramBucket type: has_many via: buckets - from: SignalsLifecycleResponse to: SignalLifecycleItem type: has_many via: items - from: SignalLifecycleItem to: Signal type: belongs_to via: signalId - from: ResolveSignalsBody to: Signal type: belongs_to via: signalIds - from: SignalsLifecycleBody to: Signal type: belongs_to via: signalIds - from: MonitorSignalResponse to: Evaluation type: belongs_to via: evaluationId - from: ExportSignalsBody to: Signal type: belongs_to via: signalIds - from: ListIncidentsResponse to: Incident type: has_many via: items - from: Incident to: Project type: belongs_to via: projectId - from: Incident to: AlertThresholdCondition type: has_one via: condition - from: Incident to: AlertEscalatingCondition type: has_one via: condition - from: PaginatedDatasets to: Dataset type: has_many via: items - from: Dataset to: Project type: belongs_to via: projectId - from: Dataset to: DatasetColumn type: has_many via: columns - from: PaginatedDatasetRows to: DatasetRow type: has_many via: items - from: DatasetRow to: Dataset type: belongs_to via: datasetId - from: DatasetColumnsList to: DatasetColumn type: has_many via: columns - from: ApiKey to: Project type: belongs_to via: projectId - from: CreateApiKeyBody to: Project type: belongs_to via: projectId - from: ApiKeyList to: ApiKeyListItem type: has_many via: apiKeys - from: ApiKeyListItem to: Project type: belongs_to via: projectId - from: OAuthKeyList to: OAuthKey type: has_many via: oauthKeys - from: AccountResponse to: AccountUser type: has_one via: user - from: AccountResponse to: AccountOrganization type: has_one via: organization - from: PaginatedMonitors to: Monitor type: has_many via: items - from: Monitor to: Project type: belongs_to via: projectId - from: Monitor to: MonitorTarget type: has_one via: target - from: Monitor to: MonitorRule type: has_one via: rule - from: MonitorTarget to: MonitorFilterSet type: has_one via: filterSet - from: MonitorTarget to: SavedSearch type: belongs_to via: savedSearchId - from: MonitorRule to: MonitorConfig type: has_one via: config - from: MonitorConfig to: MonitorFilterSet type: has_one via: filterSet - from: MonitorList to: Monitor type: has_many via: items - from: ListMonitorsForTargetBody to: MonitorFilterSet type: has_one via: filterSetContains - from: PaginatedMonitorIncidents to: MonitorIncident type: has_many via: items - from: MonitorIncident to: Project type: belongs_to via: projectId - from: MonitorIncident to: AlertThresholdCondition type: has_one via: condition - from: MonitorIncident to: AlertEscalatingCondition type: has_one via: condition - from: QuerySpans to: Span type: has_many via: items - from: QuerySpansBody to: SpanRowFilterSet type: has_one via: filters - from: PaginatedExperiments to: ExperimentListItem type: has_many via: items - from: ExperimentListItem to: Project type: belongs_to via: projectId - from: ExperimentListItem to: ExperimentVariant type: has_many via: variants - from: ExperimentVariant to: FilterSet type: has_one via: filterSet - from: Experiment to: Project type: belongs_to via: projectId - from: Experiment to: ExperimentVariant type: has_many via: variants - from: ExperimentComparison to: Experiment type: has_one via: experiment - from: ExperimentComparison to: VariantComparison type: has_many via: variants - from: VariantComparison to: ResolvedRange type: has_one via: resolvedRange - from: VariantComparison to: VariantMetrics type: has_one via: metrics - from: VariantMetrics to: ExperimentSessionsMetrics type: has_one via: sessions - from: VariantMetrics to: ExperimentUsersMetrics type: has_one via: users - from: VariantMetrics to: ExperimentToolsMetrics type: has_one via: tools - from: VariantMetrics to: ExperimentSignalsMetrics type: has_one via: signals - from: VariantMetrics to: ExperimentBehavioursMetrics type: has_one via: behaviours - from: ExperimentToolsMetrics to: ExperimentTopListItem type: has_many via: top - from: ExperimentSignalsMetrics to: ExperimentTopListItem type: has_many via: top - from: ExperimentBehavioursMetrics to: ExperimentTopListItem type: has_many via: top - from: PaginatedSessions to: Session type: has_many via: items - from: Session to: Project type: belongs_to via: projectId - from: Session to: Trace type: belongs_to via: traceIds - from: ListSessionsBody to: SessionFilterSet type: has_one via: filters - from: SessionAnalyticsResponse to: SessionAnalyticsSessions type: has_one via: sessions - from: SessionAnalyticsResponse to: SessionAnalyticsTraces type: has_one via: traces - from: SessionAnalyticsResponse to: SessionAnalyticsCost type: has_one via: cost - from: SessionAnalyticsResponse to: SessionAnalyticsDuration type: has_one via: duration - from: SessionAnalyticsResponse to: SessionAnalyticsTokens type: has_one via: tokens - from: SessionAnalyticsResponse to: SessionAnalyticsTimeToFirstToken type: has_one via: timeToFirstToken - from: SessionAnalyticsResponse to: SessionAnalyticsSpans type: has_one via: spans - from: SessionAnalyticsSessions to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionAnalyticsTraces to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionAnalyticsCost to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionAnalyticsDuration to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionAnalyticsTokens to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionAnalyticsTimeToFirstToken to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionAnalyticsSpans to: SessionAnalyticsBucket type: has_many via: buckets - from: SessionDetail to: Project type: belongs_to via: projectId - from: SessionDetail to: Session type: belongs_to via: sessionId - from: SessionDetail to: Trace type: belongs_to via: traceIds - from: SessionDetail to: GenAIMessage type: has_many via: conversation - from: SessionAssessment to: Session type: belongs_to via: sessionId - from: SessionAssessment to: SessionAssessmentItem type: has_many via: items - from: SessionAssessmentItem to: Signal type: belongs_to via: signalIds - from: SessionAssessmentCostEvaluation to: SessionAssessmentEstimateRange type: has_one via: nativeImpact - from: SessionAssessmentCostFamilySummary to: SessionAssessmentCostMetricEvidence type: has_many via: metrics - from: SessionAssessmentCostFamilySummary to: SessionAssessmentEstimateRange type: has_one via: nativeImpact - from: SessionAssessmentCostMetricEvidence to: SessionAssessmentEstimateRange type: has_one via: nativeImpact - from: SessionSignals to: SessionSignal type: has_many via: items - from: SessionSignal to: Project type: belongs_to via: projectId - from: SessionSignal to: Trace type: belongs_to via: traceIds - from: PaginatedMemoryStores to: MemoryStore type: has_many via: items - from: MemoryStoreSnapshot to: MemoryStoreRecord type: has_many via: records - from: MemoryStoreDiff to: MemoryStoreChange type: has_many via: changes - from: MemoryStoreUsers to: MemoryStoreUser type: has_many via: items - from: MemoryRecordDetail to: MemoryRecordVersion type: has_many via: versions - from: MemoryRecordVersion to: Span type: belongs_to via: spanId - from: MemoryRecordVersion to: Trace type: belongs_to via: traceId - from: MemoryRecordVersion to: Session type: belongs_to via: sessionId - from: MemoryRecordReads to: MemoryRecordRead type: has_many via: items - from: MemoryRecordRead to: Span type: belongs_to via: spanId - from: MemoryRecordRead to: Trace type: belongs_to via: traceId - from: MemoryRecordRead to: Session type: belongs_to via: sessionId - from: MemoryRecordUsers to: MemoryRecordUser type: has_many via: items - from: ListImportsResponse to: Import type: has_many via: imports - from: Import to: Project type: belongs_to via: projectId - from: Import to: ImportConfig type: has_one via: config - from: Import to: ImportStats type: has_one via: stats - from: ImportDetail to: ImportRun type: has_many via: runs - from: ImportRun to: ImportStats type: has_one via: stats - from: UsageResponse to: UsageCategory type: has_many via: categories - from: UsageResponse to: UsageProject type: has_many via: projects - from: UsageProject to: UsageCategory type: has_many via: categories - from: AgentScoreHistory to: AgentScoreSnapshot type: has_many via: snapshots - from: AgentScoreSnapshot to: AgentScoreInterval type: has_one via: interval - from: AgentScoreSnapshot to: AgentScoreDimensions type: has_one via: dimensions - from: AgentScoreDimensions to: AgentScoreDimension type: has_one via: outcome - from: AgentScoreDimensions to: AgentScoreDimension type: has_one via: reliability - from: AgentScoreDimensions to: AgentScoreDimension type: has_one via: cost - from: AgentScoreDimensions to: AgentScoreDimension type: has_one via: speed - from: AgentScoreDimensions to: AgentScoreDimension type: has_one via: safety - from: AgentScoreDimension to: AgentScoreInterval type: has_one via: interval - from: AgentScoreCauses to: AgentScoreExplanation type: has_one via: explanation - from: AgentScoreExplanation to: AgentScoreDimensionAttribution type: has_many via: attribution - from: AgentScoreExplanation to: AgentScoreIssueRow type: has_many via: outcomeIssues - from: AgentScoreExplanation to: AgentScoreIssueRow type: has_many via: safetyConfirmedHarm - from: AgentScoreExplanation to: AgentScoreIssueRow type: has_many via: safetyExposure - from: AgentScoreDimensionAttribution to: AgentScoreCauseRow type: has_many via: rows - from: AgentScoreIssueRow to: Signal type: belongs_to via: signalIds - from: CurrentAgentScore to: AgentScoreSnapshot type: has_one via: snapshot