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

# REST route catalog

> Source-derived catalog of every REST route exposed by okto-pulse-core and the community runtime.

# REST route catalog

This catalog is generated from the FastAPI route decorators in `okto-pulse-core/src/okto_pulse/core/api/*.py` and `okto-pulse-core/src/okto_pulse/core/app.py`.

The current source surface contains **209 routes**: 208 under `/api/v1` plus the unprefixed `/health` liveness endpoint. Use the live OpenAPI schema (`GET /openapi.json`) for request and response models; this page is the route inventory that prevents hidden endpoints from being missed.

## Routes

### `agents.py` (10)

| Method   | Path                                          | Source          |
| -------- | --------------------------------------------- | --------------- |
| `POST`   | `/api/v1/agents`                              | `agents.py:26`  |
| `GET`    | `/api/v1/agents`                              | `agents.py:43`  |
| `GET`    | `/api/v1/agents/board/{board_id}`             | `agents.py:54`  |
| `GET`    | `/api/v1/agents/{agent_id}`                   | `agents.py:71`  |
| `PATCH`  | `/api/v1/agents/{agent_id}`                   | `agents.py:85`  |
| `POST`   | `/api/v1/agents/{agent_id}/regenerate-key`    | `agents.py:108` |
| `DELETE` | `/api/v1/agents/{agent_id}`                   | `agents.py:126` |
| `POST`   | `/api/v1/agents/{agent_id}/boards/{board_id}` | `agents.py:147` |
| `PATCH`  | `/api/v1/agents/{agent_id}/boards/{board_id}` | `agents.py:177` |
| `DELETE` | `/api/v1/agents/{agent_id}/boards/{board_id}` | `agents.py:202` |

### `analytics.py` (16)

