@browserstack/mcp-server 1.5.0-beta.1 → 1.5.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "schema_version": 1,
3
- "version": "1.0",
4
- "build_id": "83525474_2026-09-02T12:13:05Z",
3
+ "version": "1.4",
4
+ "build_id": "f6a3eca0_2026-09-09T14:21:54Z",
5
5
  "tm": {
6
6
  "summary": "BrowserStack Test Management API (v1 — the SSO/OAuth app API, session-authenticated).",
7
7
  "capabilities": [
8
8
  {
9
+ "name": "assign_test_run_owner",
9
10
  "method": "POST",
10
11
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/assign",
11
12
  "mode": "write",
@@ -64,6 +65,7 @@
64
65
  }
65
66
  },
66
67
  {
68
+ "name": "bulk_archive_test_cases_by_project",
67
69
  "method": "POST",
68
70
  "path": "/api/v1/projects/{project_id}/test-cases/bulk-archive",
69
71
  "mode": "write",
@@ -119,6 +121,9 @@
119
121
  }
120
122
  ],
121
123
  "intent": "Bulk Archive Test Cases",
124
+ "guidance": [
125
+ "Archiving hides cases from the working set without deleting them; they can be retrieved again. Prefer it to deletion when the user says 'remove' or 'clean up' without being explicit."
126
+ ],
122
127
  "paginated": true,
123
128
  "responses": {
124
129
  "200": {
@@ -139,6 +144,7 @@
139
144
  }
140
145
  },
141
146
  {
147
+ "name": "bulk_archive_test_plans_v1",
142
148
  "method": "POST",
143
149
  "path": "/api/v1/projects/{project_id}/test-plans/bulk-archive",
144
150
  "mode": "write",
@@ -188,6 +194,7 @@
188
194
  }
189
195
  },
190
196
  {
197
+ "name": "bulk_assign_test_cases_to_test_run",
191
198
  "method": "POST",
192
199
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases/bulk_assign",
193
200
  "mode": "write",
@@ -283,6 +290,7 @@
283
290
  }
284
291
  },
285
292
  {
293
+ "name": "bulk_copy_test_cases",
286
294
  "method": "POST",
287
295
  "path": "/api/v1/projects/{project_id}/test-cases/bulk-copy",
288
296
  "mode": "write",
@@ -386,6 +394,7 @@
386
394
  }
387
395
  },
388
396
  {
397
+ "name": "bulk_delete_test_cases",
389
398
  "method": "POST",
390
399
  "path": "/api/v1/projects/{project_id}/test-cases/bulk-delete",
391
400
  "mode": "destructive",
@@ -478,6 +487,7 @@
478
487
  }
479
488
  },
480
489
  {
490
+ "name": "bulk_delete_test_results_v1",
481
491
  "method": "POST",
482
492
  "path": "/api/v1/projects/{project_id}/test-results/bulk-delete",
483
493
  "mode": "destructive",
@@ -559,6 +569,7 @@
559
569
  }
560
570
  },
561
571
  {
572
+ "name": "bulk_edit_test_cases",
562
573
  "method": "POST",
563
574
  "path": "/api/v1/projects/{project_id}/test-cases/bulk-edit",
564
575
  "mode": "write",
@@ -713,6 +724,7 @@
713
724
  }
714
725
  },
715
726
  {
727
+ "name": "bulk_edit_test_cases_in_test_run",
716
728
  "method": "POST",
717
729
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases/edit",
718
730
  "mode": "write",
@@ -845,6 +857,7 @@
845
857
  }
846
858
  },
847
859
  {
860
+ "name": "bulk_edit_test_cases_v2",
848
861
  "method": "PATCH",
849
862
  "path": "/api/v1/projects/{project_id}/test-cases",
850
863
  "mode": "write",
@@ -1087,6 +1100,9 @@
1087
1100
  }
1088
1101
  ],
1089
1102
  "intent": "Bulk edit test cases with per-field add / remove / replace operations (PREFERRED bulk write).",
1103
+ "guidance": [
1104
+ "Applies one change to many cases at once. Confirm the selection resolves to what the user meant before sending — there is no per-case confirmation and no undo."
1105
+ ],
1090
1106
  "returns": [
1091
1107
  "async",
1092
1108
  "unique_id"
@@ -1133,6 +1149,7 @@
1133
1149
  }
1134
1150
  },
1135
1151
  {
1152
+ "name": "bulk_move_test_cases",
1136
1153
  "method": "POST",
1137
1154
  "path": "/api/v1/projects/{project_id}/test-cases/bulk-move",
1138
1155
  "mode": "write",
@@ -1229,6 +1246,7 @@
1229
1246
  }
1230
1247
  },
1231
1248
  {
1249
+ "name": "bulk_retrieve_test_cases",
1232
1250
  "method": "POST",
1233
1251
  "path": "/api/v1/projects/{project_id}/test-cases/bulk-retrieve",
1234
1252
  "mode": "write",
@@ -1324,6 +1342,7 @@
1324
1342
  }
1325
1343
  },
1326
1344
  {
1345
+ "name": "bulk_retrieve_test_plans_v1",
1327
1346
  "method": "POST",
1328
1347
  "path": "/api/v1/projects/{project_id}/test-plans/bulk-retrieve",
1329
1348
  "mode": "write",
@@ -1373,6 +1392,7 @@
1373
1392
  }
1374
1393
  },
1375
1394
  {
1395
+ "name": "clone_exploratory_session_v1",
1376
1396
  "method": "POST",
1377
1397
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/clone",
1378
1398
  "mode": "write",
@@ -1403,6 +1423,7 @@
1403
1423
  }
1404
1424
  },
1405
1425
  {
1426
+ "name": "clone_test_plan_v1",
1406
1427
  "method": "POST",
1407
1428
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}/clone",
1408
1429
  "mode": "write",
@@ -1467,6 +1488,7 @@
1467
1488
  }
1468
1489
  },
1469
1490
  {
1491
+ "name": "clone_test_run",
1470
1492
  "method": "POST",
1471
1493
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/clone",
1472
1494
  "mode": "write",
@@ -1564,6 +1586,7 @@
1564
1586
  }
1565
1587
  },
1566
1588
  {
1589
+ "name": "close_exploratory_session",
1567
1590
  "method": "POST",
1568
1591
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/close",
1569
1592
  "mode": "write",
@@ -1613,6 +1636,7 @@
1613
1636
  }
1614
1637
  },
1615
1638
  {
1639
+ "name": "close_test_run_v1",
1616
1640
  "method": "POST",
1617
1641
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/close",
1618
1642
  "mode": "write",
@@ -1670,6 +1694,7 @@
1670
1694
  }
1671
1695
  },
1672
1696
  {
1697
+ "name": "copy_folder",
1673
1698
  "method": "POST",
1674
1699
  "path": "/api/v1/projects/{project_id}/folders/copy",
1675
1700
  "mode": "write",
@@ -1738,6 +1763,7 @@
1738
1763
  }
1739
1764
  },
1740
1765
  {
1766
+ "name": "count_run_selection_v1",
1741
1767
  "method": "POST",
1742
1768
  "path": "/api/v1/projects/{project_id}/test-runs/selection-count",
1743
1769
  "mode": "read",
@@ -1828,6 +1854,7 @@
1828
1854
  }
1829
1855
  },
1830
1856
  {
1857
+ "name": "create_bulk_test_cases_v1",
1831
1858
  "method": "POST",
1832
1859
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/bulk-test-cases",
1833
1860
  "mode": "write",
@@ -2052,6 +2079,7 @@
2052
2079
  }
2053
2080
  },
2054
2081
  {
2082
+ "name": "create_configuration_v1",
2055
2083
  "method": "POST",
2056
2084
  "path": "/api/v1/projects/{project_id}/configurations",
2057
2085
  "mode": "write",
@@ -2100,6 +2128,7 @@
2100
2128
  }
2101
2129
  },
2102
2130
  {
2131
+ "name": "create_custom_field_dataset_option_v2",
2103
2132
  "method": "POST",
2104
2133
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}/options",
2105
2134
  "mode": "write",
@@ -2161,6 +2190,7 @@
2161
2190
  }
2162
2191
  },
2163
2192
  {
2193
+ "name": "create_custom_field_dataset_v2",
2164
2194
  "method": "POST",
2165
2195
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets",
2166
2196
  "mode": "write",
@@ -2236,6 +2266,7 @@
2236
2266
  }
2237
2267
  },
2238
2268
  {
2269
+ "name": "create_custom_field_definition_v2",
2239
2270
  "method": "POST",
2240
2271
  "path": "/api/v1/admin-v2/settings/custom-fields",
2241
2272
  "mode": "write",
@@ -2343,6 +2374,7 @@
2343
2374
  }
2344
2375
  },
2345
2376
  {
2377
+ "name": "create_dataset",
2346
2378
  "method": "POST",
2347
2379
  "path": "/api/v1/projects/{project_id}/datasets",
2348
2380
  "mode": "write",
@@ -2449,6 +2481,7 @@
2449
2481
  }
2450
2482
  },
2451
2483
  {
2484
+ "name": "create_exploratory_session",
2452
2485
  "method": "POST",
2453
2486
  "path": "/api/v1/projects/{project_id}/exploratory-sessions",
2454
2487
  "mode": "write",
@@ -2612,6 +2645,7 @@
2612
2645
  }
2613
2646
  },
2614
2647
  {
2648
+ "name": "create_exploratory_session_log",
2615
2649
  "method": "POST",
2616
2650
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/logs",
2617
2651
  "mode": "write",
@@ -2725,6 +2759,7 @@
2725
2759
  }
2726
2760
  },
2727
2761
  {
2762
+ "name": "create_filter",
2728
2763
  "method": "POST",
2729
2764
  "path": "/api/v1/projects/{project_id}/filter",
2730
2765
  "mode": "write",
@@ -2801,6 +2836,7 @@
2801
2836
  }
