---
title: "The Milo Action Layer — a role × lens action-shaped read of the entity, grounded in every relevant dataset surface (CANON Amendment 27). Pick who the read is for (role) and what they want (lens); returns a Milo Action Card with headline claim + evidence chain + so-what + typed actions[] + lens-specific talking_points[] / watch_signals[]. Credit-metered (Opus-tier). Kill-switch flag: `milo-action`."
method: POST
path: "/entities/{entityId}/milo/action"
tags: ["Layer 1 — Profile"]
---

# The Milo Action Layer — a role × lens action-shaped read of the entity, grounded in every relevant dataset surface (CANON Amendment 27). Pick who the read is for (role) and what they want (lens); returns a Milo Action Card with headline claim + evidence chain + so-what + typed actions\[\] + lens-specific talking_points\[\] / watch_signals\[\]. Credit-metered (Opus-tier). Kill-switch flag: \`milo-action\`.

`POST /entities/{entityId}/milo/action`

## Request

- Base URL: `https://entidex.com/api/v1`
- URL: `https://entidex.com/api/v1/entities/{entityId}/milo/action`
- Auth: HTTP bearer

## Path parameters

- `entityId` string, required

## Request body

- object
  - `role` 'sales' | 'executive' | 'communications' | 'investor' | 'competitor-analyst' | 'journalist' | 'founder' | 'regulator' | 'marketing', required
  - `lens` 'situation-brief' | 'meeting-prep' | 'doing-business-with' | 'competitor-view' | 'truth-gap' | 'crisis-watch' | 'positioning' | 'cohort-position' | 'reputation-read', required
  - `bluntness` 1 | 2 | 3: 1=supportive, 2=direct, 3=blunt but never cruel.
  - `mode` 'professional' | 'personal' | 'creator' | 'executive'
  - `energy` 'low' | 'medium' | 'high'
  - `detail` 'brief' | 'standard' | 'deep'
  - `refresh` boolean

## Response `200`

Milo Action Card, or { available: false } when the lens gate is not met (no dataset surface populated), the flag is off, the governor is paused, or the entity is out of tier scope.

- union
  - MiloActionCard
    - `entityId` string, required
    - `entitySlug` string, required
    - `role` 'sales' | 'executive' | 'communications' | 'investor' | 'competitor-analyst' | 'journalist' | 'founder' | 'regulator' | 'marketing', required
    - `lens` 'situation-brief' | 'meeting-prep' | 'doing-business-with' | 'competitor-view' | 'truth-gap' | 'crisis-watch' | 'positioning' | 'cohort-position' | 'reputation-read', required
    - `generatedAt` string, date-time, required
    - `headline_claim` string, required
    - `evidence_chain` string, required
    - `so_what` string, required
    - `confidence_disclosure` string, required
    - `actions` MiloAction[], required
      - `kind` 'recommend' | 'watch' | 'contrast' | 'brief-point' | 'ask' | 'flag', required
      - `priority` 'urgent' | 'high' | 'medium' | 'low', required
      - `text` string, required
      - `sourceSurfaces` string[], required
      - `drillTo` string, nullable
    - `talking_points` MiloTalkingPoint[], nullable
      - `text` string, required
      - `sourceSurfaces` string[], required
      - `note` string, nullable
    - `watch_signals` MiloWatchSignal[], nullable
      - `metric` string, required
      - `rationale` string, required
      - `sourceSurfaces` string[], required
      - `triggerHint` string, nullable
    - `metadata` object, required
      - `observation_completeness` number, required
      - `confidence_envelope` number, required
      - `assessment_window_days` integer, required
      - `canonical_terms_used` string[], required
      - `validation_passed` boolean, required
      - `persona` object, required
        - `role` string, required
        - `lens` string, required
        - `bluntness` 1 | 2 | 3, required
        - `mode` 'professional' | 'personal' | 'creator' | 'executive', required
        - `energy` 'low' | 'medium' | 'high', required
        - `detail` 'brief' | 'standard' | 'deep', required
      - `prompt_version` integer, required
  - MiloActionUnavailable
    - `entityId` string, required
    - `entitySlug` string, required
    - `role` string, required
    - `lens` string, required
    - `available` false, required
    - `reason` 'disabled' | 'no_signal_yet' | 'lens_gate_not_met' | 'tier' | 'entity_out_of_scope' | 'governor_paused', required
    - `detail` string, nullable

## Other responses

- `400`: Invalid role or lens.
- `404`: Entity or resource not found.

---

[API](https://skmtc.dev/entidex/apis/entidex-api.md) · [All operations](https://skmtc.dev/entidex/apis/entidex-api/llms.txt) · [OpenAPI document](https://skmtc.dev/entidex/apis/entidex-api/revisions/86b92f21a09a?raw)