| Method | Path                                                                          | Source              |
| ------ | ----------------------------------------------------------------------------- | ------------------- |
| `GET`  | `/api/v1/analytics/overview`                                                  | `analytics.py:320`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/blockers`                                | `analytics.py:627`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/funnel`                                  | `analytics.py:675`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/quality`                                 | `analytics.py:699`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/velocity`                                | `analytics.py:774`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/coverage`                                | `analytics.py:815`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/validations`                             | `analytics.py:839`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/sprints`                                 | `analytics.py:965`  |
| `GET`  | `/api/v1/boards/{board_id}/analytics/spec/{spec_id}`                          | `analytics.py:1082` |
| `GET`  | `/api/v1/boards/{board_id}/analytics/sprint/{sprint_id}`                      | `analytics.py:1164` |
| `GET`  | `/api/v1/boards/{board_id}/analytics/agents`                                  | `analytics.py:1231` |
| `GET`  | `/api/v1/boards/{board_id}/analytics/entities`                                | `analytics.py:1360` |
| `GET`  | `/api/v1/boards/{board_id}/analytics/entity/{entity_type}/{entity_id}`        | `analytics.py:1397` |
| `GET`  | `/api/v1/analytics/overview/export`                                           | `analytics.py:1430` |
| `GET`  | `/api/v1/boards/{board_id}/analytics/export`                                  | `analytics.py:1483` |
| `GET`  | `/api/v1/boards/{board_id}/analytics/entity/{entity_type}/{entity_id}/export` | `analytics.py:1531` |

### `app.py` (1)

| Method | Path      | Source       |
| ------ | --------- | ------------ |
| `GET`  | `/health` | `app.py:242` |

### `architecture.py` (17)

| Method   | Path                                                             | Source                |
| -------- | ---------------------------------------------------------------- | --------------------- |
| `GET`    | `/api/v1/ideations/{ideation_id}/architecture`                   | `architecture.py:165` |
| `POST`   | `/api/v1/ideations/{ideation_id}/architecture`                   | `architecture.py:174` |
| `GET`    | `/api/v1/refinements/{refinement_id}/architecture`               | `architecture.py:188` |
| `POST`   | `/api/v1/refinements/{refinement_id}/architecture`               | `architecture.py:197` |
| `GET`    | `/api/v1/specs/{spec_id}/architecture`                           | `architecture.py:211` |
| `POST`   | `/api/v1/specs/{spec_id}/architecture`                           | `architecture.py:220` |
| `GET`    | `/api/v1/cards/{card_id}/architecture`                           | `architecture.py:234` |
| `POST`   | `/api/v1/cards/{card_id}/architecture`                           | `architecture.py:243` |
| `POST`   | `/api/v1/architecture/validate`                                  | `architecture.py:257` |
| `GET`    | `/api/v1/architecture/{design_id}`                               | `architecture.py:268` |
| `PATCH`  | `/api/v1/architecture/{design_id}`                               | `architecture.py:282` |
| `DELETE` | `/api/v1/architecture/{design_id}`                               | `architecture.py:300` |
| `GET`    | `/api/v1/architecture/{design_id}/diagrams/{diagram_id}/payload` | `architecture.py:314` |
| `PUT`    | `/api/v1/architecture/{design_id}/diagrams/{diagram_id}/payload` | `architecture.py:347` |
| `POST`   | `/api/v1/architecture/{design_id}/diagrams/import-excalidraw`    | `architecture.py:379` |
| `GET`    | `/api/v1/architecture/{design_id}/diff`                          | `architecture.py:422` |
| `POST`   | `/api/v1/cards/{card_id}/copy-architecture-from-spec/{spec_id}`  | `architecture.py:437` |

### `attachments.py` (3)

| Method   | Path                                                       | Source              |
| -------- | ---------------------------------------------------------- | ------------------- |
| `POST`   | `/api/v1/attachments/{board_id}/{card_id}`                 | `attachments.py:38` |
| `GET`    | `/api/v1/attachments/{board_id}/{card_id}/{attachment_id}` | `attachments.py:67` |
| `DELETE` | `/api/v1/attachments/{board_id}/{card_id}/{attachment_id}` | `attachments.py:89` |

### `boards.py` (13)

| Method   | Path                                                          | Source          |
| -------- | ------------------------------------------------------------- | --------------- |
| `POST`   | `/api/v1/boards`                                              | `boards.py:27`  |
| `GET`    | `/api/v1/boards`                                              | `boards.py:44`  |
| `GET`    | `/api/v1/boards/{board_id}`                                   | `boards.py:59`  |
| `PATCH`  | `/api/v1/boards/{board_id}`                                   | `boards.py:76`  |
| `DELETE` | `/api/v1/boards/{board_id}`                                   | `boards.py:96`  |
| `POST`   | `/api/v1/boards/{board_id}/cards`                             | `boards.py:110` |
| `GET`    | `/api/v1/boards/{board_id}/columns`                           | `boards.py:133` |
| `POST`   | `/api/v1/boards/{board_id}/archive/{entity_type}/{entity_id}` | `boards.py:183` |
| `POST`   | `/api/v1/boards/{board_id}/restore/{entity_type}/{entity_id}` | `boards.py:202` |
| `POST`   | `/api/v1/boards/{board_id}/shares`                            | `boards.py:224` |
| `GET`    | `/api/v1/boards/{board_id}/shares`                            | `boards.py:248` |
| `PATCH`  | `/api/v1/boards/{board_id}/shares/{share_id}`                 | `boards.py:263` |
| `DELETE` | `/api/v1/boards/{board_id}/shares/{share_id}`                 | `boards.py:283` |

### `cards.py` (22)

| Method   | Path                                                   | Source         |
| -------- | ------------------------------------------------------ | -------------- |
| `GET`    | `/api/v1/cards/{card_id}`                              | `cards.py:27`  |
| `PATCH`  | `/api/v1/cards/{card_id}`                              | `cards.py:41`  |
| `POST`   | `/api/v1/cards/{card_id}/move`                         | `cards.py:59`  |
| `GET`    | `/api/v1/cards/{card_id}/dependencies`                 | `cards.py:81`  |
| `GET`    | `/api/v1/cards/{card_id}/dependents`                   | `cards.py:96`  |
| `POST`   | `/api/v1/cards/{card_id}/dependencies/{depends_on_id}` | `cards.py:111` |
| `DELETE` | `/api/v1/cards/{card_id}/dependencies/{depends_on_id}` | `cards.py:130` |
| `GET`    | `/api/v1/cards/{card_id}/activity`                     | `cards.py:145` |
| `GET`    | `/api/v1/cards/{card_id}/seen`                         | `cards.py:163` |
| `POST`   | `/api/v1/cards/{card_id}/test-tasks`                   | `cards.py:208` |
| `DELETE` | `/api/v1/cards/{card_id}/test-tasks/{test_task_id}`    | `cards.py:279` |
| `DELETE` | `/api/v1/cards/{card_id}`                              | `cards.py:302` |
| `POST`   | `/api/v1/cards/{card_id}/validate`                     | `cards.py:319` |
| `GET`    | `/api/v1/cards/{card_id}/validations`                  | `cards.py:373` |
| `GET`    | `/api/v1/cards/{card_id}/validations/{validation_id}`  | `cards.py:388` |
| `DELETE` | `/api/v1/cards/{card_id}/validations/{validation_id}`  | `cards.py:406` |
| `GET`    | `/api/v1/cards/{card_id}/knowledge`                    | `cards.py:448` |
| `POST`   | `/api/v1/cards/{card_id}/knowledge`                    | `cards.py:462` |
| `GET`    | `/api/v1/cards/{card_id}/knowledge/{kb_id}`            | `cards.py:495` |
| `PATCH`  | `/api/v1/cards/{card_id}/knowledge/{kb_id}`            | `cards.py:513` |
| `DELETE` | `/api/v1/cards/{card_id}/knowledge/{kb_id}`            | `cards.py:548` |
| `GET`    | `/api/v1/cards/{card_id}/knowledge/{kb_id}/download`   | `cards.py:571` |

### `comments.py` (4)

| Method   | Path                                    | Source           |
| -------- | --------------------------------------- | ---------------- |
| `POST`   | `/api/v1/comments/card/{card_id}`       | `comments.py:29` |
| `PATCH`  | `/api/v1/comments/{comment_id}`         | `comments.py:47` |
| `POST`   | `/api/v1/comments/{comment_id}/respond` | `comments.py:65` |
| `DELETE` | `/api/v1/comments/{comment_id}`         | `comments.py:97` |

### `dead_letter.py` (1)

| Method | Path                           | Source              |
| ------ | ------------------------------ | ------------------- |
| `GET`  | `/api/v1/kg/queue/dead-letter` | `dead_letter.py:49` |

### `discovery.py` (4)

| Method | Path                                                 | Source            |
| ------ | ---------------------------------------------------- | ----------------- |
| `GET`  | `/api/v1/discovery/intents`                          | `discovery.py:36` |
| `GET`  | `/api/v1/discovery/boards/{board_id}/saved-searches` | `discovery.py:53` |
| `GET`  | `/api/v1/discovery/boards/{board_id}/search-history` | `discovery.py:71` |
| `POST` | `/api/v1/discovery/intents/{intent_id}/execute`      | `discovery.py:93` |

### `guidelines.py` (9)

| Method   | Path                                                  | Source              |
| -------- | ----------------------------------------------------- | ------------------- |
| `GET`    | `/api/v1/guidelines`                                  | `guidelines.py:24`  |
| `POST`   | `/api/v1/guidelines`                                  | `guidelines.py:37`  |
| `GET`    | `/api/v1/guidelines/{guideline_id}`                   | `guidelines.py:50`  |
| `PATCH`  | `/api/v1/guidelines/{guideline_id}`                   | `guidelines.py:64`  |
| `DELETE` | `/api/v1/guidelines/{guideline_id}`                   | `guidelines.py:80`  |
| `GET`    | `/api/v1/boards/{board_id}/guidelines`                | `guidelines.py:99`  |
| `POST`   | `/api/v1/boards/{board_id}/guidelines`                | `guidelines.py:115` |
| `DELETE` | `/api/v1/boards/{board_id}/guidelines/{guideline_id}` | `guidelines.py:138` |
| `PATCH`  | `/api/v1/boards/{board_id}/guidelines/{guideline_id}` | `guidelines.py:153` |

### `ideations.py` (15)

| Method   | Path                                                  | Source             |
| -------- | ----------------------------------------------------- | ------------------ |
| `POST`   | `/api/v1/boards/{board_id}/ideations`                 | `ideations.py:27`  |
| `GET`    | `/api/v1/boards/{board_id}/ideations`                 | `ideations.py:51`  |
| `GET`    | `/api/v1/ideations/{ideation_id}`                     | `ideations.py:69`  |
| `PATCH`  | `/api/v1/ideations/{ideation_id}`                     | `ideations.py:83`  |
| `POST`   | `/api/v1/ideations/{ideation_id}/move`                | `ideations.py:100` |
| `DELETE` | `/api/v1/ideations/{ideation_id}`                     | `ideations.py:117` |
| `POST`   | `/api/v1/ideations/{ideation_id}/evaluate`            | `ideations.py:131` |
| `POST`   | `/api/v1/ideations/{ideation_id}/derive-spec`         | `ideations.py:167` |
| `GET`    | `/api/v1/ideations/{ideation_id}/snapshots`           | `ideations.py:187` |
| `GET`    | `/api/v1/ideations/{ideation_id}/snapshots/{version}` | `ideations.py:198` |
| `GET`    | `/api/v1/ideations/{ideation_id}/history`             | `ideations.py:213` |
| `GET`    | `/api/v1/ideations/{ideation_id}/qa`                  | `ideations.py:228` |
| `POST`   | `/api/v1/ideations/{ideation_id}/qa`                  | `ideations.py:239` |
| `POST`   | `/api/v1/ideations/{ideation_id}/qa/{qa_id}/answer`   | `ideations.py:255` |
| `DELETE` | `/api/v1/ideations/{ideation_id}/qa/{qa_id}`          | `ideations.py:272` |

### `kg_health.py` (1)

| Method | Path                | Source            |
| ------ | ------------------- | ----------------- |
| `GET`  | `/api/v1/kg/health` | `kg_health.py:51` |

### `kg_routes.py` (28)

| Method   | Path                                                             | Source              |
| -------- | ---------------------------------------------------------------- | ------------------- |
| `GET`    | `/api/v1/kg/boards/{board_id}/nodes`                             | `kg_routes.py:135`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/nodes/{node_id}`                   | `kg_routes.py:154`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/graph`                             | `kg_routes.py:169`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/similar`                           | `kg_routes.py:303`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/supersedence/{decision_id}`        | `kg_routes.py:323`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/contradictions`                    | `kg_routes.py:333`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/stats`                             | `kg_routes.py:350`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/metrics`                           | `kg_routes.py:375`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/audit`                             | `kg_routes.py:492`  |
| `POST`   | `/api/v1/kg/boards/{board_id}/audit/{session_id}/undo`           | `kg_routes.py:535`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/audit/export`                      | `kg_routes.py:541`  |
| `GET`    | `/api/v1/kg/global/search`                                       | `kg_routes.py:561`  |
| `POST`   | `/api/v1/kg/boards/{board_id}/historical-consolidation/start`    | `kg_routes.py:590`  |
| `POST`   | `/api/v1/kg/boards/{board_id}/historical-consolidation/cancel`   | `kg_routes.py:597`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/historical-consolidation/progress` | `kg_routes.py:604`  |
| `DELETE` | `/api/v1/kg/boards/{board_id}/kg`                                | `kg_routes.py:611`  |
| `GET`    | `/api/v1/kg/settings`                                            | `kg_routes.py:658`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/settings`                          | `kg_routes.py:679`  |
| `PUT`    | `/api/v1/kg/boards/{board_id}/settings`                          | `kg_routes.py:706`  |
| `POST`   | `/api/v1/kg/boards/{board_id}/cypher`                            | `kg_routes.py:712`  |
| `GET`    | `/api/v1/kg/schema`                                              | `kg_routes.py:723`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/pending`                           | `kg_routes.py:730`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/pending/tree`                      | `kg_routes.py:765`  |
| `GET`    | `/api/v1/kg/boards/{board_id}/events`                            | `kg_routes.py:958`  |
| `POST`   | `/api/v1/kg/boards/{board_id}/pending/{queue_entry_id}/retry`    | `kg_routes.py:1149` |
| `POST`   | `/api/v1/kg/boards/{board_id}/nodes/{node_id}/boost`             | `kg_routes.py:1247` |
| `GET`    | `/api/v1/kg/openapi.json`                                        | `kg_routes.py:1340` |
| `POST`   | `/api/v1/kg/{board_id}/migrate-schema`                           | `kg_routes.py:1367` |