2802
2837
  },
2803
2838
  {
2839
+ "name": "create_project_v1",
2804
2840
  "method": "POST",
2805
2841
  "path": "/api/v1/projects",
2806
2842
  "mode": "write",
@@ -2851,6 +2887,7 @@
2851
2887
  }
2852
2888
  },
2853
2889
  {
2890
+ "name": "create_report",
2854
2891
  "method": "POST",
2855
2892
  "path": "/api/v1/projects/{project_id}/reports",
2856
2893
  "mode": "write",
@@ -3149,6 +3186,7 @@
3149
3186
  }
3150
3187
  },
3151
3188
  {
3189
+ "name": "create_root_folder_v1",
3152
3190
  "method": "POST",
3153
3191
  "path": "/api/v1/projects/{project_id}/folders",
3154
3192
  "mode": "write",
@@ -3205,6 +3243,7 @@
3205
3243
  }
3206
3244
  },
3207
3245
  {
3246
+ "name": "create_shared_step_v1",
3208
3247
  "method": "POST",
3209
3248
  "path": "/api/v1/projects/{project_id}/shared-steps",
3210
3249
  "mode": "write",
@@ -3284,6 +3323,7 @@
3284
3323
  }
3285
3324
  },
3286
3325
  {
3326
+ "name": "create_step_result_v1",
3287
3327
  "method": "POST",
3288
3328
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases/{test_case_id}/step/{step_id}",
3289
3329
  "mode": "write",
@@ -3336,6 +3376,7 @@
3336
3376
  }
3337
3377
  },
3338
3378
  {
3379
+ "name": "create_sub_folder_v1",
3339
3380
  "method": "POST",
3340
3381
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/mkdir",
3341
3382
  "mode": "write",
@@ -3413,6 +3454,7 @@
3413
3454
  }
3414
3455
  },
3415
3456
  {
3457
+ "name": "create_test_case_v1",
3416
3458
  "method": "POST",
3417
3459
  "path": "/api/v1/projects/{project_id}/test-cases",
3418
3460
  "mode": "write",
@@ -3457,6 +3499,7 @@
3457
3499
  }
3458
3500
  },
3459
3501
  {
3502
+ "name": "create_test_cases",
3460
3503
  "method": "POST",
3461
3504
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases",
3462
3505
  "mode": "write",
@@ -3649,6 +3692,7 @@
3649
3692
  }
3650
3693
  },
3651
3694
  {
3695
+ "name": "create_test_plan_v1",
3652
3696
  "method": "POST",
3653
3697
  "path": "/api/v1/projects/{project_id}/test-plans",
3654
3698
  "mode": "write",
@@ -3779,6 +3823,7 @@
3779
3823
  }
3780
3824
  },
3781
3825
  {
3826
+ "name": "create_test_result_for_test_case",
3782
3827
  "method": "POST",
3783
3828
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases/{test_case_id}/test-results",
3784
3829
  "mode": "write",
@@ -3861,6 +3906,9 @@
3861
3906
  }
3862
3907
  ],
3863
3908
  "intent": "Create a new test result for a test case in a test run",
3909
+ "guidance": [
3910
+ "This is how a pass or fail is recorded against a case in a run. Editing the run or the case does not record an outcome."
3911
+ ],
3864
3912
  "returns": [
3865
3913
  "id",
3866
3914
  "status",
@@ -3900,6 +3948,7 @@
3900
3948
  }
3901
3949
  },
3902
3950
  {
3951
+ "name": "create_test_run_v1",
3903
3952
  "method": "POST",
3904
3953
  "path": "/api/v1/projects/{project_id}/test-runs",
3905
3954
  "mode": "write",
@@ -4091,6 +4140,13 @@
4091
4140
  }
4092
4141
  ],
4093
4142
  "intent": "Create a test run for a project",
4143
+ "guidance": [
4144
+ "Discovering cases does not put them in a run. Carry the case ids you found into this call — a create whose only case-bearing field is a filter rule succeeds and creates an EMPTY run.",
4145
+ "run_state is required and is validated before the selection, so a bare 'invalid data' error means a bad run field, not a bad selection.",
4146
+ "A filter rule also makes the run keep syncing as cases change, even if you did not ask for that. Create runs static unless the user explicitly wants a run that keeps updating.",
4147
+ "Dynamic runs match on priority, status, category, owner, automation status, automation state, folder, tags and issues only. Creation and update dates are echoed back but never matched, so a 'last 7 days' dynamic run silently drops the date window and keeps collecting.",
4148
+ "Preview the selection first if the count matters — it reports what the selection resolves to before anything is created."
4149
+ ],
4094
4150
  "returns": [
4095
4151
  "id",
4096
4152
  "identifier",
@@ -4130,6 +4186,7 @@
4130
4186
  }
4131
4187
  },
4132
4188
  {
4189
+ "name": "delete_custom_field_dataset_option_v2",
4133
4190
  "method": "POST",
4134
4191
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}/options/{option_id}/delete",
4135
4192
  "mode": "destructive",
@@ -4177,6 +4234,7 @@
4177
4234
  }
4178
4235
  },
4179
4236
  {
4237
+ "name": "delete_custom_field_dataset_v2",
4180
4238
  "method": "POST",
4181
4239
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}/delete",
4182
4240
  "mode": "destructive",
@@ -4219,6 +4277,7 @@
4219
4277
  }
4220
4278
  },
4221
4279
  {
4280
+ "name": "delete_custom_field_definition_v2",
4222
4281
  "method": "POST",
4223
4282
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/delete",
4224
4283
  "mode": "destructive",
@@ -4256,6 +4315,7 @@
4256
4315
  }
4257
4316
  },
4258
4317
  {
4318
+ "name": "delete_dataset",
4259
4319
  "method": "DELETE",
4260
4320
  "path": "/api/v1/projects/{project_id}/datasets/{uuid}",
4261
4321
  "mode": "destructive",
@@ -4313,6 +4373,7 @@
4313
4373
  }
4314
4374
  },
4315
4375
  {
4376
+ "name": "delete_exploratory_session",
4316
4377
  "method": "DELETE",
4317
4378
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}",
4318
4379
  "mode": "destructive",
@@ -4372,6 +4433,7 @@
4372
4433
  }
4373
4434
  },
4374
4435
  {
4436
+ "name": "delete_exploratory_session_log",
4375
4437
  "method": "DELETE",
4376
4438
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/logs/{log_id}",
4377
4439
  "mode": "destructive",
@@ -4424,6 +4486,7 @@
4424
4486
  }
4425
4487
  },
4426
4488
  {
4489
+ "name": "delete_filter",
4427
4490
  "method": "DELETE",
4428
4491
  "path": "/api/v1/projects/{project_id}/filter/{filter_id}",
4429
4492
  "mode": "destructive",
@@ -4466,6 +4529,7 @@
4466
4529
  }
4467
4530
  },
4468
4531
  {
4532
+ "name": "delete_folder_and_contents",
4469
4533
  "method": "POST",
4470
4534
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/rm",
4471
4535
  "mode": "destructive",
@@ -4534,6 +4598,7 @@
4534
4598
  }
4535
4599
  },
4536
4600
  {
4601
+ "name": "delete_report_schedule",
4537
4602
  "method": "DELETE",
4538
4603
  "path": "/api/v1/projects/{project_id}/reports/schedules/{schedule_id}",
4539
4604
  "mode": "destructive",
@@ -4593,6 +4658,7 @@
4593
4658
  }
4594
4659
  },
4595
4660
  {
4661
+ "name": "delete_shared_step_v1",
4596
4662
  "method": "DELETE",
4597
4663
  "path": "/api/v1/projects/{project_id}/shared-steps/{shared_step_id}",
4598
4664
  "mode": "destructive",
@@ -4635,6 +4701,7 @@
4635
4701
  }
4636
4702
  },
4637
4703
  {
4704
+ "name": "delete_test_case_attachment",
4638
4705
  "method": "POST",
4639
4706
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/attachments/{attachment_id}/delete",
4640
4707
  "mode": "destructive",
@@ -4701,6 +4768,7 @@
4701
4768
  }
4702
4769
  },
4703
4770
  {
4771
+ "name": "delete_test_plan_v1",
4704
4772
  "method": "POST",
4705
4773
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}/delete",
4706
4774
  "mode": "destructive",
@@ -4756,6 +4824,7 @@
4756
4824
  }
4757
4825
  },
4758
4826
  {
4827
+ "name": "delete_test_result_v1",
4759
4828
  "method": "POST",
4760
4829
  "path": "/api/v1/projects/{project_id}/test-results/{test_result_id}/delete",
4761
4830
  "mode": "destructive",
@@ -4800,6 +4869,7 @@
4800
4869
  }
4801
4870
  },
4802
4871
  {
4872
+ "name": "delete_v1_test_run",
4803
4873
  "method": "POST",
4804
4874
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/delete",
4805
4875
  "mode": "destructive",
@@ -4857,6 +4927,7 @@
4857
4927
  }
4858
4928
  },
4859
4929
  {
4930
+ "name": "discard_duplicate_v1",
4860
4931
  "method": "PUT",
4861
4932
  "path": "/api/v1/projects/{project_id}/ai-duplicates/{duplicate_id}",
4862
4933
  "mode": "write",
@@ -4913,6 +4984,7 @@
4913
4984
  }
4914
4985
  },
4915
4986
  {
4987
+ "name": "download_report",
4916
4988
  "method": "POST",
4917
4989
  "path": "/api/v1/projects/{project_id}/reports/{report_id}/download",
4918
4990
  "mode": "write",
@@ -4974,6 +5046,7 @@
4974
5046
  }
4975
5047
  },
4976
5048
  {
5049
+ "name": "edit_test_case_partial_v1",
4977
5050
  "method": "PATCH",
4978
5051
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/edit-v2",
4979
5052
  "mode": "write",
@@ -5257,6 +5330,7 @@
5257
5330
  }
