# Loot administration ## `POST /api/epgp/adjustments` **Create an EP/GP adjustment** Creates a site-made EP/GP ledger entry attributed to the signed-in officer. **Request body** Model: {ref}`EpgpAdjustmentCreate ` | Field | Type | Required | Description | |---|---|---|---| | `member_id` | integer | yes | | | `kind` | {ref}`LedgerKind ` | yes | | | `amount` | integer | yes | EP or GP change, as set by kind. | | `reason` | string | yes | | **Response `201` — The new ledger entry.** Model: {ref}`EpgpLedgerRow ` | Field | Type | Required | Description | |---|---|---|---| | `id` | string (uuid) | yes | | | `at` | string (date-time) | yes | | | `kind` | {ref}`LedgerKind ` | yes | | | `amount` | integer | yes | EP or GP change, as set by kind. | | `decayed` | number | yes | The amount after weekly decay has been applied, read-time only. | | `reason` | string | yes | | | `note` | string \| null | yes | | | `character` | string \| null | yes | | | `member_id` | integer \| null | yes | | | `member_name` | string \| null | yes | | | `officer` | string | yes | | | `item_name` | string \| null | yes | | | `voided` | boolean | yes | | ## `GET /api/epgp/characters` **List characters** Returns every known character, the officer admin view. **Response `200` — The characters.** Model: {ref}`EpgpCharacterList ` | Field | Type | Required | Description | |---|---|---|---| | `characters` | array of {ref}`EpgpCharacter ` | yes | | ## `PUT /api/epgp/characters/{character_id}` **Relink a character** Relinks a character to a member, or marks it as that member's main. **Parameters** | Name | In | Type | Required | Description | |---|---|---|---|---| | `character_id` | path | string (uuid) | yes | The character's ID. | **Request body** Model: {ref}`EpgpCharacterUpdate ` | Field | Type | Required | Description | |---|---|---|---| | `member_id` | integer \| null | yes | | | `is_main` | boolean | yes | | **Response `200` — The updated character.** Model: {ref}`EpgpCharacter ` | Field | Type | Required | Description | |---|---|---|---| | `id` | string (uuid) | yes | | | `name` | string | yes | | | `realm` | string | yes | | | `class` | {ref}`WowClass ` \| null | yes | | | `member_id` | integer \| null | yes | | | `member_name` | string \| null | yes | | | `is_main` | boolean | yes | | | `source` | {ref}`CharacterSource ` | yes | | | `last_seen_at` | string (date-time) \| null | yes | | ## `GET /api/epgp/game-import` **Get the addon game-import string** Returns the `SQI1:` string for the addon's `/sq import` command. An officer session or a valid Bearer sync token works. **Response `200` — The game-import payload.** Model: {ref}`EpgpGameImport ` | Field | Type | Required | Description | |---|---|---|---| | `payload` | string | yes | | | `generated_at` | string (date-time) | yes | | ## `GET /api/epgp/roster` **Get the EPGP roster** Returns guild members' EPGP roster status. **Response `200` — The roster.** Model: {ref}`EpgpRoster ` | Field | Type | Required | Description | |---|---|---|---| | `members` | array of {ref}`EpgpRosterRow ` | yes | | ## `PUT /api/epgp/roster/{member_id}` **Set a member's raid status** Sets a member's raid status. Setting it to `trial` stamps `trial_started_at` with the current time. **Parameters** | Name | In | Type | Required | Description | |---|---|---|---|---| | `member_id` | path | integer | yes | The member's ID. | **Request body** Model: {ref}`EpgpRosterUpdate ` | Field | Type | Required | Description | |---|---|---|---| | `raid_status` | {ref}`RaidStatus ` \| null | yes | | **Response `200` — The updated roster row.** Model: {ref}`EpgpRosterRow ` | Field | Type | Required | Description | |---|---|---|---| | `member_id` | integer | yes | | | `name` | string | yes | | | `raid_status` | {ref}`RaidStatus ` \| null | yes | | | `trial_started_at` | string (date-time) \| null | yes | |