### `kg_tick.py` (1)

| Method | Path                      | Source          |
| ------ | ------------------------- | --------------- |
| `POST` | `/api/v1/kg/tick/run-now` | `kg_tick.py:48` |

### `me.py` (1)

| Method | Path                     | Source     |
| ------ | ------------------------ | ---------- |
| `GET`  | `/api/v1/me/permissions` | `me.py:36` |

### `presets.py` (5)

| Method   | Path                                | Source           |
| -------- | ----------------------------------- | ---------------- |
| `GET`    | `/api/v1/presets`                   | `presets.py:55`  |
| `POST`   | `/api/v1/presets`                   | `presets.py:69`  |
| `POST`   | `/api/v1/presets/{preset_id}/clone` | `presets.py:90`  |
| `PUT`    | `/api/v1/presets/{preset_id}`       | `presets.py:126` |
| `DELETE` | `/api/v1/presets/{preset_id}`       | `presets.py:154` |

### `qa.py` (3)

| Method   | Path                        | Source     |
| -------- | --------------------------- | ---------- |
| `POST`   | `/api/v1/qa/card/{card_id}` | `qa.py:28` |
| `POST`   | `/api/v1/qa/{qa_id}/answer` | `qa.py:46` |
| `DELETE` | `/api/v1/qa/{qa_id}`        | `qa.py:64` |