5258
5331
  },
5259
5332
  {
5333
+ "name": "edit_test_case_v1",
5260
5334
  "method": "POST",
5261
5335
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/edit",
5262
5336
  "mode": "write",
@@ -5471,6 +5545,7 @@
5471
5545
  }
5472
5546
  },
5473
5547
  {
5548
+ "name": "edit_test_run",
5474
5549
  "method": "POST",
5475
5550
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/edit",
5476
5551
  "mode": "write",
@@ -5707,6 +5782,7 @@
5707
5782
  }
5708
5783
  },
5709
5784
  {
5785
+ "name": "export_dashboard_analytics",
5710
5786
  "method": "POST",
5711
5787
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/download",
5712
5788
  "mode": "write",
@@ -5773,6 +5849,7 @@
5773
5849
  }
5774
5850
  },
5775
5851
  {
5852
+ "name": "get_active_test_runs_info_v1",
5776
5853
  "method": "GET",
5777
5854
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/active-test-runs-info",
5778
5855
  "mode": "read",
@@ -5811,6 +5888,7 @@
5811
5888
  }
5812
5889
  },
5813
5890
  {
5891
+ "name": "get_archived_test_cases",
5814
5892
  "method": "GET",
5815
5893
  "path": "/api/v1/projects/{project_id}/test-cases/archived_test_cases",
5816
5894
  "mode": "read",
@@ -5856,6 +5934,7 @@
5856
5934
  }
5857
5935
  },
5858
5936
  {
5937
+ "name": "get_archived_test_plan_count_v1",
5859
5938
  "method": "GET",
5860
5939
  "path": "/api/v1/projects/{project_id}/test-plans/archive_count",
5861
5940
  "mode": "read",
@@ -5893,6 +5972,7 @@
5893
5972
  }
5894
5973
  },
5895
5974
  {
5975
+ "name": "get_automation_stats_v1",
5896
5976
  "method": "GET",
5897
5977
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/automation-stats",
5898
5978
  "mode": "read",
@@ -5937,6 +6017,7 @@
5937
6017
  }
5938
6018
  },
5939
6019
  {
6020
+ "name": "get_closed_test_runs",
5940
6021
  "method": "GET",
5941
6022
  "path": "/api/v1/projects/{project_id}/test-runs/closed",
5942
6023
  "mode": "read",
@@ -5988,6 +6069,7 @@
5988
6069
  }
5989
6070
  },
5990
6071
  {
6072
+ "name": "get_closed_test_runs_info_v1",
5991
6073
  "method": "GET",
5992
6074
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/closed-test-runs-info",
5993
6075
  "mode": "read",
@@ -6028,6 +6110,7 @@
6028
6110
  }
6029
6111
  },
6030
6112
  {
6113
+ "name": "get_closed_test_runs_split_v1",
6031
6114
  "method": "GET",
6032
6115
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/closed-test-runs-split",
6033
6116
  "mode": "read",
@@ -6068,6 +6151,7 @@
6068
6151
  }
6069
6152
  },
6070
6153
  {
6154
+ "name": "get_configurations_v1",
6071
6155
  "method": "GET",
6072
6156
  "path": "/api/v1/projects/{project_id}/configurations",
6073
6157
  "mode": "read",
@@ -6116,6 +6200,7 @@
6116
6200
  }
6117
6201
  },
6118
6202
  {
6203
+ "name": "get_custom_field_dataset_v2",
6119
6204
  "method": "GET",
6120
6205
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}",
6121
6206
  "mode": "read",
@@ -6159,6 +6244,7 @@
6159
6244
  }
6160
6245
  },
6161
6246
  {
6247
+ "name": "get_custom_field_definition_v2",
6162
6248
  "method": "GET",
6163
6249
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}",
6164
6250
  "mode": "read",
@@ -6197,6 +6283,7 @@
6197
6283
  }
6198
6284
  },
6199
6285
  {
6286
+ "name": "get_custom_field_values_v1",
6200
6287
  "method": "GET",
6201
6288
  "path": "/api/v1/projects/{project_id}/{entity_type}/custom-fields/{field_id}",
6202
6289
  "mode": "read",
@@ -6249,6 +6336,7 @@
6249
6336
  }
6250
6337
  },
6251
6338
  {
6339
+ "name": "get_dataset",
6252
6340
  "method": "GET",
6253
6341
  "path": "/api/v1/projects/{project_id}/datasets/{uuid}",
6254
6342
  "mode": "read",
@@ -6310,6 +6398,7 @@
6310
6398
  }
6311
6399
  },
6312
6400
  {
6401
+ "name": "get_dataset_linked_test_cases",
6313
6402
  "method": "GET",
6314
6403
  "path": "/api/v1/projects/{project_id}/datasets/{uuid}/test-cases",
6315
6404
  "mode": "read",
@@ -6379,6 +6468,7 @@
6379
6468
  }
6380
6469
  },
6381
6470
  {
6471
+ "name": "get_dataset_variables",
6382
6472
  "method": "GET",
6383
6473
  "path": "/api/v1/projects/{project_id}/datasets/variables",
6384
6474
  "mode": "read",
@@ -6444,6 +6534,7 @@
6444
6534
  }
6445
6535
  },
6446
6536
  {
6537
+ "name": "get_dedupe_status_v1",
6447
6538
  "method": "GET",
6448
6539
  "path": "/api/v1/projects/{project_id}/ai-duplicates/status",
6449
6540
  "mode": "read",
@@ -6483,6 +6574,7 @@
6483
6574
  }
6484
6575
  },
6485
6576
  {
6577
+ "name": "get_duplicate_source_test_case_v1",
6486
6578
  "method": "GET",
6487
6579
  "path": "/api/v1/projects/{project_id}/ai-duplicates/{duplicate_id}/source_tc",
6488
6580
  "mode": "read",
@@ -6520,6 +6612,7 @@
6520
6612
  }
6521
6613
  },
6522
6614
  {
6615
+ "name": "get_duplicate_v1",
6523
6616
  "method": "GET",
6524
6617
  "path": "/api/v1/projects/{project_id}/ai-duplicates/{duplicate_id}",
6525
6618
  "mode": "read",
@@ -6557,6 +6650,7 @@
6557
6650
  }
6558
6651
  },
6559
6652
  {
6653
+ "name": "get_entity_filter_details_v1",
6560
6654
  "method": "GET",
6561
6655
  "path": "/api/v1/projects/{project_id}/{entity}/filter-details",
6562
6656
  "mode": "read",
@@ -6851,6 +6945,7 @@
6851
6945
  }
6852
6946
  },
6853
6947
  {
6948
+ "name": "get_exploratory_session",
6854
6949
  "method": "GET",
6855
6950
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}",
6856
6951
  "mode": "read",
@@ -6917,6 +7012,7 @@
6917
7012
  }
6918
7013
  },
6919
7014
  {
7015
+ "name": "get_exploratory_session_summary_v1",
6920
7016
  "method": "GET",
6921
7017
  "path": "/api/v1/projects/{project_id}/reports/exploratory-session-summary",
6922
7018
  "mode": "read",
@@ -6968,6 +7064,7 @@
6968
7064
  }
6969
7065
  },
6970
7066
  {
7067
+ "name": "get_filter",
6971
7068
  "method": "GET",
6972
7069
  "path": "/api/v1/projects/{project_id}/filter/{filter_id}",
6973
7070
  "mode": "read",
@@ -7020,6 +7117,7 @@
7020
7117
  }
7021
7118
  },
7022
7119
  {
7120
+ "name": "get_folder_remove_summary",
7023
7121
  "method": "GET",
7024
7122
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/rm-summary",
7025
7123
  "mode": "read",
@@ -7062,6 +7160,7 @@
7062
7160
  }
7063
7161
  },
7064
7162
  {
7163
+ "name": "get_folder_tree_v1",
7065
7164
  "method": "GET",
7066
7165
  "path": "/api/v1/projects/{project_id}/repository/mapping",
7067
7166
  "mode": "read",
@@ -7099,6 +7198,7 @@
7099
7198
  }
7100
7199
  },
7101
7200
  {
7201
+ "name": "get_group_users_v2_v1",
7102
7202
  "method": "GET",
7103
7203
  "path": "/api/v1/group/users-v2",
7104
7204
  "mode": "read",
@@ -7138,6 +7238,7 @@
7138
7238
  }
7139
7239
  },
7140
7240
  {
7241
+ "name": "get_issues_count_info_v1",
7141
7242
  "method": "GET",
7142
7243
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/issues-count-info",
7143
7244
  "mode": "read",
@@ -7178,6 +7279,7 @@
7178
7279
  }
7179
7280
  },
7180
7281
  {
7282
+ "name": "get_project_by_integer_id_v1",
7181
7283
  "method": "GET",
7182
7284
  "path": "/api/v1/projects/{project_id}",
7183
7285
  "mode": "read",
@@ -7220,6 +7322,7 @@
7220
7322
  }
7221
7323
  },
7222
7324
  {
7325
+ "name": "get_project_id_custom_fields_v2_v1",
7223
7326
  "method": "GET",
7224
7327
  "path": "/api/v1/projects/{project_id}/form-fields-v2",
7225
7328
  "mode": "read",
@@ -7268,6 +7371,7 @@
7268
7371
  }
7269
7372
  },
7270
7373
  {
7374
+ "name": "get_project_settings",
7271
7375
  "method": "GET",
7272
7376
  "path": "/api/v1/projects/{project_id}/settings",
7273
7377
  "mode": "read",
@@ -7345,6 +7449,7 @@
7345
7449
  }
7346
7450
  },
7347
7451
  {
7452
+ "name": "get_project_users_v2_v1",
7348
7453
  "method": "GET",
7349
7454
  "path": "/api/v1/projects/{project_id}/users-v2",
7350
7455
  "mode": "read",
@@ -7394,6 +7499,7 @@
7394
7499
  }
