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

# Actions

> List proposed/applied actions and approve or reject them.

```
GET   /v1/cofounder/actions
PATCH /v1/cofounder/actions/:actionId/review
```

Every external action proposed by the agent (Slack message, Linear issue, ASC update, etc.) lands in `cofounder_actions`. Some are auto-applied immediately; the rest sit in `proposed` status waiting for you to approve or reject.

## GET — list actions

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl https://api.appeeky.com/v1/cofounder/actions?status=proposed -H "X-API-Key: $KEY"
```

Query params:

| Param    | Default | Notes                                                       |
| -------- | ------- | ----------------------------------------------------------- |
| `appId`  | (all)   | Filter by app                                               |
| `status` | (all)   | `proposed`, `approved`, `applied`, `rejected`, `superseded` |
| `limit`  | 20      | Max 100                                                     |

Response:

```jsonc theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "data": {
    "actions": [
      {
        "id": "uuid",
        "run_id": "uuid",
        "owner_email": "you@example.com",
        "app_id": "6479581124",
        "fingerprint": "sha1...",
        "action_type": "asc_metadata_update",
        "payload": {
          "type": "asc_metadata_update",
          "field": "subtitle",
          "currentValue": "Take amazing screenshots",
          "proposedValue": "AI-powered screenshot stitching",
          "rationale": "Aligns with rising 'AI' keyword volume...",
          "locale": "en-US"
        },
        "status": "proposed",
        "external_id": null,
        "reviewed_at": null,
        "applied_at": null,
        "created_at": "2026-05-02T08:00:13Z",
        "updated_at": "2026-05-02T08:00:13Z"
      }
    ],
    "total": 17
  }
}
```

## PATCH — approve or reject

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
curl -X PATCH https://api.appeeky.com/v1/cofounder/actions/<actionId>/review \
  -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
  -d '{ "decision": "approved" }'
```

Body:

```jsonc theme={"theme":{"light":"github-light","dark":"github-dark"}}
{ "decision": "approved" }   // or "rejected"
```

Approving doesn't execute the action immediately — it changes the status so the next actor cycle picks it up. Rejecting marks it as `rejected` and the agent will (gradually) learn to stop proposing similar things.

## Action types

| Type                    | Description                                                                                                  | Read mode?                                                    |
| ----------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- |
| `slack_summary`         | Post to Slack                                                                                                | ✅                                                             |
| `webhook_post`          | POST to your webhook                                                                                         | ✅                                                             |
| `notion_page`           | Create a Notion DB row                                                                                       | ✅                                                             |
| `linear_issue`          | Open a Linear ticket                                                                                         | ❌ write mode                                                  |
| `github_issue`          | Open a GitHub issue                                                                                          | ❌ write mode                                                  |
| `asc_metadata_update`   | Update ASC metadata field                                                                                    | ❌ write mode                                                  |
| `asc_review_reply`      | Reply to a user review                                                                                       | ❌ write mode                                                  |
| `asc_version_create`    | Create a draft ASC version                                                                                   | ❌ write mode                                                  |
| `revenuecat_experiment` | Promote a RevenueCat offering to current (monetization)                                                      | ❌ **always gated** — never auto-approved, even at autopilot 4 |
| `lifecycle_campaign`    | Winback/reactivation campaign — phase 1 emails the owner a ready-to-run brief (segment + draft copy + lever) | ❌ **always gated** — never auto-approved, even at autopilot 4 |

## Status lifecycle

```
proposed ──→ approved ──→ applied
   │                          ▲
   └──→ rejected              │
                              │
   superseded (by newer fingerprint)
```

* **proposed** — agent suggested it, waiting for you
* **approved** — you approved, queued for execution
* **applied** — actor successfully executed it (`external_id` populated)
* **rejected** — you said no
* **superseded** — agent re-proposed something with the same fingerprint; the older one is moved aside

## Auto-approve

Action types listed in `preferences.autoApproveTypes` skip the `proposed` step entirely and execute immediately. They show up in actions with `status: "applied"` from the start.

## Errors

* `404 NOT_FOUND` — action ID doesn't exist or isn't yours
* `409 INVALID_STATE` — action is already approved/applied/rejected
* `400 INVALID_PARAM` — `decision` must be `approved` or `rejected`