### `queue_health.py` (1)

| Method | Path                      | Source               |
| ------ | ------------------------- | -------------------- |
| `GET`  | `/api/v1/kg/queue/health` | `queue_health.py:40` |

### `refinements.py` (18)

| Method   | Path                                                           | Source               |
| -------- | -------------------------------------------------------------- | -------------------- |
| `POST`   | `/api/v1/ideations/{ideation_id}/refinements`                  | `refinements.py:30`  |
| `GET`    | `/api/v1/ideations/{ideation_id}/refinements`                  | `refinements.py:57`  |
| `GET`    | `/api/v1/refinements/{refinement_id}`                          | `refinements.py:75`  |
| `PATCH`  | `/api/v1/refinements/{refinement_id}`                          | `refinements.py:89`  |
| `POST`   | `/api/v1/refinements/{refinement_id}/move`                     | `refinements.py:106` |
| `DELETE` | `/api/v1/refinements/{refinement_id}`                          | `refinements.py:126` |
| `POST`   | `/api/v1/refinements/{refinement_id}/derive-spec`              | `refinements.py:140` |
| `GET`    | `/api/v1/refinements/{refinement_id}/history`                  | `refinements.py:160` |
| `GET`    | `/api/v1/refinements/{refinement_id}/qa`                       | `refinements.py:175` |
| `POST`   | `/api/v1/refinements/{refinement_id}/qa`                       | `refinements.py:186` |
| `POST`   | `/api/v1/refinements/{refinement_id}/qa/{qa_id}/answer`        | `refinements.py:202` |
| `DELETE` | `/api/v1/refinements/{refinement_id}/qa/{qa_id}`               | `refinements.py:219` |
| `GET`    | `/api/v1/refinements/{refinement_id}/snapshots`                | `refinements.py:237` |
| `GET`    | `/api/v1/refinements/{refinement_id}/snapshots/{version}`      | `refinements.py:248` |
| `GET`    | `/api/v1/refinements/{refinement_id}/knowledge`                | `refinements.py:266` |
| `GET`    | `/api/v1/refinements/{refinement_id}/knowledge/{knowledge_id}` | `refinements.py:277` |
| `POST`   | `/api/v1/refinements/{refinement_id}/knowledge`                | `refinements.py:292` |
| `DELETE` | `/api/v1/refinements/{refinement_id}/knowledge/{knowledge_id}` | `refinements.py:312` |

