# Retrieve an action

Source: https://immiscible.fly.dev/docs/api/get-v1-actions-id

`GET /v1/actions/:id`

The current state of an action this agent asked about. After `approval_required`, poll this: it becomes `allow` (with a receipt whose `hum` claim is `true`) when a person approves, or `deny` when they refuse or the deadline passes. Poll every five seconds for the first minute, then every thirty.

## Authentication

Agent key. An agent-scoped key (`ask_...`) bound to exactly one agent, or an OAuth access token (`aat_...`) issued to an MCP client for that agent, sent as `Authorization: Bearer`. An agent key may ask, poll and settle. It can never approve, widen a mandate or lift a freeze.

## Path parameters

- `id` (string, required): Action id

## Request

curl:

```bash
curl "https://immiscible.fly.dev/v1/actions/act_7Qm2c1f0" \
  -H "authorization: Bearer $IMMISCIBLE_AGENT_KEY"
```

Node:

```ts
import { Immiscible } from '@immiscible/sdk';

// Reads IMMISCIBLE_AGENT_KEY and IMMISCIBLE_URL
const immiscible = new Immiscible();
const decision = await immiscible.getAction('act_7Qm2c1f0');
// or wait for a person: await immiscible.waitForDecision('act_7Qm2c1f0')
console.log(decision.decision);
```

Python:

```python
from immiscible import Immiscible

# Reads IMMISCIBLE_AGENT_KEY and IMMISCIBLE_URL
immiscible = Immiscible()
decision = immiscible.get_action("act_7Qm2c1f0")
# or wait for a person: immiscible.wait_for_decision("act_7Qm2c1f0")
print(decision.decision)
```

## Response

```json
{
  "id": "act_Vd1x0a9e",
  "decision": "allow",
  "status": "allowed",
  "reasons": [
    "approved by a person"
  ],
  "mandateId": "mdt_91c3e0b2",
  "risk": {
    "score": 41,
    "signals": [
      {
        "id": "approve_above",
        "severity": "medium",
        "detail": "above the approval threshold"
      }
    ]
  },
  "receipt": "eyJhbGciOiJFZERTQSIs...",
  "expiresAt": "2026-10-04T10:07:11Z",
  "human": true
}
```