7395
7500
  },
7396
7501
  {
7502
+ "name": "get_projects_basic_v1",
7397
7503
  "method": "GET",
7398
7504
  "path": "/api/v1/projects/basic",
7399
7505
  "mode": "read",
@@ -7410,7 +7516,7 @@
7410
7516
  {
7411
7517
  "name": "q[query]",
7412
7518
  "type": "string",
7413
- "example": "jdoe42"
7519
+ "example": "example-project"
7414
7520
  },
7415
7521
  {
7416
7522
  "name": "q[identifier]",
@@ -7449,6 +7555,7 @@
7449
7555
  }
7450
7556
  },
7451
7557
  {
7558
+ "name": "get_projects_minify_v1",
7452
7559
  "method": "GET",
7453
7560
  "path": "/api/v1/projects/minify",
7454
7561
  "mode": "read",
@@ -7494,6 +7601,7 @@
7494
7601
  }
7495
7602
  },
7496
7603
  {
7604
+ "name": "get_report_attachment_url",
7497
7605
  "method": "GET",
7498
7606
  "path": "/api/v1/projects/{project_id}/reports/attachments/{attachment_id}",
7499
7607
  "mode": "read",
@@ -7554,6 +7662,7 @@
7554
7662
  }
7555
7663
  },
7556
7664
  {
7665
+ "name": "get_report_detail",
7557
7666
  "method": "GET",
7558
7667
  "path": "/api/v1/projects/{project_id}/reports/{report_id}",
7559
7668
  "mode": "read",
@@ -7628,6 +7737,7 @@
7628
7737
  }
7629
7738
  },
7630
7739
  {
7740
+ "name": "get_report_section_v1",
7631
7741
  "method": "GET",
7632
7742
  "path": "/api/v1/projects/{project_id}/reports/{report_id}/{section_name}",
7633
7743
  "mode": "read",
@@ -7683,6 +7793,7 @@
7683
7793
  }
7684
7794
  },
7685
7795
  {
7796
+ "name": "get_report_summary_by_type",
7686
7797
  "method": "GET",
7687
7798
  "path": "/api/v1/projects/{project_id}/reports/{report_id}/detail/{report_type}",
7688
7799
  "mode": "read",
@@ -7784,6 +7895,7 @@
7784
7895
  }
7785
7896
  },
7786
7897
  {
7898
+ "name": "get_root_folders_v1",
7787
7899
  "method": "GET",
7788
7900
  "path": "/api/v1/projects/{project_id}/folders",
7789
7901
  "mode": "read",
@@ -7842,6 +7954,7 @@
7842
7954
  }
7843
7955
  },
7844
7956
  {
7957
+ "name": "get_selected_report_testcases",
7845
7958
  "method": "GET",
7846
7959
  "path": "/api/v1/projects/{project_id}/reports/{report_id}/selection/edit",
7847
7960
  "mode": "read",
@@ -7885,6 +7998,7 @@
7885
7998
  }
7886
7999
  },
7887
8000
  {
8001
+ "name": "get_shared_steps_by_i_d_v1",
7888
8002
  "method": "GET",
7889
8003
  "path": "/api/v1/projects/{project_id}/shared-steps/{shared_step_id}",
7890
8004
  "mode": "read",
@@ -7942,6 +8056,7 @@
7942
8056
  }
7943
8057
  },
7944
8058
  {
8059
+ "name": "get_shared_steps_v1",
7945
8060
  "method": "GET",
7946
8061
  "path": "/api/v1/projects/{project_id}/shared-steps",
7947
8062
  "mode": "read",
@@ -8000,6 +8115,7 @@
8000
8115
  }
8001
8116
  },
8002
8117
  {
8118
+ "name": "get_system_field_values_v1",
8003
8119
  "method": "GET",
8004
8120
  "path": "/api/v1/projects/{project_id}/test-case/{field_name}",
8005
8121
  "mode": "read",
@@ -8049,6 +8165,7 @@
8049
8165
  }
8050
8166
  },
8051
8167
  {
8168
+ "name": "get_test_case_attachments_v1",
8052
8169
  "method": "GET",
8053
8170
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/attachments",
8054
8171
  "mode": "read",
@@ -8116,6 +8233,7 @@
8116
8233
  }
8117
8234
  },
8118
8235
  {
8236
+ "name": "get_test_case_by_integer_id_v1",
8119
8237
  "method": "GET",
8120
8238
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}",
8121
8239
  "mode": "read",
@@ -8159,6 +8277,7 @@
8159
8277
  }
8160
8278
  },
8161
8279
  {
8280
+ "name": "get_test_case_count_trend_v1",
8162
8281
  "method": "GET",
8163
8282
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/test-case-count-trend",
8164
8283
  "mode": "read",
@@ -8199,6 +8318,7 @@
8199
8318
  }
8200
8319
  },
8201
8320
  {
8321
+ "name": "get_test_case_detail",
8202
8322
  "method": "GET",
8203
8323
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/detail",
8204
8324
  "mode": "read",
@@ -8278,6 +8398,7 @@
8278
8398
  }
8279
8399
  },
8280
8400
  {
8401
+ "name": "get_test_case_histories_v1",
8281
8402
  "method": "GET",
8282
8403
  "path": "/api/v1/projects/{project_id}/test-cases/{test_case_id}/histories",
8283
8404
  "mode": "read",
@@ -8333,6 +8454,7 @@
8333
8454
  }
8334
8455
  },
8335
8456
  {
8457
+ "name": "get_test_case_history_diff_v1",
8336
8458
  "method": "GET",
8337
8459
  "path": "/api/v1/projects/{project_id}/test-cases/{test_case_id}/histories/diff",
8338
8460
  "mode": "read",
@@ -8386,6 +8508,7 @@
8386
8508
  }
8387
8509
  },
8388
8510
  {
8511
+ "name": "get_test_case_history_v1",
8389
8512
  "method": "GET",
8390
8513
  "path": "/api/v1/projects/{project_id}/test-cases/{test_case_id}/histories/{history_id}",
8391
8514
  "mode": "read",
@@ -8457,6 +8580,7 @@
8457
8580
  }
8458
8581
  },
8459
8582
  {
8583
+ "name": "get_test_case_tags",
8460
8584
  "method": "GET",
8461
8585
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/tags",
8462
8586
  "mode": "read",
@@ -8526,6 +8650,7 @@
8526
8650
  }
8527
8651
  },
8528
8652
  {
8653
+ "name": "get_test_case_type_split_v1",
8529
8654
  "method": "GET",
8530
8655
  "path": "/api/v1/projects/{project_id}/dashboard-analytics/test-case-type-split",
8531
8656
  "mode": "read",
@@ -8569,6 +8694,7 @@
8569
8694
  }
8570
8695
  },
8571
8696
  {
8697
+ "name": "get_test_cases_for_v1_test_run",
8572
8698
  "method": "GET",
8573
8699
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases",
8574
8700
  "mode": "read",
@@ -8619,6 +8745,7 @@
8619
8745
  }
8620
8746
  },
8621
8747
  {
8748
+ "name": "get_test_cases_v1",
8622
8749
  "method": "GET",
8623
8750
  "path": "/api/v1/projects/{project_id}/test-cases",
8624
8751
  "mode": "read",
@@ -8703,6 +8830,7 @@
8703
8830
  }
8704
8831
  },
8705
8832
  {
8833
+ "name": "get_test_plan_by_integer_id_v1",
8706
8834
  "method": "GET",
8707
8835
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}",
8708
8836
  "mode": "read",
@@ -8740,6 +8868,7 @@
8740
8868
  }
8741
8869
  },
8742
8870
  {
8871
+ "name": "get_test_plan_execution_trend_v1",
8743
8872
  "method": "GET",
8744
8873
  "path": "/api/v1/projects/{project_id}/test-plans/execution-trend",
8745
8874
  "mode": "read",
@@ -8805,6 +8934,7 @@
8805
8934
  }
8806
8935
  },
8807
8936
  {
8937
+ "name": "get_test_plan_linked_sessions_chart_data_v1",
8808
8938
  "method": "GET",
8809
8939
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}/linked-sessions-chart-data",
8810
8940
  "mode": "read",
@@ -8842,6 +8972,7 @@
8842
8972
  }
8843
8973
  },
8844
8974
  {
8975
+ "name": "get_test_plan_test_runs_v1",
8845
8976
  "method": "GET",
8846
8977
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}/test-runs",
8847
8978
  "mode": "read",
@@ -8904,6 +9035,7 @@
8904
9035
  }
8905
9036
  },
8906
9037
  {
9038
+ "name": "get_test_results_custom_fields_v1",
8907
9039
  "method": "GET",
8908
9040
  "path": "/api/v1/projects/{project_id}/test-results/custom-fields",
8909
9041
  "mode": "read",
@@ -8963,6 +9095,7 @@
8963
9095
  }
8964
9096
  },
8965
9097
  {
9098
+ "name": "get_test_results_for_test_case",
8966
9099
  "method": "GET",
8967
9100
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases/{test_case_id}/test-results",
8968
9101
  "mode": "read",
@@ -9025,6 +9158,7 @@
9025
9158
  }
9026
9159
  },
9027
9160
  {
9161
+ "name": "get_test_run_by_integer_id_v1",
9028
9162
  "method": "GET",
9029
9163
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}",
9030
9164
  "mode": "read",
@@ -9042,6 +9176,9 @@
9042
9176
  }
9043
9177
  ],
9044
9178
  "intent": "Get a test run by INTEGER id (v1) — full detail + its TR-NNN identifier",
9179
+ "guidance": [
9180
+ "The run's id field is the display identifier string, while uuid is the integer. Take uuid whenever you carry this run into another call: the display string is rejected downstream."
9181
+ ],
9045
9182
  "returns": [
9046
9183
  "id",
9047
9184
  "identifier",
@@ -9064,6 +9201,7 @@
9064
9201
  }
