openapi: 3.2.0 info: title: Latitude Signals API version: v1 description: Open-source AI agent monitoring platform. Full observability into what's failing in production. Discover underlying issues, get alerts when something breaks and verify your fix worked. servers: - url: https://api.latitude.so description: Production servers: - url: https://api.latitude.so tags: - name: Signals paths: /v1/projects/{projectSlug}/signals: get: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: list summary: List project signals description: 'Returns a cursor-paginated page of signals in the project. Each item includes its `scoreEvidence`, lifecycle `states`, and time-window stats: `firstSeenAt`, `lastSeenAt`, `occurrences`, `affectedSessionsPercent`, `trend`, and `tags`.' security: - ApiKeyAuth: [] operationId: listSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Opaque cursor returned in a previous response's `nextCursor`. Omit on the first page. required: false description: Opaque cursor returned in a previous response's `nextCursor`. Omit on the first page. name: cursor in: query - schema: type: integer minimum: 1 maximum: 200 default: 50 description: Page size. Defaults to 50; max 200. required: false description: Page size. Defaults to 50; max 200. name: limit in: query - schema: type: string minLength: 1 maxLength: 500 description: Free-text semantic search across the signals' names and descriptions. required: false description: Free-text semantic search across the signals' names and descriptions. name: query in: query - schema: type: string enum: - active - archived description: '`"active"` for signals that are neither resolved nor ignored; `"archived"` for resolved or ignored signals. Omit to include both.' required: false description: '`"active"` for signals that are neither resolved nor ignored; `"archived"` for resolved or ignored signals. Omit to include both.' name: lifecycleGroup in: query - schema: type: string enum: - lastSeen - occurrences - state default: lastSeen description: Sort field. `lastSeen` orders by most recent occurrence; `occurrences` by total count in the time window; `state` by lifecycle priority. required: false description: Sort field. `lastSeen` orders by most recent occurrence; `occurrences` by total count in the time window; `state` by lifecycle priority. name: sortBy in: query - schema: type: string enum: - asc - desc default: desc description: Sort direction. Defaults to `desc`. required: false description: Sort direction. Defaults to `desc`. name: sortDirection in: query - schema: type: string format: date-time description: Lower bound (inclusive) of the time window. Defaults to ~6 days ago. required: false description: Lower bound (inclusive) of the time window. Defaults to ~6 days ago. name: fromIso in: query - schema: type: string format: date-time description: Upper bound (inclusive) of the time window. Defaults to now. required: false description: Upper bound (inclusive) of the time window. Defaults to now. name: toIso in: query responses: '200': description: Page of signals content: application/json: schema: $ref: '#/components/schemas/PaginatedSignals' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: create summary: Create signal description: Creates a user-defined signal with its membership detector — from `settings` (a `judge` LLM detector or a deterministic `rule`), or a raw `script` (advanced). The script is validated at save time (422 on a compile error). Detectors collect forward from creation; there is no historical backfill. security: - ApiKeyAuth: [] operationId: createSignal parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateSignalBody' responses: '201': description: Signal created content: application/json: schema: $ref: '#/components/schemas/CreateSignalResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/{signalSlug}: patch: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: update summary: Update signal description: Updates a signal's name, description, and evaluation pre-gate `filters`. Filter changes apply forward-only — existing membership is never re-evaluated. The slug is stable. security: - ApiKeyAuth: [] operationId: updateSignal parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateSignalBody' responses: '200': description: Signal updated content: application/json: schema: $ref: '#/components/schemas/UpdateSignalResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' delete: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: delete summary: Delete signal description: Soft-deletes a signal and archives its detector so it stops matching new traces. Existing scores are retained but excluded from reads; the slug becomes reusable. security: - ApiKeyAuth: [] operationId: deleteSignal parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path responses: '204': description: Signal deleted get: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: get summary: Get project signal description: Returns the full-history detail view of one signal, including its `scoreEvidence`, lifecycle `states`, lifetime activity stats, occurrence trend, active evaluations, and current monitoring state. security: - ApiKeyAuth: [] operationId: getSignal parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path responses: '200': description: Signal content: application/json: schema: $ref: '#/components/schemas/SignalDetail' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/analytics: get: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: analytics summary: Get project signal analytics description: 'Returns signal analytics for the project: counts of ongoing, new, and escalating signals, plus total occurrences and a per-bucket occurrence series. Buckets are 12-hour UTC-aligned. The range defaults to the trailing 7 days.' security: - ApiKeyAuth: [] operationId: getSignalAnalytics parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string format: date-time description: Lower bound (inclusive) of the time range. Defaults to 7 days before `toIso`. required: false description: Lower bound (inclusive) of the time range. Defaults to 7 days before `toIso`. name: fromIso in: query - schema: type: string format: date-time description: Upper bound (inclusive) of the time range. Defaults to now. required: false description: Upper bound (inclusive) of the time range. Defaults to now. name: toIso in: query responses: '200': description: Signal analytics content: application/json: schema: $ref: '#/components/schemas/SignalAnalyticsResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/{signalSlug}/trend: get: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: trend summary: Get signal occurrence histogram description: Returns the occurrence histogram for one signal over `[fromIso, toIso]`. The default range is the trailing 14 days. Buckets are 12-hour wide and UTC-aligned. security: - ApiKeyAuth: [] operationId: getSignalTrend parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path - schema: type: string format: date-time description: Lower bound (inclusive). Defaults to ~14 days before `toIso`. required: false description: Lower bound (inclusive). Defaults to ~14 days before `toIso`. name: fromIso in: query - schema: type: string format: date-time description: Upper bound (inclusive). Defaults to now. required: false description: Upper bound (inclusive). Defaults to now. name: toIso in: query responses: '200': description: Occurrence histogram content: application/json: schema: $ref: '#/components/schemas/SignalHistogram' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/{signalSlug}/traces: get: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: listTraces summary: List signal traces description: Returns the page of distinct traces that contributed at least one occurrence of the signal, ordered by most recent activity first. security: - ApiKeyAuth: [] operationId: listSignalTraces parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path - schema: type: string description: Opaque cursor returned in a previous response's `nextCursor`. Omit on the first page. required: false description: Opaque cursor returned in a previous response's `nextCursor`. Omit on the first page. name: cursor in: query - schema: type: integer minimum: 1 maximum: 200 default: 50 description: Page size. Defaults to 50; max 200. required: false description: Page size. Defaults to 50; max 200. name: limit in: query responses: '200': description: Page of traces content: application/json: schema: $ref: '#/components/schemas/PaginatedTraces' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/resolve: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: resolve summary: Resolve signals description: Marks each signal in `signalIds` as resolved, archiving it and re-enabling its notifications. Unless `keepMonitoring` is `false`, linked evaluations keep running so a new occurrence reopens the signal as regressed. security: - ApiKeyAuth: [] operationId: resolveSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ResolveSignalsBody' responses: '200': description: Per-signal result content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/unresolve: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: unresolve summary: Unresolve signals description: Reopens each signal in `signalIds` without marking it as regressed, re-enabling its notifications. security: - ApiKeyAuth: [] operationId: unresolveSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleBody' responses: '200': description: Per-signal result content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/ignore: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: ignore summary: Ignore signals description: Marks each signal in `signalIds` as ignored, archiving it. Monitoring is stopped and notifications are also muted. security: - ApiKeyAuth: [] operationId: ignoreSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleBody' responses: '200': description: Per-signal result content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/unignore: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: unignore summary: Unignore signals description: Returns each signal in `signalIds` to the active list and re-enables its notifications. security: - ApiKeyAuth: [] operationId: unignoreSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleBody' responses: '200': description: Per-signal result content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/mute: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: mute summary: Mute signals description: Silences notifications for each signal in `signalIds`. Muted signals keep tracking occurrences and opening incidents; only notifications stop. security: - ApiKeyAuth: [] operationId: muteSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleBody' responses: '200': description: Per-signal result content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/unmute: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: unmute summary: Unmute signals description: Re-enables notifications for each signal in `signalIds`. security: - ApiKeyAuth: [] operationId: unmuteSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleBody' responses: '200': description: Per-signal result content: application/json: schema: $ref: '#/components/schemas/SignalsLifecycleResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/{signalSlug}/monitor: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: monitor summary: Monitor signal description: Starts (or realigns) monitoring for the signal. When the signal has no active evaluation, a new one is generated. When an active evaluation exists, the call realigns it. The work runs asynchronously and the response returns immediately. Returns 400 when monitoring is already in progress for this signal. security: - ApiKeyAuth: [] operationId: monitorSignal parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path responses: '202': description: Monitor job enqueued content: application/json: schema: $ref: '#/components/schemas/MonitorSignalResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/{signalSlug}/unmonitor: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: unmonitor summary: Unmonitor signal description: Stops monitoring the signal. Idempotent — signals that aren't being monitored return 204 without changing anything. security: - ApiKeyAuth: [] operationId: unmonitorSignal parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path responses: '204': description: Signal unmonitored /v1/projects/{projectSlug}/signals/{signalSlug}/feedback: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: submitFeedback summary: Submit signal feedback description: Records a one-time verdict on whether a flagger-detected signal is a real problem, with an optional reason. Only signals a flagger detected accept feedback, and feedback cannot be changed once submitted. security: - ApiKeyAuth: [] operationId: submitSignalFeedback parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path - schema: type: string description: Signal slug. required: true description: Signal slug. name: signalSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SubmitSignalFeedbackBody' responses: '201': description: Feedback recorded content: application/json: schema: $ref: '#/components/schemas/SubmitSignalFeedbackResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' /v1/projects/{projectSlug}/signals/export: post: tags: - Signals x-fern-sdk-group-name: signals x-fern-sdk-method-name: export summary: Export project signals (async) description: Enqueues an asynchronous CSV export. The response returns immediately; the download link is emailed to `recipient` when the file is ready. The recipient must be a member of the requesting organization. security: - ApiKeyAuth: [] operationId: exportSignals parameters: - schema: type: string description: Project slug (human-readable identifier) required: true description: Project slug (human-readable identifier) name: projectSlug in: path requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ExportSignalsBody' responses: '202': description: Export enqueued content: application/json: schema: $ref: '#/components/schemas/ExportSignalsResponse' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: Not found content: application/json: schema: $ref: '#/components/schemas/Error' '429': description: Export rate limit exceeded content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: SignalAnalyticsResponse: type: object properties: ongoing: $ref: '#/components/schemas/SignalAnalyticsOngoing' new: $ref: '#/components/schemas/SignalAnalyticsNew' escalating: $ref: '#/components/schemas/SignalAnalyticsEscalating' resolved: $ref: '#/components/schemas/SignalAnalyticsResolved' ignored: $ref: '#/components/schemas/SignalAnalyticsIgnored' occurrences: $ref: '#/components/schemas/SignalAnalyticsOccurrences' required: - ongoing - new - escalating - resolved - ignored - occurrences SignalDetail: type: object properties: id: type: string minLength: 24 maxLength: 24 description: Stable signal identifier. organizationId: type: string minLength: 24 maxLength: 24 description: Organization that owns this signal. projectId: type: string minLength: 24 maxLength: 24 description: Project this signal belongs to. slug: type: string description: URL-safe slug derived from `name`. Unique within the project. name: type: string description: Human-readable name. description: type: string description: Description of the signal. source: type: string enum: - annotation - flagger - custom description: Where the signal originated from. scoreEvidence: type: array items: $ref: '#/components/schemas/SignalScoreEvidence' description: Agent Score dimension and evidence-role pairs informed by this signal. An empty list means the signal is diagnostic only. states: type: array items: type: string enum: - new - escalating - ongoing - resolved - regressed - ignored description: Active lifecycle states. A signal may carry multiple states at once (e.g. `escalating` + `new`). resolvedAt: type: string nullable: true description: ISO-8601 timestamp at which the signal was resolved, or `null`. ignoredAt: type: string nullable: true description: ISO-8601 timestamp at which the signal was ignored, or `null`. regressedAt: type: string nullable: true description: ISO-8601 timestamp at which a new occurrence reopened the resolved signal, or `null`. mutedAt: type: string nullable: true description: ISO-8601 timestamp at which notifications were muted, or `null`. Muting only silences notifications; incidents still open. createdAt: type: string description: ISO-8601 timestamp of creation. updatedAt: type: string description: ISO-8601 timestamp of the last update. trend: type: array items: $ref: '#/components/schemas/SignalTrendBucket' description: Daily occurrence counts over the past 14 days. tags: type: array items: type: string description: Tags seen on the signal's occurrences. firstSeenAt: type: string nullable: true description: ISO-8601 timestamp of the earliest occurrence over the signal's lifetime, or `null` if none yet. lastSeenAt: type: string nullable: true description: ISO-8601 timestamp of the latest occurrence over the signal's lifetime, or `null` if none yet. occurrences: type: integer minimum: 0 description: Lifetime occurrence count. affectedSessionsPercent: type: number minimum: 0 maximum: 1 description: Lifetime fraction of project sessions affected by this signal, in `[0, 1]`. evaluations: type: array items: $ref: '#/components/schemas/Evaluation' description: Active evaluations monitoring the signal. Archived and deleted evaluations are excluded. monitoringState: $ref: '#/components/schemas/SignalMonitoringState' feedback: $ref: '#/components/schemas/SignalFeedback' required: - id - organizationId - projectId - slug - name - description - source - scoreEvidence - states - resolvedAt - ignoredAt - regressedAt - mutedAt - createdAt - updatedAt - trend - tags - firstSeenAt - lastSeenAt - occurrences - affectedSessionsPercent - evaluations - monitoringState - feedback Error: type: object properties: error: type: string required: - error Signal: type: object properties: id: type: string minLength: 24 maxLength: 24 description: Stable signal identifier. organizationId: type: string minLength: 24 maxLength: 24 description: Organization that owns this signal. projectId: type: string minLength: 24 maxLength: 24 description: Project this signal belongs to. slug: type: string description: URL-safe slug derived from `name`. Unique within the project. name: type: string description: Human-readable name. description: type: string description: Description of the signal. source: type: string enum: - annotation - flagger - custom description: Where the signal originated from. scoreEvidence: type: array items: $ref: '#/components/schemas/SignalScoreEvidence' description: Agent Score dimension and evidence-role pairs informed by this signal. An empty list means the signal is diagnostic only. states: type: array items: type: string enum: - new - escalating - ongoing - resolved - regressed - ignored description: Active lifecycle states. A signal may carry multiple states at once (e.g. `escalating` + `new`). resolvedAt: type: string nullable: true description: ISO-8601 timestamp at which the signal was resolved, or `null`. ignoredAt: type: string nullable: true description: ISO-8601 timestamp at which the signal was ignored, or `null`. regressedAt: type: string nullable: true description: ISO-8601 timestamp at which a new occurrence reopened the resolved signal, or `null`. mutedAt: type: string nullable: true description: ISO-8601 timestamp at which notifications were muted, or `null`. Muting only silences notifications; incidents still open. createdAt: type: string description: ISO-8601 timestamp of creation. updatedAt: type: string description: ISO-8601 timestamp of the last update. trend: type: array items: $ref: '#/components/schemas/SignalTrendBucket' description: Daily occurrence counts over the past 14 days. tags: type: array items: type: string description: Tags seen on the signal's occurrences. firstSeenAt: type: string description: ISO-8601 timestamp of the earliest occurrence in the time window. lastSeenAt: type: string description: ISO-8601 timestamp of the latest occurrence in the time window. occurrences: type: integer minimum: 0 description: Number of occurrences in the time window. affectedSessionsPercent: type: number minimum: 0 maximum: 1 description: Fraction of project sessions affected by this signal in the time window, in `[0, 1]`. required: - id - organizationId - projectId - slug - name - description - source - scoreEvidence - states - resolvedAt - ignoredAt - regressedAt - mutedAt - createdAt - updatedAt - trend - tags - firstSeenAt - lastSeenAt - occurrences - affectedSessionsPercent ResolveSignalsBody: type: object properties: signalIds: type: array items: type: string minLength: 24 maxLength: 24 minItems: 1 description: Non-empty list of signal ids. Operations are idempotent — already-applied signals are unchanged. keepMonitoring: type: boolean description: Whether linked evaluations keep running after the resolve, so regressions are detected. Defaults to the project setting. required: - signalIds SubmitSignalFeedbackResponse: type: object properties: value: type: number minimum: 0 maximum: 1 description: Normalized score for the signal's usefulness, in `[0, 1]`. passed: type: boolean description: '`true` when the signal is a real problem; `false` when it is a false positive.' feedback: type: string description: Reason given for the verdict. Empty when none was provided. ignored: type: boolean description: Whether the signal was archived as part of this call. required: - value - passed - feedback - ignored EvaluationAlignmentMetrics: type: object nullable: true properties: alignmentMetric: type: number description: Headline score that judges how well the evaluation tracks human annotations. accuracy: type: number description: 'Accuracy: `(TP + TN) / total`.' precision: type: number description: 'Precision: `TP / (TP + FP)`.' recall: type: number description: 'Recall / sensitivity: `TP / (TP + FN)`.' specificity: type: number description: 'Specificity: `TN / (TN + FP)`.' trueness: type: number description: Mean of precision and negative predictive value. f1: type: number description: 'F1 score: harmonic mean of precision and recall.' balancedAccuracy: type: number description: 'Balanced accuracy: mean of recall and specificity.' matthewsCorrelationCoefficient: type: number description: Matthews correlation coefficient, in `[-1, 1]`. required: - alignmentMetric - accuracy - precision - recall - specificity - trueness - f1 - balancedAccuracy - matthewsCorrelationCoefficient description: Alignment metrics computed from the evaluation's confusion matrix, or `null` for an unaligned (e.g. raw / deterministic) evaluation. SignalAnalyticsBucket: type: object properties: bucket: type: string description: ISO-8601 UTC timestamp of the bucket's start. value: type: integer minimum: 0 description: Number of occurrences in this bucket. required: - bucket - value SignalAnalyticsOccurrences: type: object properties: total: type: integer minimum: 0 description: Number of signal occurrences in the range. buckets: type: array items: $ref: '#/components/schemas/SignalAnalyticsBucket' description: Number of signal occurrences per bucket. required: - total - buckets ExportSignalsResponse: type: object properties: status: type: string enum: - queued description: Always `"queued"`. The CSV is emailed to `recipient` when ready. required: - status MonitorSignalResponse: type: object properties: jobId: type: string minLength: 24 maxLength: 24 description: Identifier of the monitor job. evaluationId: type: string nullable: true minLength: 24 maxLength: 24 description: The id of the evaluation being realigned, or `null` when a brand-new evaluation is being generated. required: - jobId - evaluationId PaginatedSignals: type: object properties: items: type: array items: $ref: '#/components/schemas/Signal' description: Page of items, in the requested sort order. nextCursor: type: string nullable: true description: Opaque cursor for fetching the next page. `null` when there are no more pages. Pass it back in `cursor` to continue. hasMore: type: boolean description: '`true` when there is at least one more page after this one.' required: - items - nextCursor - hasMore UpdateSignalBody: type: object properties: name: type: string minLength: 1 maxLength: 128 description: New name. Omitted leaves it unchanged. description: type: string minLength: 1 description: New description. Omitted leaves it unchanged. filters: type: object nullable: true additionalProperties: type: array items: $ref: '#/components/schemas/FilterCondition' description: New evaluation pre-gate. Explicit `null` clears it; omitted leaves it unchanged. SignalAnalyticsEscalating: type: object properties: total: type: integer minimum: 0 description: Number of escalating signals. required: - total SignalHistogram: type: object properties: buckets: type: array items: $ref: '#/components/schemas/SignalHistogramBucket' description: 'One entry per 12-hour UTC-aligned bucket in the requested range, including empty buckets (`count: 0`).' required: - buckets SignalTrendBucket: type: object properties: bucket: type: string description: UTC day bucket (`YYYY-MM-DD`). count: type: integer minimum: 0 description: Number of occurrences within the bucket. required: - bucket - count SignalsLifecycleBody: type: object properties: signalIds: type: array items: type: string minLength: 24 maxLength: 24 minItems: 1 description: Non-empty list of signal ids. Operations are idempotent — already-applied signals are unchanged. required: - signalIds SignalAnalyticsResolved: type: object properties: total: type: integer minimum: 0 description: Number of resolved signals. required: - total SubmitSignalFeedbackBody: type: object properties: passed: type: boolean description: '`true` when the signal is a real problem worth flagging; `false` when it is a false positive.' feedback: type: string maxLength: 1024 description: Reason for the verdict. Required when `passed` is `false`. value: type: number minimum: 0 maximum: 1 description: Normalized score for the signal's usefulness. Defaults to `1` when `passed` is `true`, else `0`. ignore: type: boolean description: Also archive the signal so new occurrences stop being reported. required: - passed SignalAnalyticsIgnored: type: object properties: total: type: integer minimum: 0 description: Number of ignored signals. required: - total UpdateSignalResponse: type: object properties: id: type: string minLength: 24 maxLength: 24 description: Updated signal id. slug: type: string description: URL-safe identifier (stable across updates). changed: type: boolean description: Whether any field actually changed. required: - id - slug - changed SignalMonitoringState: oneOf: - type: object properties: kind: type: string enum: - automatic required: - kind description: The signal is automatically monitored by the system and does not need an evaluation. - type: object properties: kind: type: string enum: - idle required: - kind description: The signal is not currently being monitored. - type: object properties: kind: type: string enum: - generating required: - kind description: An evaluation is being generated for this signal. The signal has no active evaluation yet. - type: object properties: kind: type: string enum: - realigning evaluationId: type: string minLength: 24 maxLength: 24 description: Id of the evaluation currently being realigned. required: - kind - evaluationId description: An active evaluation is being realigned. - type: object properties: kind: type: string enum: - failed phase: type: string enum: - generate - realign description: 'Which workflow failed: `generate` (creating the evaluation) or `realign` (updating it).' evaluationId: type: string minLength: 24 maxLength: 24 description: Id of the evaluation whose realignment failed. Absent when the failure was during `generate`. reason: type: string nullable: true description: Resolved failure message, or `null` once Temporal has dropped the failed run. required: - kind - phase - reason description: The most recent generation or realignment workflow for this signal ended in failure. description: 'Whether the signal is currently being monitored: `automatic`, `idle`, `generating`, `realigning`, or `failed`.' SignalHistogramBucket: type: object properties: bucket: type: string description: ISO-8601 UTC timestamp of the bucket's start. count: type: integer minimum: 0 description: Number of occurrences within the bucket. required: - bucket - count SignalsLifecycleResponse: type: object properties: items: type: array items: $ref: '#/components/schemas/SignalLifecycleItem' description: Per-signal result, in the order requested. required: - items ExportSignalsBody: type: object properties: recipient: type: string format: email description: Email address the download link is sent to. Must belong to a member of the requesting organization. signalIds: type: array items: type: string minLength: 24 maxLength: 24 description: Restrict the export to this subset of signals. Omit to export every signal in the project. lifecycleGroup: type: string enum: - active - archived description: '`"active"` for unmuted signals; `"archived"` for muted signals. Omit to include both.' required: - recipient Trace: type: object properties: organizationId: type: string description: Organization that owns this trace. projectId: type: string description: Project this trace belongs to. traceId: type: string description: 32-character trace identifier. spanCount: type: integer minimum: 0 description: Total number of spans in the trace. errorCount: type: integer minimum: 0 description: Number of spans flagged with an error status. startTime: type: string description: ISO-8601 timestamp of the trace's earliest span. endTime: type: string description: ISO-8601 timestamp of the trace's latest span. durationNs: type: number description: Wall-clock duration of the trace in nanoseconds. timeToFirstTokenNs: type: number description: Nanoseconds from the start of the first LLM span to its first emitted token. `0` if not measured. tokensInput: type: number description: Total input tokens across LLM spans. tokensOutput: type: number description: Total output tokens across LLM spans. tokensCacheRead: type: number description: Total tokens served from the provider's prompt cache. tokensCacheCreate: type: number description: Total tokens written to the provider's prompt cache. tokensReasoning: type: number description: Total reasoning tokens reported by the model. tokensTotal: type: number description: Sum of all token counters. costInputMicrocents: type: number description: Cost of input tokens in microcents (100,000,000 per USD). costOutputMicrocents: type: number description: Cost of output tokens in microcents (100,000,000 per USD). costTotalMicrocents: type: number description: Total cost in microcents (100,000,000 per USD). sessionId: type: string nullable: true description: Conversation/session identifier set by the SDK. `null` when absent. userId: type: string nullable: true description: End-user identifier set by the SDK. `null` when absent. simulationId: type: string nullable: true description: CUID of the simulation that produced this trace. `null` when not a simulation. tags: type: array items: type: string description: Free-form tags attached at ingest time. models: type: array items: type: string description: Model identifiers seen across the trace's LLM spans. providers: type: array items: type: string description: LLM-provider identifiers seen across the trace's spans. serviceNames: type: array items: type: string description: OpenTelemetry `service.name` values seen in the trace. rootSpanId: type: string nullable: true description: Identifier of the trace's root span. `null` when no root span has been ingested. rootSpanName: type: string nullable: true description: '`name` attribute of the root span. `null` when no root span has been ingested.' positiveAnnotationCount: type: integer minimum: 0 description: Number of `passed = true` annotations attached to this trace. negativeAnnotationCount: type: integer minimum: 0 description: Number of `passed = false` annotations attached to this trace. required: - organizationId - projectId - traceId - spanCount - errorCount - startTime - endTime - durationNs - timeToFirstTokenNs - tokensInput - tokensOutput - tokensCacheRead - tokensCacheCreate - tokensReasoning - tokensTotal - costInputMicrocents - costOutputMicrocents - costTotalMicrocents - sessionId - userId - simulationId - tags - models - providers - serviceNames - rootSpanId - rootSpanName - positiveAnnotationCount - negativeAnnotationCount CreateSignalResponse: type: object properties: id: type: string minLength: 24 maxLength: 24 description: Created signal id. slug: type: string description: URL-safe identifier; use it on the other signal endpoints. evaluationId: type: string minLength: 24 maxLength: 24 description: Id of the signal's detector evaluation. required: - id - slug - evaluationId FilterCondition: type: object properties: op: type: string enum: - eq - neq - gt - gte - lt - lte - in - notIn - contains - notContains - gtePercentile description: Comparison operator applied to the field's value (e.g. `eq`, `neq`, `in`). The full operator list lives in the API reference. value: anyOf: - type: string - type: number - type: boolean - type: array items: anyOf: - type: string - type: number description: Right-hand value compared against the field. Arrays are required for `in` / `notIn`-style operators. required: - op - value Evaluation: type: object properties: id: type: string minLength: 24 maxLength: 24 description: Stable evaluation identifier. name: type: string description: Human-readable name. description: type: string description: Generated description of the evaluation. alignedAt: type: string nullable: true description: ISO-8601 timestamp at which the evaluation was last realigned, or `null` if never aligned. archivedAt: type: string nullable: true description: ISO-8601 timestamp at which the evaluation was archived, or `null`. deletedAt: type: string nullable: true description: ISO-8601 timestamp at which the evaluation was deleted, or `null`. createdAt: type: string description: ISO-8601 timestamp of creation. updatedAt: type: string description: ISO-8601 timestamp of the last update. sampling: type: number minimum: 0 maximum: 100 description: Sampling rate as a percentage in `[0, 100]`. `0` means the evaluation is paused. alignment: $ref: '#/components/schemas/EvaluationAlignmentMetrics' required: - id - name - description - alignedAt - archivedAt - deletedAt - createdAt - updatedAt - sampling - alignment CreateSignalBody: type: object properties: name: type: string minLength: 1 maxLength: 128 description: Human-readable name. Used to derive the slug. description: type: string minLength: 1 description: What this signal captures. priority: type: string nullable: true enum: - low - medium - high - urgent - null description: Manual triage priority. Null/omitted leaves it unset. filters: type: object nullable: true additionalProperties: type: array items: $ref: '#/components/schemas/FilterCondition' description: Row-local pre-gate restricting which traces the evaluation runs against. Omitted = all traces. evaluation: anyOf: - type: object properties: settings: oneOf: - type: object properties: kind: type: string enum: - judge criteria: type: string minLength: 1 required: - kind - criteria - type: object properties: kind: type: string enum: - rule match: type: string enum: - all - any default: all conditions: type: array items: oneOf: - type: object properties: type: type: string enum: - text_match scope: type: string enum: - last_assistant - any_assistant - any_user - any_tool - conversation default: last_assistant operator: type: string enum: - contains - not_contains - matches_regex - not_matches_regex value: type: string minLength: 1 caseSensitive: type: boolean default: false required: - type - operator - value - type: object properties: type: type: string enum: - empty_output required: - type - type: object properties: type: type: string enum: - output_length unit: type: string enum: - chars - words default: chars operator: type: string enum: - gt - gte - lt - lte value: type: integer minimum: 0 required: - type - operator - value - type: object properties: type: type: string enum: - json_output expectation: type: string enum: - valid - invalid required: - type - expectation - type: object properties: type: type: string enum: - metric field: type: string enum: - duration - cost - tokensTotal - tokensInput - tokensOutput - errorCount - traceCount - spanCount aggregation: type: string enum: - session - anyTrace - allTraces default: session operator: type: string enum: - gt - gte - lt - lte value: type: number minimum: 0 required: - type - field - operator - value - type: object properties: type: type: string enum: - tool_used toolName: type: string minLength: 1 required: - type - toolName - type: object properties: type: type: string enum: - tool_failed toolName: type: string minLength: 1 required: - type - type: object properties: type: type: string enum: - tool_call_count operator: type: string enum: - gt - gte - lt - lte value: type: integer minimum: 0 required: - type - operator - value - type: object properties: type: type: string enum: - error required: - type - type: object properties: type: type: string enum: - finish_reason value: type: string minLength: 1 required: - type - value - type: object properties: type: type: string enum: - semantic_similarity query: type: string minLength: 1 operator: type: string enum: - gt - gte - lt - lte default: gte threshold: type: number minimum: 0 maximum: 1 required: - type - query - threshold - type: object properties: type: type: string enum: - always required: - type minItems: 1 maxItems: 25 required: - kind - conditions description: Declarative detector config. `judge` compiles to an LLM script; `rule` compiles to a deterministic script over the session. required: - settings - type: object properties: script: type: string minLength: 1 description: Raw sandbox evaluation script (advanced). Must compile in the QuickJS runtime. required: - script description: The signal's membership detector. Provide exactly one of `settings` or `script`. required: - name - description - evaluation SignalAnalyticsNew: type: object properties: total: type: integer minimum: 0 description: Number of new signals. required: - total PaginatedTraces: type: object properties: items: type: array items: $ref: '#/components/schemas/Trace' description: Page of items, in the requested sort order. nextCursor: type: string nullable: true description: Opaque cursor for fetching the next page. `null` when there are no more pages. Pass it back in `cursor` to continue. hasMore: type: boolean description: '`true` when there is at least one more page after this one.' required: - items - nextCursor - hasMore SignalFeedback: type: object nullable: true properties: value: type: number minimum: 0 maximum: 1 description: Normalized score for the signal's usefulness, in `[0, 1]`. passed: type: boolean description: '`true` when the signal is a real problem; `false` when it is a false positive.' feedback: type: string description: Reason given for the verdict. Empty when none was provided. required: - value - passed - feedback description: The verdict submitted for this signal, or `null` when none has been submitted yet. SignalAnalyticsOngoing: type: object properties: total: type: integer minimum: 0 description: Number of ongoing signals. required: - total SignalScoreEvidence: oneOf: - type: object properties: scoreDimension: type: string enum: - outcome description: Agent Score dimension this evidence informs. role: type: string enum: - taskOutcome description: How this evidence informs the dimension. required: - scoreDimension - role - type: object properties: scoreDimension: type: string enum: - reliability description: Agent Score dimension this evidence informs. role: type: string enum: - completionOutcome - operationalIncident description: How this evidence informs the dimension. required: - scoreDimension - role - type: object properties: scoreDimension: type: string enum: - cost description: Agent Score dimension this evidence informs. role: type: string enum: - spendEfficiency description: How this evidence informs the dimension. required: - scoreDimension - role - type: object properties: scoreDimension: type: string enum: - speed description: Agent Score dimension this evidence informs. role: type: string enum: - criticalPathEfficiency description: How this evidence informs the dimension. required: - scoreDimension - role - type: object properties: scoreDimension: type: string enum: - safety description: Agent Score dimension this evidence informs. role: type: string enum: - confirmedHarm - exposure description: How this evidence informs the dimension. required: - scoreDimension - role SignalLifecycleItem: type: object properties: signalId: type: string minLength: 24 maxLength: 24 description: Signal this entry applies to. resolvedAt: type: string nullable: true description: ISO-8601 timestamp at which the signal was resolved, or `null`. ignoredAt: type: string nullable: true description: ISO-8601 timestamp at which the signal was ignored, or `null`. regressedAt: type: string nullable: true description: ISO-8601 timestamp at which a new occurrence reopened the resolved signal, or `null`. mutedAt: type: string nullable: true description: ISO-8601 timestamp at which notifications were muted, or `null`. Ignoring a signal also mutes it. updatedAt: type: string description: ISO-8601 timestamp of the last update. changed: type: boolean description: '`true` when this call changed the signal, `false` when it was already in that state.' required: - signalId - resolvedAt - ignoredAt - regressedAt - mutedAt - updatedAt - changed securitySchemes: ApiKeyAuth: type: http scheme: bearer bearerFormat: API key description: 'Organization-scoped API key, sent as `Authorization: Bearer `.' x-fern-bearer: name: apiKey env: LATITUDE_API_KEY