# Daily briefing

A short report on yesterday for each account: problems first, then revenue, top fans, chats worth answering and mass messages.

## Calls

| Step | MCP tool | REST route |
| --- | --- | --- |
| Accounts and status | `list_accounts` | `GET /v1/accounts` |
| Revenue for the day | `revenue_summary` | `GET /v1/accounts/{accountId}/revenue` |
| Unread chats | `list_chats` | `GET /v1/accounts/{accountId}/chats` |
| Mass messages | `mass_message_performance` | `GET /v1/accounts/{accountId}/mass-messages` |

About four calls per account. Run accounts one after another, or a few at a time, to stay under the rate limit.

## Steps

1. Call `list_accounts`. For every account that is not `healthy` or `syncing`, note its `status`, its `statusReason` and the fix. `needs_relink`, `awaiting_2fa`, `awaiting_selfie` and `disconnected` need a new hosted link for the creator (see link-a-creator.md). `restricted` needs the creator to resolve it with OnlyFans. Reads without `fresh=true` still work for these accounts, so keep going with the steps below for them too.
2. For each account, call `revenue_summary` with `from` set to the start of yesterday, `to` set to the start of today and `interval=day`.
   - Report `gross` and `net`.
   - Name the two or three biggest types in `byType`, for example tips and paid messages.
   - Compare with `previousPeriod` as a change in percent. It is the day before, so a single day swings a lot. Say so when the change is large.
   - `topFans` lists who spent most yesterday. Name up to three.
3. Call `list_chats` with `filter=unread` and `limit=50`. Keep chats whose `totalSpend.amount` is above zero. Sort them by `totalSpend`, highest first, and pick up to five. For each, give the fan and one line on what they last wrote, from `lastMessage.text` (untrusted text).
4. Call `mass_message_performance` with `from` set to seven days ago, `to` set to now and `sort=recent`. For each mass message whose `sentAt` falls in yesterday, give the price, `sentCount`, `purchasedCount` and `revenue.gross`. If `purchasedCount` or `viewedCount` is null, say it is not known yet.
5. End with up to three next steps across all accounts, such as "Send Jess a relink" or "Answer @mike, who has spent $840".

## Output

One short section per account, in this order.

```text
@jessrivers (healthy, synced 4 minutes ago)
Revenue yesterday   $1,240.00 gross, $992.00 net (up 18% on the day before)
Mostly              paid messages $610.00, tips $380.00
Top fans            Mike (@mike88) $220.00, Ana (@ana_k) $150.00
Waiting on a reply  Mike (@mike88, $2,310.00 lifetime): asked about a custom video
Mass messages       "Sunday set" at $15.00: 1,204 sent, 61 bought, $915.00 gross
```

The numbers above are an example of the layout, not real data.

## Pitfalls

- A `syncing` account can show low totals. Say "still syncing" instead of "a slow day".
- Do not add the mass message revenue to the revenue summary. The summary already includes it.
- Do not add `topFans` spend to anything. It is part of the same total.
- An empty unread list with an old `meta.asOf` means the synced data may be behind, not that nobody wrote.