9065
9202
  },
9066
9203
  {
9204
+ "name": "get_test_run_cases_v1",
9067
9205
  "method": "GET",
9068
9206
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/detail",
9069
9207
  "mode": "read",
@@ -9095,6 +9233,7 @@
9095
9233
  }
9096
9234
  },
9097
9235
  {
9236
+ "name": "get_test_runs_form_fields_v1",
9098
9237
  "method": "GET",
9099
9238
  "path": "/api/v1/projects/{project_id}/test-runs/form-fields",
9100
9239
  "mode": "read",
@@ -9146,6 +9285,7 @@
9146
9285
  }
9147
9286
  },
9148
9287
  {
9288
+ "name": "get_test_runs_selection",
9149
9289
  "method": "POST",
9150
9290
  "path": "/api/v1/projects/{project_id}/test-runs/selection",
9151
9291
  "mode": "read",
@@ -9222,6 +9362,7 @@
9222
9362
  }
9223
9363
  },
9224
9364
  {
9365
+ "name": "get_test_runs_v1",
9225
9366
  "method": "GET",
9226
9367
  "path": "/api/v1/projects/{project_id}/test-runs",
9227
9368
  "mode": "read",
@@ -9283,6 +9424,7 @@
9283
9424
  }
9284
9425
  },
9285
9426
  {
9427
+ "name": "import_dataset_c_s_v",
9286
9428
  "method": "POST",
9287
9429
  "path": "/api/v1/projects/{project_id}/datasets/import_csv",
9288
9430
  "mode": "write",
@@ -9345,6 +9487,7 @@
9345
9487
  }
9346
9488
  },
9347
9489
  {
9490
+ "name": "list_activity_events_v1",
9348
9491
  "method": "GET",
9349
9492
  "path": "/api/v1/activities",
9350
9493
  "mode": "read",
@@ -9435,6 +9578,7 @@
9435
9578
  }
9436
9579
  },
9437
9580
  {
9581
+ "name": "list_archived_test_plans_v1",
9438
9582
  "method": "GET",
9439
9583
  "path": "/api/v1/projects/{project_id}/test-plans/archived_test_plans",
9440
9584
  "mode": "read",
@@ -9474,6 +9618,7 @@
9474
9618
  }
9475
9619
  },
9476
9620
  {
9621
+ "name": "list_custom_field_dataset_options_v2",
9477
9622
  "method": "GET",
9478
9623
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}/options",
9479
9624
  "mode": "read",
@@ -9517,6 +9662,7 @@
9517
9662
  }
9518
9663
  },
9519
9664
  {
9665
+ "name": "list_datasets",
9520
9666
  "method": "GET",
9521
9667
  "path": "/api/v1/projects/{project_id}/datasets",
9522
9668
  "mode": "read",
@@ -9590,6 +9736,7 @@
9590
9736
  }
9591
9737
  },
9592
9738
  {
9739
+ "name": "list_duplicates_v1",
9593
9740
  "method": "GET",
9594
9741
  "path": "/api/v1/projects/{project_id}/ai-duplicates",
9595
9742
  "mode": "read",
@@ -9641,6 +9788,7 @@
9641
9788
  }
9642
9789
  },
9643
9790
  {
9791
+ "name": "list_exploratory_session_defects",
9644
9792
  "method": "GET",
9645
9793
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/defects",
9646
9794
  "mode": "read",
@@ -9735,6 +9883,7 @@
9735
9883
  }
9736
9884
  },
9737
9885
  {
9886
+ "name": "list_exploratory_session_logs",
9738
9887
  "method": "GET",
9739
9888
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/logs",
9740
9889
  "mode": "read",
@@ -9801,6 +9950,7 @@
9801
9950
  }
9802
9951
  },
9803
9952
  {
9953
+ "name": "list_exploratory_sessions",
9804
9954
  "method": "GET",
9805
9955
  "path": "/api/v1/projects/{project_id}/exploratory-sessions",
9806
9956
  "mode": "read",
@@ -9926,6 +10076,7 @@
9926
10076
  }
9927
10077
  },
9928
10078
  {
10079
+ "name": "list_filters",
9929
10080
  "method": "GET",
9930
10081
  "path": "/api/v1/projects/{project_id}/filter",
9931
10082
  "mode": "read",
@@ -9989,6 +10140,7 @@
9989
10140
  }
9990
10141
  },
9991
10142
  {
10143
+ "name": "list_folder_contents",
9992
10144
  "method": "GET",
9993
10145
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}",
9994
10146
  "mode": "read",
@@ -10032,6 +10184,7 @@
10032
10184
  }
10033
10185
  },
10034
10186
  {
10187
+ "name": "list_folder_test_cases_v1",
10035
10188
  "method": "GET",
10036
10189
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases",
10037
10190
  "mode": "read",
@@ -10097,6 +10250,7 @@
10097
10250
  }
10098
10251
  },
10099
10252
  {
10253
+ "name": "list_projects_v1",
10100
10254
  "method": "GET",
10101
10255
  "path": "/api/v1/projects",
10102
10256
  "mode": "read",
@@ -10105,7 +10259,7 @@
10105
10259
  {
10106
10260
  "name": "q",
10107
10261
  "type": "string",
10108
- "example": "jdoe42"
10262
+ "example": "example-project"
10109
10263
  },
10110
10264
  {
10111
10265
  "name": "p",
@@ -10170,6 +10324,7 @@
10170
10324
  }
10171
10325
  },
10172
10326
  {
10327
+ "name": "list_schedules",
10173
10328
  "method": "GET",
10174
10329
  "path": "/api/v1/projects/{project_id}/reports/schedules",
10175
10330
  "mode": "read",
@@ -10243,6 +10398,7 @@
10243
10398
  }
10244
10399
  },
10245
10400
  {
10401
+ "name": "list_test_case_tags_v1",
10246
10402
  "method": "GET",
10247
10403
  "path": "/api/v1/projects/{project_id}/test-case/tags-v2",
10248
10404
  "mode": "read",
@@ -10280,6 +10436,7 @@
10280
10436
  }
10281
10437
  },
10282
10438
  {
10439
+ "name": "list_test_case_templates_v2",
10283
10440
  "method": "GET",
10284
10441
  "path": "/api/v1/admin-v2/settings/templates",
10285
10442
  "mode": "read",
@@ -10333,6 +10490,7 @@
10333
10490
  }
10334
10491
  },
10335
10492
  {
10493
+ "name": "list_test_plans_v1",
10336
10494
  "method": "GET",
10337
10495
  "path": "/api/v1/projects/{project_id}/test-plans",
10338
10496
  "mode": "read",
@@ -10402,6 +10560,7 @@
10402
10560
  }
10403
10561
  },
10404
10562
  {
10563
+ "name": "list_workspace_fields_v2",
10405
10564
  "method": "GET",
10406
10565
  "path": "/api/v1/admin-v2/settings/fields",
10407
10566
  "mode": "read",
@@ -10464,6 +10623,7 @@
10464
10623
  }
10465
10624
  },
10466
10625
  {
10626
+ "name": "merge_tags_v1",
10467
10627
  "method": "POST",
10468
10628
  "path": "/api/v1/projects/{project_id}/tags/merge",
10469
10629
  "mode": "write",
@@ -10512,6 +10672,7 @@
10512
10672
  }
10513
10673
  },
10514
10674
  {
10675
+ "name": "move_folder_v1",
10515
10676
  "method": "POST",
10516
10677
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/mv",
10517
10678
  "mode": "write",
@@ -10618,6 +10779,7 @@
10618
10779
  }
10619
10780
  },
10620
10781
  {
10782
+ "name": "rename_folder_v1",
10621
10783
  "method": "POST",
10622
10784
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/rename",
10623
10785
  "mode": "write",
@@ -10691,6 +10853,7 @@
10691
10853
  }
10692
10854
  },
10693
10855
  {
10856
+ "name": "reorder_folders",
10694
10857
  "method": "PATCH",
10695
10858
  "path": "/api/v1/projects/{project_id}/folders/reorder",
10696
10859
  "mode": "write",
@@ -10770,6 +10933,7 @@
10770
10933
  }
10771
10934
  },
10772
10935
  {
10936
+ "name": "reorder_test_cases_by_folder_v1",
10773
10937
  "method": "PATCH",
10774
10938
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/reorder",
10775
10939
  "mode": "write",
@@ -10864,6 +11028,7 @@
10864
11028
  }
10865
11029
  },
10866
11030
  {
11031
+ "name": "resolve_duplicate_v1",
10867
11032
  "method": "POST",
10868
11033
  "path": "/api/v1/projects/{project_id}/ai-duplicates",
10869
11034
  "mode": "write",
@@ -10930,6 +11095,7 @@
10930
11095
  }
10931
11096
  },
10932
11097
  {
11098
+ "name": "restore_history_v1",
10933
11099
  "method": "POST",
10934
11100
  "path": "/api/v1/projects/{project_id}/test-cases/{test_case_id}/histories/{history_id}/restore",
10935
11101
  "mode": "write",
@@ -10985,6 +11151,7 @@
10985
11151
  }
10986
11152
  },
10987
11153
  {
11154
+ "name": "search_duplicates_v1",
10988
11155
  "method": "POST",
10989
11156
  "path": "/api/v1/projects/{project_id}/ai-duplicates/search-v2",
10990
11157
  "mode": "read",
@@ -11037,6 +11204,7 @@
11037
11204
  }
11038
11205
  },
11039
11206
  {
11207
+ "name": "search_group_tags",
11040
11208
  "method": "GET",
11041
11209
  "path": "/api/v1/group/{entity_type}/tags",
11042
11210
  "mode": "read",
@@ -11086,6 +11254,7 @@
11086
11254
  }