### `settings.py` (2)

| Method | Path                       | Source           |
| ------ | -------------------------- | ---------------- |
| `GET`  | `/api/v1/settings/runtime` | `settings.py:78` |
| `PUT`  | `/api/v1/settings/runtime` | `settings.py:88` |

### `specs.py` (21)

| Method   | Path                                                                    | Source         |
| -------- | ----------------------------------------------------------------------- | -------------- |
| `POST`   | `/api/v1/boards/{board_id}/specs`                                       | `specs.py:24`  |
| `GET`    | `/api/v1/boards/{board_id}/specs`                                       | `specs.py:48`  |
| `GET`    | `/api/v1/specs/{spec_id}`                                               | `specs.py:66`  |
| `PATCH`  | `/api/v1/specs/{spec_id}`                                               | `specs.py:80`  |
| `POST`   | `/api/v1/specs/{spec_id}/move`                                          | `specs.py:105` |
| `DELETE` | `/api/v1/specs/{spec_id}`                                               | `specs.py:125` |
| `GET`    | `/api/v1/specs/{spec_id}/history`                                       | `specs.py:139` |
| `POST`   | `/api/v1/specs/{spec_id}/link-card/{card_id}`                           | `specs.py:151` |
| `POST`   | `/api/v1/specs/{spec_id}/unlink-card/{card_id}`                         | `specs.py:170` |
| `POST`   | `/api/v1/specs/{spec_id}/scenarios/{scenario_id}/link-task/{card_id}`   | `specs.py:192` |
| `POST`   | `/api/v1/specs/{spec_id}/scenarios/{scenario_id}/unlink-task/{card_id}` | `specs.py:253` |
| `GET`    | `/api/v1/specs/{spec_id}/knowledge`                                     | `specs.py:301` |
| `GET`    | `/api/v1/specs/{spec_id}/knowledge/{knowledge_id}`                      | `specs.py:312` |
| `POST`   | `/api/v1/specs/{spec_id}/knowledge`                                     | `specs.py:327` |
| `DELETE` | `/api/v1/specs/{spec_id}/knowledge/{knowledge_id}`                      | `specs.py:343` |
| `GET`    | `/api/v1/specs/{spec_id}/qa`                                            | `specs.py:362` |
| `POST`   | `/api/v1/specs/{spec_id}/qa`                                            | `specs.py:373` |
| `POST`   | `/api/v1/specs/{spec_id}/qa/{qa_id}/answer`                             | `specs.py:389` |
| `DELETE` | `/api/v1/specs/{spec_id}/qa/{qa_id}`                                    | `specs.py:406` |
| `POST`   | `/api/v1/specs/{spec_id}/validation`                                    | `specs.py:424` |
| `GET`    | `/api/v1/specs/{spec_id}/validations`                                   | `specs.py:497` |

