> ## Documentation Index
> Fetch the complete documentation index at: https://developers.scrunch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Signal

> Fetch one signal by ID, including its full narrative (what happened, why it matters, what to do) when available. Returns 404 for IDs that exist but are not user-facing (non-fired or cluster-child rows) — the same population rule as `listSignals`.



## OpenAPI

````yaml /api-reference/openapi.json get /{brand_id}/signals/{signal_id}
openapi: 3.1.0
info:
  title: Scrunch Data API
  version: 0.1.0
servers:
  - url: https://api.scrunchai.com/v1
security: []
paths:
  /{brand_id}/signals/{signal_id}:
    get:
      tags:
        - signals
      summary: Get Signal
      description: >-
        Fetch one signal by ID, including its full narrative (what happened, why
        it matters, what to do) when available. Returns 404 for IDs that exist
        but are not user-facing (non-fired or cluster-child rows) — the same
        population rule as `listSignals`.
      operationId: getSignal
      parameters:
        - name: brand_id
          in: path
          required: true
          schema:
            type: integer
            title: Brand Id
        - name: signal_id
          in: path
          required: true
          schema:
            type: integer
            title: Signal Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APISignal'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - HTTPBearer:
            - query
components:
  schemas:
    APISignal:
      properties:
        id:
          type: integer
          title: Id
          description: Signal ID. Stable within one detection; use for `getSignal`.
        detected_for_date:
          type: string
          format: date
          title: Detected For Date
          description: Anchor date the nightly detection ran for (YYYY-MM-DD).
        fingerprint:
          type: string
          title: Fingerprint
          description: >-
            Stable identity of the underlying issue across nightly re-detections
            (hash of the slice + metric). An ongoing signal is re-raised daily
            under the same fingerprint; reactions are keyed on it.
        subject_kind:
          type: string
          enum:
            - brand
            - competitor
          title: Subject Kind
          description: 'Whose movement the signal describes: your `brand` or a `competitor`.'
        alert_type:
          type: string
          enum:
            - level_change
            - trend
          title: Alert Type
          description: >-
            Detection kind: `level_change` (step shift) or `trend` (sustained
            drift).
        scope:
          type: string
          enum:
            - account
            - account_platform
            - topic
            - topic_platform
          title: Scope
          description: >-
            Slice granularity: `account`, `account_platform`, `topic`, or
            `topic_platform`.
        metric:
          type: string
          title: Metric
          description: >-
            Metric the signal fired on (e.g. `presence_rate`,
            `position_top_rate`, `cited_domain_rate`).
        platform:
          type: string
          title: Platform
          description: >-
            AI platform the signal was detected on. `(multi)` means the slice
            spans several platforms — see `slice.platforms` for the real list.
        direction:
          type: string
          enum:
            - up
            - down
            - none
          title: Direction
          description: 'Direction of the movement: `up`, `down`, `none`.'
        tier:
          type: string
          enum:
            - high
            - confident
            - worth_a_look
            - provisional
            - low_confidence
            - underpowered
            - untested
          title: Tier
          description: >-
            Confidence tier, best first: `high`, `confident`, `worth_a_look`,
            `provisional`, then noise-floor tiers `low_confidence`,
            `underpowered`, `untested` (hidden by default).
        current_value:
          type: number
          title: Current Value
          description: Metric value over the current window (0-1 rate).
        baseline_value:
          type: number
          title: Baseline Value
          description: Metric value over the baseline window (0-1 rate).
        delta_absolute:
          type: number
          title: Delta Absolute
          description: '`current_value - baseline_value` (positive = up).'
        score:
          anyOf:
            - type: number
            - type: 'null'
          title: Score
          description: >-
            Engine priority score used for the default sort; null for legacy
            rows.
        narrative_what:
          type: string
          title: Narrative What
          description: One-line headline of what changed.
        narrative:
          anyOf:
            - $ref: '#/components/schemas/APISignalNarrative'
            - type: 'null'
          description: >-
            Full narrative (what happened / why it matters / what to do), when
            available.
        slice:
          $ref: '#/components/schemas/APISignalSlice'
          description: The data slice the signal was detected on.
        window_current_start:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Window Current Start
          description: Start of the current comparison window.
        window_current_end:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Window Current End
          description: End of the current comparison window.
        baseline_definition:
          anyOf:
            - type: string
            - type: 'null'
          title: Baseline Definition
          description: Human-readable definition of the baseline window.
        url_movers:
          items:
            $ref: '#/components/schemas/APISignalUrlMover'
          type: array
          title: Url Movers
          description: >-
            Per-URL citation movers behind the signal: the brand/competitor URLs
            whose distinct-response citation counts moved most between the
            baseline and current windows. Emitted for `cited_domain_rate`
            signals; empty for other metrics and older signals. Filterable via
            `mover_url`.
        created_at:
          type: string
          format: date-time
          title: Created At
          description: When the signal row was created (UTC).
      type: object
      required:
        - id
        - detected_for_date
        - fingerprint
        - subject_kind
        - alert_type
        - scope
        - metric
        - platform
        - direction
        - tier
        - current_value
        - baseline_value
        - delta_absolute
        - narrative_what
        - slice
        - created_at
      title: APISignal
      description: A detected, statistically-tested movement in an AI-visibility metric.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    APISignalNarrative:
      properties:
        what_happened:
          anyOf:
            - type: string
            - type: 'null'
          title: What Happened
          description: Plain-language description of the detected change.
        why_it_matters:
          anyOf:
            - type: string
            - type: 'null'
          title: Why It Matters
          description: Why the change is significant for the brand.
        what_to_do:
          anyOf:
            - type: string
            - type: 'null'
          title: What To Do
          description: Suggested next step or investigation.
      type: object
      title: APISignalNarrative
      description: Engine-generated narrative for a signal.
    APISignalSlice:
      properties:
        platforms:
          items:
            type: string
          type: array
          title: Platforms
          description: AI platforms the slice covers. Empty means all platforms.
        topic_labels:
          items:
            type: string
          type: array
          title: Topic Labels
          description: Topic labels the slice covers. Empty means all topics.
        geo_country:
          anyOf:
            - type: string
            - type: 'null'
          title: Geo Country
          description: Country the slice is restricted to, when geo-scoped.
      type: object
      title: APISignalSlice
      description: The data slice a signal was detected on.
    APISignalUrlMover:
      properties:
        normalized_url:
          type: string
          title: Normalized Url
          description: Normalized cited URL (scheme and tracking params stripped).
        owner:
          type: string
          enum:
            - brand
            - competitor
          title: Owner
          description: 'Whose domain the URL belongs to: `brand` or `competitor`.'
        competitor_id:
          anyOf:
            - type: integer
            - type: 'null'
          title: Competitor Id
          description: Competitor ID for `competitor`-owned URLs.
        competitor_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Competitor Name
          description: Competitor name for `competitor`-owned URLs.
        current_responses:
          type: integer
          title: Current Responses
          description: Distinct responses citing the URL in the current window.
        baseline_responses:
          type: integer
          title: Baseline Responses
          description: Distinct responses citing the URL in the baseline window.
        current_prompts:
          type: integer
          title: Current Prompts
          description: Distinct prompts whose responses cite the URL in the current window.
        baseline_prompts:
          type: integer
          title: Baseline Prompts
          description: >-
            Distinct prompts whose responses cite the URL in the baseline
            window.
        contribution:
          anyOf:
            - type: number
            - type: 'null'
          title: Contribution
          description: >-
            Exact share of the signal's metric delta attributed to this URL.
            Brand-owned URLs only; null on competitor entries and older signals.
      type: object
      required:
        - normalized_url
        - owner
        - current_responses
        - baseline_responses
        - current_prompts
        - baseline_prompts
      title: APISignalUrlMover
      description: A per-URL citation mover backing a `cited_domain_rate` signal.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer

````

## Related topics

- [Scrunch MCP Feature Reference and Example Prompts](/mcp/tools.md)
- [List Signals](/api-reference/signals/list-signals.md)
- [Signals API: Detected changes in AI visibility](/api-reference/signals/overview.md)