11087
11255
  },
11088
11256
  {
11257
+ "name": "search_project_entities",
11089
11258
  "method": "GET",
11090
11259
  "path": "/api/v1/projects/{project_id}/{entity}/search",
11091
11260
  "mode": "read",
@@ -11172,6 +11341,7 @@
11172
11341
  }
11173
11342
  },
11174
11343
  {
11344
+ "name": "search_project_entities_v2",
11175
11345
  "method": "POST",
11176
11346
  "path": "/api/v1/projects/{project_id}/{entity}/search-v2",
11177
11347
  "mode": "read",
@@ -11412,6 +11582,9 @@
11412
11582
  }
11413
11583
  ],
11414
11584
  "intent": "Search for entities within a project (v2 - POST with body)",
11585
+ "guidance": [
11586
+ "The general way to find cases by attribute. Ask for a large page when collecting ids to feed into another call, so the follow-up gets the whole set rather than the first page."
11587
+ ],
11415
11588
  "shape": "discovered",
11416
11589
  "max_page_size": 100,
11417
11590
  "paginated": true,
@@ -11446,6 +11619,7 @@
11446
11619
  }
11447
11620
  },
11448
11621
  {
11622
+ "name": "search_project_users",
11449
11623
  "method": "GET",
11450
11624
  "path": "/api/v1/projects/{project_id}/users/search",
11451
11625
  "mode": "read",
@@ -11501,6 +11675,7 @@
11501
11675
  }
11502
11676
  },
11503
11677
  {
11678
+ "name": "search_test_case_tags",
11504
11679
  "method": "GET",
11505
11680
  "path": "/api/v1/projects/{project_id}/test-case/tags/search",
11506
11681
  "mode": "read",
@@ -11547,6 +11722,7 @@
11547
11722
  }
11548
11723
  },
11549
11724
  {
11725
+ "name": "search_test_cases_by_folder_v1",
11550
11726
  "method": "GET",
11551
11727
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/search",
11552
11728
  "mode": "read",
@@ -11634,6 +11810,7 @@
11634
11810
  }
11635
11811
  },
11636
11812
  {
11813
+ "name": "send_report_email_now_v1",
11637
11814
  "method": "POST",
11638
11815
  "path": "/api/v1/projects/{project_id}/reports/{report_id}/send_email_now",
11639
11816
  "mode": "write",
@@ -11685,6 +11862,7 @@
11685
11862
  }
11686
11863
  },
11687
11864
  {
11865
+ "name": "undo_remove_folder",
11688
11866
  "method": "POST",
11689
11867
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/undo-rm",
11690
11868
  "mode": "write",
@@ -11753,6 +11931,7 @@
11753
11931
  }
11754
11932
  },
11755
11933
  {
11934
+ "name": "unlink_test_runs_from_test_plan",
11756
11935
  "method": "POST",
11757
11936
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}/test-runs/unlink",
11758
11937
  "mode": "write",
@@ -11803,6 +11982,7 @@
11803
11982
  }
11804
11983
  },
11805
11984
  {
11985
+ "name": "update_custom_field_dataset_option_v2",
11806
11986
  "method": "POST",
11807
11987
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}/options/{option_id}/update",
11808
11988
  "mode": "write",
@@ -11869,6 +12049,7 @@
11869
12049
  }
11870
12050
  },
11871
12051
  {
12052
+ "name": "update_custom_field_dataset_project_mapping_v2",
11872
12053
  "method": "POST",
11873
12054
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/datasets/{dataset_id}/project-mappings/update",
11874
12055
  "mode": "write",
@@ -11932,6 +12113,7 @@
11932
12113
  }
11933
12114
  },
11934
12115
  {
12116
+ "name": "update_custom_field_definition_v2",
11935
12117
  "method": "POST",
11936
12118
  "path": "/api/v1/admin-v2/settings/custom-fields/{custom_fields_id}/update",
11937
12119
  "mode": "write",
@@ -12002,6 +12184,7 @@
12002
12184
  }
12003
12185
  },
12004
12186
  {
12187
+ "name": "update_dataset",
12005
12188
  "method": "PUT",
12006
12189
  "path": "/api/v1/projects/{project_id}/datasets/{uuid}",
12007
12190
  "mode": "write",
@@ -12110,6 +12293,7 @@
12110
12293
  }
12111
12294
  },
12112
12295
  {
12296
+ "name": "update_exploratory_session",
12113
12297
  "method": "PATCH",
12114
12298
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}",
12115
12299
  "mode": "write",
@@ -12286,6 +12470,7 @@
12286
12470
  }
12287
12471
  },
12288
12472
  {
12473
+ "name": "update_exploratory_session_log",
12289
12474
  "method": "PATCH",
12290
12475
  "path": "/api/v1/projects/{project_id}/exploratory-sessions/{session_id}/logs/{log_id}",
12291
12476
  "mode": "write",
@@ -12405,6 +12590,7 @@
12405
12590
  }
12406
12591
  },
12407
12592
  {
12593
+ "name": "update_filter",
12408
12594
  "method": "POST",
12409
12595
  "path": "/api/v1/projects/{project_id}/filter/{filter_id}",
12410
12596
  "mode": "write",
@@ -12488,6 +12674,7 @@
12488
12674
  }
12489
12675
  },
12490
12676
  {
12677
+ "name": "update_latest_test_result_for_test_case",
12491
12678
  "method": "PATCH",
12492
12679
  "path": "/api/v1/projects/{project_id}/test-runs/{test_run_id}/test-cases/{test_case_id}/test-results",
12493
12680
  "mode": "write",
@@ -12650,6 +12837,7 @@
12650
12837
  }
12651
12838
  },
12652
12839
  {
12840
+ "name": "update_project_settings",
12653
12841
  "method": "POST",
12654
12842
  "path": "/api/v1/projects/{project_id}/settings",
12655
12843
  "mode": "write",
@@ -12696,6 +12884,7 @@
12696
12884
  }
12697
12885
  },
12698
12886
  {
12887
+ "name": "update_report",
12699
12888
  "method": "PATCH",
12700
12889
  "path": "/api/v1/projects/{project_id}/reports/{report_id}",
12701
12890
  "mode": "write",
@@ -12998,6 +13187,7 @@
12998
13187
  }
12999
13188
  },
13000
13189
  {
13190
+ "name": "update_shared_step_v1",
13001
13191
  "method": "PATCH",
13002
13192
  "path": "/api/v1/projects/{project_id}/shared-steps/{shared_step_id}",
13003
13193
  "mode": "write",
@@ -13084,6 +13274,7 @@
13084
13274
  }
13085
13275
  },
13086
13276
  {
13277
+ "name": "update_test_plan_v1",
13087
13278
  "method": "POST",
13088
13279
  "path": "/api/v1/projects/{project_id}/test-plans/{test_plan_id}/update",
13089
13280
  "mode": "write",
@@ -13219,6 +13410,7 @@
13219
13410
  }
13220
13411
  },
13221
13412
  {
13413
+ "name": "upload_a_i_attachments",
13222
13414
  "method": "POST",
13223
13415
  "path": "/api/v1/projects/{project_id}/generic/attachments/ai_uploads",
13224
13416
  "mode": "write",
@@ -13255,6 +13447,7 @@
13255
13447
  }
13256
13448
  },
13257
13449
  {
13450
+ "name": "upload_generic_attachments",
13258
13451
  "method": "POST",
13259
13452
  "path": "/api/v1/projects/{project_id}/generic/attachments",
13260
13453
  "mode": "write",
@@ -13291,6 +13484,7 @@
13291
13484
  }
13292
13485
  },
13293
13486
  {
13487
+ "name": "upload_test_case_attachments_v1",
13294
13488
  "method": "POST",
13295
13489
  "path": "/api/v1/projects/{project_id}/folder/{folder_id}/test-cases/{test_case_id}/attachments",
13296
13490
  "mode": "write",
@@ -13358,6 +13552,7 @@
13358
13552
  }
13359
13553
  },
13360
13554
  {
13555
+ "name": "user_workload_drilldown",
13361
13556
  "method": "POST",
13362
13557
  "path": "/api/v1/projects/{project_id}/reports/{report_id}/drilldown",
13363
13558
  "mode": "read",
@@ -17043,13 +17238,13 @@
17043
17238
  "type": "string",
17044
17239
  "format": "uri",
17045
17240
  "description": "Pre-signed S3 URL for viewing (inline, ~26 min expiry)",
17046
- "example": "https://example.com/media/genric/1/2921471/86de8094..."
17241
+ "example": "https://example.com/media/1/2921471/86de8094..."
17047
17242
  },
17048
17243
  "download_url": {
17049
17244
  "type": "string",
17050
17245
  "format": "uri",
17051
17246
  "description": "Pre-signed S3 URL for downloading (attachment, ~26 min expiry)",
17052
- "example": "https://example.com/media/genric/1/2921471/86de8094..."
17247
+ "example": "https://example.com/media/1/2921471/86de8094..."
17053
17248
  },
17054
17249
  "content_type": {
17055
17250
  "type": "string",
@@ -18160,7 +18355,7 @@
18160
18355
  },
