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
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 |
| 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 |