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

# list_my_ruby_ledger

> The key owner's ruby ledger

Every movement of the key owner's ruby balance, newest first: settlement
payouts, positions sold in the SeeSaw app, opinion paybacks and creator fees,
the rubies taken back when something is reversed, and the one-off conversion
of the old sapphire balance.

**Scope**: `read` · **Annotations**: `readOnlyHint`
**REST equivalent**: `GET /open/v1/me/ruby-ledger`

## Parameters

| Name       | Type                                                   | Required | Default | Notes                                                  |
| ---------- | ------------------------------------------------------ | -------- | ------- | ------------------------------------------------------ |
| `flow`     | `all` \| `in` \| `out`                                 |          | `all`   | `in` = rubies received, `out` = rubies taken back      |
| `source`   | `settlement` \| `sell` \| `opinion_payback` \| `other` |          | —       | Business-line filter; omit for all                     |
| `cursor`   | string                                                 |          | —       |                                                        |
| `limit`    | integer ≤ 100                                          |          | 20      |                                                        |
| `language` | see [languages](/mcp/overview#languages)               |          | `en`    | Language of the topic titles (REST: `Accept-Language`) |

Over REST these are query parameters with the same names. An unknown `flow` or
`source` is `400 INVALID_ARGUMENT` with `details.field` naming it.

## Returns

Each row:

| Field        | Meaning                                                                                                                                                 |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`         | Ledger entry id                                                                                                                                         |
| `amount`     | Always positive, 4 decimal places                                                                                                                       |
| `direction`  | `in` or `out` — or `unknown` for a type the server has not classified yet (never a guess)                                                               |
| `source`     | The business line: `settlement`, `sell`, `opinion_payback` or `other`                                                                                   |
| `type`       | The raw ledger type, passed through as-is. New types may appear — don't fail on unknown values                                                          |
| `topic`      | `{id, title, url}` on settlement, revocation and sell rows; otherwise `null`. `title` is `""` when it cannot be resolved (`id` and `url` are still set) |
| `opinion_id` | The opinion of a payback, creator-fee or takedown row; otherwise `null`                                                                                 |
| `created_at` | When the rubies moved                                                                                                                                   |

How `type` maps to `source`:

| `source`          | `type`                                                                                | Direction |
| ----------------- | ------------------------------------------------------------------------------------- | --------- |
| `settlement`      | `ruby_settlement` — payout of a correct position when the topic settles               | `in`      |
| `settlement`      | `ruby_revocation` — settlement rubies taken back after a takedown or a changed ruling | `out`     |
| `sell`            | `ruby_trade_sell` — a position sold in the SeeSaw app                                 | `in`      |
| `opinion_payback` | `sapphire_back_relay` — relay payback from backers who came after you                 | `in`      |
| `opinion_payback` | `sapphire_creator_fee` — the author's share when their opinion is backed              | `in`      |
| `opinion_payback` | `sapphire_opinion_takedown` — paybacks clawed back when an opinion is taken down      | `out`     |
| `other`           | `sapphire_conversion` — the one-off 1:1 conversion of the old sapphire balance        | `in`      |
| `other`           | any type not listed above                                                             | `unknown` |

<Note>
  The `sapphire_*` type names are historical: those ledger lines pay **rubies**
  now that sapphires have been merged into rubies. Reversals stay on their own
  line, so summing a filtered page by `direction` gives that line's net.
</Note>

Filtering happens in the ledger query, so pages and `has_more` are exact. A
combination that cannot match — `flow=out` with `source=sell`, say — returns
an empty page. `source=other` matches only the classified other types (today
`sapphire_conversion`); unclassified types appear only when `source` is
omitted.

Only rubies are listed. Sapphire movements from before the merge are not in
this ledger; the balance they left behind arrives as a single
`sapphire_conversion` row.

Example:

```json theme={null}
{
  "data": [
    {
      "id": "0b7d9f3e-51a2-4c86-9e14-6a2f8c3d7b90",
      "amount": "285.0000",
      "direction": "in",
      "source": "sell",
      "type": "ruby_trade_sell",
      "topic": {
        "id": "d4e3f2a1-7c95-4b64-a8f9-2e3a9c05d624",
        "title": "Will Manchester City win the 2026 Community Shield?",
        "url": "https://seesaw.fun/topic/d4e3f2a1-7c95-4b64-a8f9-2e3a9c05d624"
      },
      "opinion_id": null,
      "created_at": "2026-09-19T08:12:44Z"
    },
    {
      "id": "6c1e4a8b-93d7-4f25-b0e6-1d9a5c7f2e38",
      "amount": "2.0000",
      "direction": "in",
      "source": "opinion_payback",
      "type": "sapphire_back_relay",
      "topic": null,
      "opinion_id": "7c2900c1-595f-4d92-bcf0-d84eba321ee2",
      "created_at": "2026-09-18T15:40:02Z"
    },
    {
      "id": "f2a8c6d4-1b3e-4957-8a0c-5e7d9b1f4a26",
      "amount": "12.0000",
      "direction": "in",
      "source": "other",
      "type": "sapphire_conversion",
      "topic": null,
      "opinion_id": null,
      "created_at": "2026-09-18T02:00:00Z"
    }
  ],
  "next_cursor": null,
  "has_more": false
}
```

## Example prompts

* "Where did my rubies come from this month?"
* "When did I sell my Community Shield position, and for how much?"
* "How many rubies have my opinions brought in?"

## Related

[`get_my_profile`](/mcp/tools/get-my-profile) ·
[`list_my_positions`](/mcp/tools/list-my-positions) ·
[`list_my_coin_ledger`](/mcp/tools/list-my-coin-ledger) ·
[Rubies and positions](/concepts/rubies-and-positions)