18161
18356
  "selection": {
18162
18357
  "type": "object",
18163
- "description": "the primary project's persisted folder-structured test-case selection (with select_all / per-folder flags + unique_test_case_count), in the same shape as the test-run edit/selection endpoint. `{}` when the report has no saved selection for the primary project. Used by the Edit dialog to re-check saved test cases (including folder/project-level select_all, which the flat ids cannot represent).",
18358
+ "description": "The primary project's persisted folder-structured test-case selection (with select_all / per-folder flags + unique_test_case_count), in the same shape as the test-run edit/selection endpoint. `{}` when the report has no saved selection for the primary project. Used by the Edit dialog to re-check saved test cases (including folder/project-level select_all, which the flat ids cannot represent).",
18164
18359
  "example": {
18165
18360
  "select_all": false,
18166
18361
  "folders": {
@@ -18177,7 +18372,7 @@
18177
18372
  },
18178
18373
  "shared_selection": {
18179
18374
  "type": "object",
18180
- "description": "per-project folder-structured selection for the report's non-primary projects, keyed by project id ({ \"<project_id>\": <selection> }). Present only for cross-project Test Case Activity reports; `{}` otherwise.",
18375
+ "description": "Per-project folder-structured selection for the report's non-primary projects, keyed by project id ({ \"<project_id>\": <selection> }). Present only for cross-project Test Case Activity reports; `{}` otherwise.",
18181
18376
  "example": {
18182
18377
  "10209": {
18183
18378
  "select_all": true,
@@ -19090,6 +19285,15 @@
19090
19285
  ],
19091
19286
  "capabilities": [
19092
19287
  "list_activity_events_v1"
19288
+ ],
19289
+ "key_facts": [
19290
+ "READ-ONLY by design. Activity events are emitted by the system as a side effect of other writes — there is no create, update, or delete, and there never will be. If asked to edit or remove an audit entry, say it is immutable.",
19291
+ "HARD 15-DAY WINDOW. The server clamps every query to the last 15 days no matter what you ask for. For anything older, say the history is not retrievable through the API and point to the Test Management UI — do NOT report 'no activity' for an older period, which would be a false negative.",
19292
+ "CURSOR pagination, not page numbers. Follow pagination.next_cursor and stop when pagination.has_next_page is false. There is no p param and no info.count, so you CANNOT state a total number of events or jump to a page.",
19293
+ "Not project-scoped in the path — it is group-wide. Pass project_id as a QUERY param to narrow it to one project.",
19294
+ "starred_only=true restricts to the caller's starred projects. When they have none the response is {events: [], no_starred_projects: true} — that means 'no starred projects', NOT 'no activity'. Check for that flag before reporting emptiness.",
19295
+ "The response carries a projects map (project id → metadata) so you can resolve the project an event refers to without extra reads.",
19296
+ "Gated by a group feature flag. If the call is refused, report that the activity feed isn't enabled for the group rather than that there is no activity."
19093
19297
  ]
19094
19298
  },
19095
19299
  "attachment": {
@@ -19121,6 +19325,10 @@
19121
19325
  "upload_a_i_attachments",
19122
19326
  "upload_generic_attachments",
19123
19327
  "upload_test_case_attachments_v1"
19328
+ ],
19329
+ "key_facts": [
19330
+ "ai_uploads uploads a file as AI CONTEXT (restricted types, smaller cap) for seeding case content — see create-test-case.",
19331
+ "Each blob/attachment row carries an integer id and a url (the file's location) — read the file from that url; there is no dedicated download endpoint."
19124
19332
  ]
19125
19333
  },
19126
19334
  "configuration": {
@@ -19189,6 +19397,15 @@
19189
19397
  "update_custom_field_dataset_option_v2",
19190
19398
  "update_custom_field_dataset_project_mapping_v2",
19191
19399
  "update_custom_field_definition_v2"
19400
+ ],
19401
+ "key_facts": [
19402
+ "A field applies to ONE entity type (TestCase | TestResult | TestPlan) — pick the matching entity_type; project scope is via the integer project id in the path.",
19403
+ "A definition write is workspace-wide, not project-scoped: it affects every project the field's datasets link to. Say which projects are affected BEFORE writing.",
19404
+ "field_name IS editable via .../update; field_type is SILENTLY immutable — sending a new type returns 200 and changes nothing. Never report a type change as done; a real one means delete-and-recreate, which destroys every stored value.",
19405
+ "Update is a full REPLACE: field_name + field_type + is_required must all be present (missing is_required = 400, missing field_name = 500). Read the field first and resend the whole set.",
19406
+ "The project-mapping endpoint uses link_projects / unlink_projects — NOT the linked_projects of the create bodies. The wrong spelling is silently dropped: 200, nothing changed.",
19407
+ "Three operations destroy stored data across every linked project: deleting a field, deleting an option, and unlinking a project. There is no bin. Count and name the affected projects before asking to proceed.",
19408
+ "Don't confuse a DEFINITION with a VALUE. A definition is which attributes exist; a value is what one case holds. Only values are writable here, through the test-case create/update body's custom_fields."
19192
19409
  ]
19193
19410
  },
19194
19411
  "dataset": {
@@ -19222,6 +19439,9 @@
19222
19439
  "import_dataset_c_s_v",
19223
19440
  "list_datasets",
19224
19441
  "update_dataset"
19442
+ ],
19443
+ "key_facts": [
19444
+ "Team Pro plan gated: without it EVERY dataset endpoint returns 422 \"Feature not available\". A 422 here means NOT-ENTITLED, not a bad payload — say so and stop, don't retry with a different body."
19225
19445
  ]
19226
19446
  },
19227
19447
  "duplicate": {
@@ -19254,6 +19474,13 @@
19254
19474
  "list_duplicates_v1",
19255
19475
  "resolve_duplicate_v1",
19256
19476
  "search_duplicates_v1"
19477
+ ],
19478
+ "key_facts": [
19479
+ "There is NO create. Duplicate suggestions are produced by the dedupe pipeline; a caller cannot author one.",
19480
+ "Only status=suggested can be read or resolved; already-merged/archived/discarded suggestions return 404. A 404 here usually means 'already handled', not 'never existed'.",
19481
+ "source_tc works ONLY for status=merged, and the snapshot may legitimately be absent (404 with error 'Source test case snapshot not available'). Treat that as 'not retained', not as a retryable error.",
19482
+ "This list family pages with `page`, not the `p` used elsewhere in the profile.",
19483
+ "Dedupe REVIEW is exposed here; TCG test-case GENERATION is not. Don't offer to generate cases."
19257
19484
  ]
19258
19485
  },
19259
19486
  "exploratory_session": {
@@ -19300,6 +19527,12 @@
19300
19527
  "list_exploratory_sessions",
19301
19528
  "update_exploratory_session",
19302
19529
  "update_exploratory_session_log"
19530
+ ],
19531
+ "key_facts": [
19532
+ "session_id and log_id are plain INTEGERS; the parent project takes the INTEGER project id (v1).",
19533
+ "Logs hold rich-text HTML sanitised on write (off-project anchor/image links stripped); defects are the issues linked to the session.",
19534
+ "Clone runs async when the session has many logs → re-fetch to confirm (see async-jobs).",
19535
+ "No convert endpoint: turn session notes into test cases via the create-test-case flow."
19303
19536
  ]
19304
19537
  },
19305
19538
  "filter": {
@@ -19336,6 +19569,10 @@
19336
19569
  "get_filter",
19337
19570
  "list_filters",
19338
19571
  "update_filter"
19572
+ ],
19573
+ "key_facts": [
19574
+ "A saved filter view persists a reusable filter: { name, entity, filters, is_project_level }. entity = testcase | testplan | testrun | exploratory_session; filter_id is an integer.",
19575
+ "is_project_level scopes the view to the whole project vs. just the creator."
19339
19576
  ]
19340
19577
  },
19341
19578
  "folder": {
@@ -19372,6 +19609,10 @@
19372
19609
  "rename_folder_v1",
19373
19610
  "reorder_folders",
19374
19611
  "undo_remove_folder"
19612
+ ],
19613
+ "key_facts": [
19614
+ "Folder ids are plain INTEGERS (e.g. 54) — never FL-… strings. Nesting is via parent_id (integer, null = root).",
19615
+ "mv cross-project and copy run ASYNC ({ success, async, unique_id }) — confirm by re-reading the destination (see async-jobs)."
19375
19616
  ]
19376
19617
  },
19377
19618
  "project": {
@@ -19475,6 +19716,15 @@
19475
19716
  "send_report_email_now_v1",
19476
19717
  "update_report",
19477
19718
  "user_workload_drilldown"
19719
+ ],
19720
+ "key_facts": [
19721
+ "report_id and schedule_id are INTEGERS; the parent project takes the INTEGER project id (v1).",
19722
+ "report_type on create/update is a DISPLAY NAME and the set is CLOSED — exactly these nine: Test Run Summary, Test Run Detailed Report, Test Plan Summary, Requirement Traceability Report, Test Case Activity, Exploratory Session Summary, User Workload Report, Defects Summary, Defects Detailed Report. Never invent one and never substitute a neighbouring type: if the user asks for activity, it is 'Test Case Activity', not 'Test Run Summary'.",
19723
+ "Defects Summary and Defects Detailed Report are accepted on create but have no data branch — they always read back report_data: null. For defect counts use Test Run Summary's issues_by_priority / issues_by_status sections instead.",
19724
+ "null inside report_data means NOT COMPUTED, not 'no data'. A Test Case Activity report fills its headline counts on a bare read; a Test Run Summary leaves issues_data / test_run_status / test_cases_status / issues_by_priority / issues_by_status null until you name them in sections. Never conclude 'there is no defect or status data' from a null — request the section; an empty payload like {total: 0} is a real finding, null is not. And never answer a 400 on sections by retreating to a bare read.",
19725
+ "*_drilldown sections return PAGINATED ROWS, not aggregates — never tally rows into a count; read the aggregate section or report_data.",
19726
+ "frequency + frequency_details travel together or not at all; omit both for an unscheduled on-demand report. weekly needs day as a lowercase name, monthly needs day as an integer 1-28. There is no 'once'. report_timeframe: custom REQUIRES custom_date_range.",
19727
+ "\"Understand a report\" = fetch the report + its section/widget data and summarise agent-side; the API returns structured data, not narrative."
19478
19728
  ]
19479
19729
  },