### `sprints.py` (12)

| Method   | Path                                                        | Source           |
| -------- | ----------------------------------------------------------- | ---------------- |
| `GET`    | `/api/v1/boards/{board_id}/sprints`                         | `sprints.py:21`  |
| `POST`   | `/api/v1/boards/{board_id}/specs/{spec_id}/sprints`         | `sprints.py:35`  |
| `GET`    | `/api/v1/boards/{board_id}/specs/{spec_id}/sprints`         | `sprints.py:60`  |
| `GET`    | `/api/v1/sprints/{sprint_id}`                               | `sprints.py:72`  |
| `PATCH`  | `/api/v1/sprints/{sprint_id}`                               | `sprints.py:86`  |
| `POST`   | `/api/v1/sprints/{sprint_id}/move`                          | `sprints.py:106` |
| `DELETE` | `/api/v1/sprints/{sprint_id}`                               | `sprints.py:126` |
| `POST`   | `/api/v1/sprints/{sprint_id}/evaluations`                   | `sprints.py:140` |
| `POST`   | `/api/v1/sprints/{sprint_id}/assign-tasks`                  | `sprints.py:159` |
| `POST`   | `/api/v1/sprints/{sprint_id}/unassign-tasks`                | `sprints.py:179` |
| `GET`    | `/api/v1/sprints/{sprint_id}/history`                       | `sprints.py:201` |
| `GET`    | `/api/v1/boards/{board_id}/specs/{spec_id}/sprints/suggest` | `sprints.py:212` |

### `traceability.py` (1)

| Method | Path                                      | Source               |
| ------ | ----------------------------------------- | -------------------- |
| `GET`  | `/api/v1/boards/{board_id}/lineage-graph` | `traceability.py:17` |
