# List this token's actions

`GET https://api.tryscouty.com/v1/actions`

Lists only the changes made through this connection's own token, newest first: which capability, which campaign, how it ended and when. It is not a history of the campaign or its creators: anything done on the dashboard, by the team, by a creator, or through another connection is not here, so an empty or short list says nothing about how many creators a campaign has. Read it to find out whether a change you were part-way through already went through.

- Scope: none; every client token can call it
- Kind: read
- MCP tool: `scouty_list_actions`

## Authorization

Send `Authorization: Bearer $SCOUTY_TOKEN`.

## Query parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `campaignId` | `integer` | Optional | Only actions against this campaign. Every action when omitted. |
| `limit` | `integer` | Optional | How many actions to return. 25 by default, 100 at most. |
| `cursor` | `string` | Optional | The cursor from the previous page. |

## Pagination

This list comes a page at a time, in `actions`. Send `limit` (1 to 100, 25 by default) and pass the answer's `nextCursor` back as `cursor`. `nextCursor` is `null` on the last page.

## Request

### cURL

```bash
curl -s "https://api.tryscouty.com/v1/actions?campaignId=42&limit=25" \
  -H "Authorization: Bearer $SCOUTY_TOKEN"
```

### JavaScript

```js
const response = await fetch("https://api.tryscouty.com/v1/actions?campaignId=42&limit=25", {
  headers: {
    Authorization: `Bearer ${process.env.SCOUTY_TOKEN}`,
  },
});
console.log(await response.json());
```

### Python

```python
import os

import requests

token = os.environ["SCOUTY_TOKEN"]
response = requests.get(
    "https://api.tryscouty.com/v1/actions",
    headers={"Authorization": f"Bearer {token}"},
    params={"campaignId": 42, "limit": 25},
)
print(response.json())
```

## Responses

### 200 OK

```json
{
  "actions": [
    {
      "id": "00000000-0000-0000-0000-000000000003",
      "capability": "scouty_pause_campaign",
      "action": "Paused a campaign",
      "campaignId": 42,
      "campaign": "Acme",
      "status": "done",
      "summary": "Paused Acme's campaign 42.",
      "at": "2026-09-26T08:15:00.000Z",
      "tokenLabel": "Acme ops agent"
    }
  ],
  "nextCursor": null
}
```

### 400 Bad Request

```json
{
  "error": {
    "code": "invalid_request",
    "message": "Those arguments are not the shape this capability takes: campaignId."
  }
}
```

### 401 Unauthorized

```json
{
  "error": {
    "code": "missing_token",
    "message": "This API needs an Authorization header carrying a bearer token."
  }
}
```

### 403 Forbidden

```json
{
  "error": {
    "code": "wrong_principal",
    "message": "This is a client capability, and this token does not speak for a client."
  }
}
```

### 429 Too Many Requests

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Please wait for the current minute to end."
  }
}
```

## Errors

| Status | `error.code` | Meaning |
|---|---|---|
| 400 Bad Request | `invalid_request` | The request was not the shape this capability takes, or its body was not JSON. |
| 401 Unauthorized | `missing_token`, `invalid_token`, `token_revoked`, `token_expired`, `token_orphaned` | No token, or one that is not recognized, revoked or expired. |
| 403 Forbidden | `wrong_principal` | The token does not carry the scope this capability needs. |
| 429 Too Many Requests | `rate_limited` | Too many requests this minute. Retry-After says how long is left. |

Full reference: https://docs.tryscouty.com/reference