19480
19730
  "result": {
@@ -19507,6 +19757,11 @@
19507
19757
  "delete_test_result_v1",
19508
19758
  "get_test_results_for_test_case",
19509
19759
  "update_latest_test_result_for_test_case"
19760
+ ],
19761
+ "key_facts": [
19762
+ "Bodies are wrapped in test_result; set status by NAME (status) or id (status_id) — use a real configured status (see statuses-and-states).",
19763
+ "bulk-delete SUCCEEDS PARTIALLY and still returns 200. Authorisation is per id (author OR project admin); ids the caller may not delete come back in `skipped` — and BOTH lists are nested under a top-level `result` key, with `skipped` holding OBJECTS ({id, reason}) not bare ids, so read result.deleted_ids / result.skipped. Not as an error. ALWAYS compare deleted_ids against what you asked for and report the skipped ids — treating 200 as 'all deleted' will misreport.",
19764
+ "bulk-delete needs a non-empty result_ids array (400 otherwise) of at most 300 ids (422 beyond) — batch bigger sets yourself."
19510
19765
  ]
19511
19766
  },
19512
19767
  "shared_step": {
@@ -19534,6 +19789,10 @@
19534
19789
  "get_shared_steps_by_i_d_v1",
19535
19790
  "get_shared_steps_v1",
19536
19791
  "update_shared_step_v1"
19792
+ ],
19793
+ "key_facts": [
19794
+ "A shared step is embedded by MANY test cases, so editing or deleting it changes every one of them at once. That is the point of shared steps, but it also means a delete is a wide blast radius — say how it is used before changing it.",
19795
+ "Reference a shared step from a test case's steps via shared_step_id in test_case_steps — see test-case-authoring."
19537
19796
  ]
19538
19797
  },
19539
19798
  "tag": {
@@ -19569,6 +19828,12 @@
19569
19828
  "merge_tags_v1",
19570
19829
  "search_group_tags",
19571
19830
  "search_test_case_tags"
19831
+ ],
19832
+ "key_facts": [
19833
+ "Tags are referenced by NAME in filters and on cases; the merge endpoint takes integer source_id/target_id, so resolve ids via the tag reads first.",
19834
+ "That body MUST carry custom_fields (send {} when not changing any) — omitting it returns 500 'undefined method each for nil', even though the server's validator lists it as optional.",
19835
+ "tags/merge is admin-gated (tags_management flag) — may be unavailable for a group; degrade gracefully and say so.",
19836
+ "TAG-OBJECT WRITES ARE NOT EXPOSED. Renaming or deleting a tag project-wide is deliberately out of this profile: the endpoints exist but sit behind the tags_management flag that most groups do not have, and tagging is always driven through the ENTITY. If asked to rename or delete a tag, say it is not available here and point to the Test Management UI."
19572
19837
  ]
19573
19838
  },
19574
19839
  "test_case": {
@@ -19632,6 +19897,14 @@
19632
19897
  "reorder_test_cases_by_folder_v1",
19633
19898
  "search_project_entities_v2",
19634
19899
  "search_test_cases_by_folder_v1"
19900
+ ],
19901
+ "key_facts": [
19902
+ "A filter is a (key, value) pair and each half fails silently: an unknown KEY is dropped (you get the whole project with success: true), and a wrong-form VALUE matches nothing (count: 0, also success: true). So resolve both — never guess either — and see pagination-and-filtering for the key table and each value's source.",
19903
+ "A surprising count means check the FORM, not try another value: 0 on a value the user plainly meant = wrong form, so go resolve ids; filtered count == unfiltered count = the key was dropped. Never take either count from a per_page: 1 call — it returns count: 1 regardless of the real total.",
19904
+ "required.fields ADDS joined columns; it does NOT slim a row, so naming fields never buys more rows per page. required.fields=[\"count\"] ALONE is the only value that changes the response.",
19905
+ "The compact response has a DIFFERENT envelope: no `success` key ({test_cases, info, filter_details} only — absence of success is NOT failure), info.page_size echoes the server ceiling not your per_page, and filter_details is {} so confirm filter intent before the call.",
19906
+ "READING ROWS to show a user: leave per_page at its default and walk p until info.next is null. p advances by per_page and not by what came back, so paging over an incomplete read never recovers the gap.",
19907
+ "Paths take INTEGER ids (project + folder + case). The case's TC-NNN comes back as data.test_case.identifier on any read; folder ids are plain integers."
19635
19908
  ]
19636
19909
  },
19637
19910
  "test_plan": {
@@ -19674,6 +19947,18 @@
19674
19947
  "list_test_plans_v1",
19675
19948
  "unlink_test_runs_from_test_plan",
19676
19949
  "update_test_plan_v1"
19950
+ ],
19951
+ "key_facts": [
19952
+ "Paths take the INTEGER plan id. The prefixed identifier (TP-NNN / STP-NNN) is for display; never put it in a v1 path.",
19953
+ "The read detail has NO data wrapper: the plan sits under a top-level test_plan key, and test_plan.identifier is the TP-NNN / STP-NNN.",
19954
+ "Sub-plans are HIDDEN by default in the list. Without include_sub_plans=true you see only top-level plans, so a sub-plan the user named will look missing.",
19955
+ "name IS REQUIRED ON EVERY PLAN UPDATE, including one that only touches test_runs. Omit it and the call is rejected with 400 {success: false, error: 'Invalid Update Params'} however valid the rest of the body is — the server's edit branch is gated on name being present. Read the plan first and echo its current name back unchanged. Only a pure plan_status transition and a reviewers-only edit are exempt. Verified live: {test_plan: {test_runs: [198]}} 400s; adding name makes the identical call succeed.",
19956
+ "Run ids in test_runs are the INTEGER uuid from a run read — NOT the run's id field, which is the TR-NNN string on every run endpoint (list, plan's run list, single detail alike). Identifiers are forwarded to the upstream service uncoerced and fail upstream (observed 502 Upstream service error). Take uuid, never id.",
19957
+ "Linking a run MOVES it: a run belongs to at most one plan, so linking silently unlinks it from the plan that held it, with nothing in the 200 to say so. Read the runs' current membership first and tell the user which plans will lose runs. Verified live.",
19958
+ "test_runs accepts an id array OR a bulk-selection object {select_all, de_selected_ids, search_query}. select_all means 'the newest active runs', NOT 'everything matching' — and `filters` is accepted but SILENTLY IGNORED, so a filtered select_all links the whole recent set. Narrow with search_query (name/identifier substring) or send explicit ids. Verified live.",
19959
+ "bulk-archive / bulk-retrieve go ASYNC above the bulk threshold and return {success, async: true, unique_id} — the plans are NOT changed yet. Re-read to confirm; see async-jobs.",
19960
+ "execution-trend is scoped by EXACTLY ONE of test_plan_id / test_run_id. Both → 400 'Provide either test_plan_id or test_run_id, not both'; neither → 400 'test_plan_id or test_run_id is required'.",
19961
+ "execution-trend and linked-sessions-chart-data return chart DATA. There is no insights-widget object to create, update, or delete in this profile."
19677
19962
  ]
19678
19963
  },
19679
19964
  "test_run": {
@@ -19723,6 +20008,13 @@
19723
20008
  "get_test_runs_form_fields_v1",
19724
20009
  "get_test_runs_selection",
19725
20010
  "get_test_runs_v1"
20011
+ ],
20012
+ "key_facts": [
20013
+ "Only test_case_ids / selection / shared_selection put cases in a run. `filters` and `dynamic_filter` are a forward-sync rule, NOT a selection: a create carrying only `filters` returns 200 with ZERO cases, and sets is_dynamic: true even though you did not ask. Verified live.",
20014
+ "Dynamic runs match on nine fields only: priority, status, category, owner, automation_status, automation_state, folder, tags, issues. created_at/updated_at are stored and echoed on read but NEVER matched, so a 'last 7 days' dynamic run drops the date window and over-collects forever. Create runs static unless the user explicitly asks for sync.",
20015
+ "test_run.run_state is MANDATORY on create and edit (new_run | in_progress | under_review | rejected | done | closed). It is validated before the selection, so a bare 400 'invalid data' means a bad test_run field — NOT a bad selection shape.",
20016
+ "A run's `id` FIELD is the TR-NNN STRING, not the integer — on the project list, a plan's linked-run list and the single-run detail alike. The integer lives in `uuid` ({id: 'TR-90', uuid: 198}). Paths tolerate either form, which hides this; bodies and UI paths do not. Carrying `id` into a test plan's test_runs array sends a string that reaches the upstream service uncoerced and 502s there. Take `uuid` whenever a run id leaves a read.",
20017
+ "Full lifecycle is exposed: create, edit, assign, bulk-assign cases, bulk-edit results, clone, close, delete."
19726
20018
  ]
19727
20019
  },
19728
20020
  "user": {
@@ -19755,6 +20047,10 @@
19755
20047
  "capabilities": [
19756
20048
  "get_group_users_v2_v1",
19757
20049
  "search_project_users"
20050
+ ],
20051
+ "key_facts": [
20052
+ "WRITE BODIES take the integer: test_case.owner, test_run.owner/assignee_id — send 14.",
20053
+ "An unrecognised q key is dropped, not rejected — the server silently omits that condition and returns an unfiltered set that looks like a successful filter. Use the documented key names verbatim."
19758
20054
  ]
19759
20055
  },
19760
20056
  "version": {
@@ -19786,6 +20082,11 @@
19786
20082
  "get_test_case_history_diff_v1",
19787
20083
  "get_test_case_history_v1",
19788
20084
  "restore_history_v1"
20085
+ ],
20086
+ "key_facts": [
20087
+ "Each record carries source (create/update), modified_fields, a modified map (per-field old/new), user and created_at.",
20088
+ "diff (compare two versions) and restore require a PAID plan; listing + single-version reads work otherwise. Degrade gracefully.",
20089
+ "A plain-language diff summary is agent-side — read the field deltas and describe them; the API returns structured data, not prose."
19789
20090
  ]
19790
20091
  }
19791
20092
  }