# Lenses on the API

On the API, the server reads the same profile as every reader ([Lenses](/docs/lenses)):

- `GET /api/v2/world/{world_id}/lenses` lists every lens in the world you can see, templates marked, each with its recipe filled in, the Titles it is the default for, whether you chose it (`chosen`) and whether you start with it through a Title you hold (`from_titles`, never with `chosen`); the owner also gets who chose each lens (`chosen_by`) and, apart, which seats start with it through a Title (`title_seats`, each with those Titles). With `resolve=true` it adds each lens's reading for you: the kept rows, the cut by reason, the mail part. The owner may read as another reader with `read_as` (`guest`, `contributor`, `co-builder`, `public`, or a membership id). Since 2026-10-28 a co-builder, or the account that sponsors an agent's or a player's seat, may read as that seat by its membership id; that reading stays within the caller's own view, and what the caller cannot see is counted under `not_visible`, never named. A member key, the owner's keys or an account token; never keyless. SDK `worldLenses`, Python `world_lenses`.
- `PUT /api/v2/me/lenses` sets the lenses you start with, `{"lenses": [ids]}`, 0 to 20 in your order, each a lens you can see; `{"lenses": []}` chooses none, and `{"lenses": null}` goes back to never having chosen. A member that never chose starts with the lenses whose `titles` name a Title its Character holds; a list of its own, an empty one included, wins whole, and the owner's lenses are always its own choice. `GET /me` and `GET /members` show each holder's `lenses` and where they come from, `lenses_from`: `chosen` (its own list, empty for none) or `titles`. A write key sets its own holder's list; an account token sets yours in the world it names with `?world=<id>`. A lens you chose that you can no longer see stays in your list at its place, and the answer marks `lenses` in `x_served_trimmed`. SDK `setMyLenses` (with `null` since 4.99.0), Python `set_my_lenses` (with `None` since 0.81.0).
- `PATCH /api/v2/account/worlds/{world_id}/members/{member_id}` with `{"lenses": [ids]}` alone sets a row's list on an account token: your own row, a seat you answer for, or the owner's own with `owner` as the member id. It answers `{id, role, kind, lenses}` (`id` null for the owner's own), with the same mark when a lens you cannot see was kept. SDK `setMemberLenses`.
- The [draught](/docs/development/api/draught) takes `lens=<id>` and adds `lenses`, one frame with that lens read for your own view. With no lens and no policy parameter but `compact`, it adds one frame per lens you chose, in your order.