@stablebaseline/sdk 0.1.0 → 0.2.0
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.
- package/dist/index.d.cts +1792 -25
- package/dist/index.d.ts +1792 -25
- package/openapi.json +2136 -231
- package/package.json +6 -4
- package/src/types.generated.ts +1792 -25
package/openapi.json
CHANGED
|
@@ -700,7 +700,7 @@
|
|
|
700
700
|
"description": "Return the calling user's identity (user_id, display_name, full_name, email, avatar_url). Use this when the user says 'me' / 'mine' / 'I' so you can resolve to their UUID before passing it to tools like updateImprovement(owner_id=…) or filtering by owner. Read-only.",
|
|
701
701
|
"operationId": "getCurrentUser",
|
|
702
702
|
"tags": [
|
|
703
|
-
"
|
|
703
|
+
"members"
|
|
704
704
|
],
|
|
705
705
|
"requestBody": {
|
|
706
706
|
"required": false,
|
|
@@ -791,10 +791,10 @@
|
|
|
791
791
|
"/tools/listAssignablePrincipals": {
|
|
792
792
|
"post": {
|
|
793
793
|
"summary": "listAssignablePrincipals",
|
|
794
|
-
"description": "Server-side searchable, paginated list of USERS and TEAMS that can be assigned as the owner of an improvement/task in a project. Returns two arrays — `users` (with user_id, display_name, email, avatar_url, has_explicit_permission) and `teams` (with team_id, name, member_count, has_explicit_permission). Sources: project-level grants + workspace members + organization members + members of teams granted access. Use BEFORE updateImprovement/updateTask when you need
|
|
794
|
+
"description": "Server-side searchable, paginated list of USERS and TEAMS that can be assigned as the owner of an improvement/task in a project — and the canonical source for resolving a person's user_id when @-mentioning them in a document. Returns two arrays — `users` (with user_id, display_name, email, avatar_url, has_explicit_permission) and `teams` (with team_id, name, member_count, has_explicit_permission). Sources: project-level grants + workspace members + organization members + members of teams granted access. Use BEFORE: (1) updateImprovement/updateTask when you need an `owner_id` (kind='user') or `owner_team_id` (kind='team'); (2) inserting a `<!-- REFERENCE: {\"type\":\"user\",\"id\":\"…\",\"label\":\"…\"} -->` mention in document content via createDocument / editDocument / findAndReplaceTextInDocument. Supports `q` for ILIKE search on names/emails (users) or team names. Pass `kind='user'` or `kind='team'` to scope to a single section, or 'all' (default) for both. Pagination via limit (1-100, default 20) + offset.",
|
|
795
795
|
"operationId": "listAssignablePrincipals",
|
|
796
796
|
"tags": [
|
|
797
|
-
"
|
|
797
|
+
"members"
|
|
798
798
|
],
|
|
799
799
|
"requestBody": {
|
|
800
800
|
"required": false,
|
|
@@ -1957,6 +1957,124 @@
|
|
|
1957
1957
|
}
|
|
1958
1958
|
}
|
|
1959
1959
|
},
|
|
1960
|
+
"/tools/reorderFolders": {
|
|
1961
|
+
"post": {
|
|
1962
|
+
"summary": "reorderFolders",
|
|
1963
|
+
"description": "Batch-reorder folders within a parent (or project root) by setting sibling positions. Pass [{folderId, position}, ...] where position is a non-negative integer; usually you renumber siblings sequentially as 0, 1, 2…. To MOVE a folder to a different parent and set its position there, use updateFolder({parentId, position}) instead.",
|
|
1964
|
+
"operationId": "reorderFolders",
|
|
1965
|
+
"tags": [
|
|
1966
|
+
"folders"
|
|
1967
|
+
],
|
|
1968
|
+
"requestBody": {
|
|
1969
|
+
"required": false,
|
|
1970
|
+
"content": {
|
|
1971
|
+
"application/json": {
|
|
1972
|
+
"schema": {
|
|
1973
|
+
"type": "object",
|
|
1974
|
+
"properties": {
|
|
1975
|
+
"items": {
|
|
1976
|
+
"type": "array",
|
|
1977
|
+
"description": "List of folder position updates. All folders must belong to the same project.",
|
|
1978
|
+
"items": {
|
|
1979
|
+
"type": "object",
|
|
1980
|
+
"properties": {
|
|
1981
|
+
"folderId": {
|
|
1982
|
+
"type": "string"
|
|
1983
|
+
},
|
|
1984
|
+
"position": {
|
|
1985
|
+
"type": "number"
|
|
1986
|
+
}
|
|
1987
|
+
},
|
|
1988
|
+
"required": [
|
|
1989
|
+
"folderId",
|
|
1990
|
+
"position"
|
|
1991
|
+
]
|
|
1992
|
+
},
|
|
1993
|
+
"minItems": 1
|
|
1994
|
+
}
|
|
1995
|
+
},
|
|
1996
|
+
"required": [
|
|
1997
|
+
"items"
|
|
1998
|
+
]
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
2001
|
+
}
|
|
2002
|
+
},
|
|
2003
|
+
"responses": {
|
|
2004
|
+
"200": {
|
|
2005
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
2006
|
+
"content": {
|
|
2007
|
+
"application/json": {
|
|
2008
|
+
"schema": {
|
|
2009
|
+
"type": "object",
|
|
2010
|
+
"additionalProperties": true
|
|
2011
|
+
}
|
|
2012
|
+
}
|
|
2013
|
+
}
|
|
2014
|
+
},
|
|
2015
|
+
"400": {
|
|
2016
|
+
"description": "Validation error.",
|
|
2017
|
+
"content": {
|
|
2018
|
+
"application/json": {
|
|
2019
|
+
"schema": {
|
|
2020
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2021
|
+
}
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
},
|
|
2025
|
+
"401": {
|
|
2026
|
+
"description": "Missing or invalid credentials.",
|
|
2027
|
+
"content": {
|
|
2028
|
+
"application/json": {
|
|
2029
|
+
"schema": {
|
|
2030
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
}
|
|
2034
|
+
},
|
|
2035
|
+
"403": {
|
|
2036
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
2037
|
+
"content": {
|
|
2038
|
+
"application/json": {
|
|
2039
|
+
"schema": {
|
|
2040
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2041
|
+
}
|
|
2042
|
+
}
|
|
2043
|
+
}
|
|
2044
|
+
},
|
|
2045
|
+
"404": {
|
|
2046
|
+
"description": "Resource not found.",
|
|
2047
|
+
"content": {
|
|
2048
|
+
"application/json": {
|
|
2049
|
+
"schema": {
|
|
2050
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2051
|
+
}
|
|
2052
|
+
}
|
|
2053
|
+
}
|
|
2054
|
+
},
|
|
2055
|
+
"422": {
|
|
2056
|
+
"description": "Body did not match the tool's input schema.",
|
|
2057
|
+
"content": {
|
|
2058
|
+
"application/json": {
|
|
2059
|
+
"schema": {
|
|
2060
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2061
|
+
}
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
},
|
|
2065
|
+
"500": {
|
|
2066
|
+
"description": "Server error.",
|
|
2067
|
+
"content": {
|
|
2068
|
+
"application/json": {
|
|
2069
|
+
"schema": {
|
|
2070
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2071
|
+
}
|
|
2072
|
+
}
|
|
2073
|
+
}
|
|
2074
|
+
}
|
|
2075
|
+
}
|
|
2076
|
+
}
|
|
2077
|
+
},
|
|
1960
2078
|
"/tools/listDocuments": {
|
|
1961
2079
|
"post": {
|
|
1962
2080
|
"summary": "listDocuments",
|
|
@@ -2469,7 +2587,7 @@
|
|
|
2469
2587
|
"/tools/createDocument": {
|
|
2470
2588
|
"post": {
|
|
2471
2589
|
"summary": "createDocument",
|
|
2472
|
-
"description": "Create a document from CDMD markdown. Call getCdmdLanguageGuide first if unfamiliar with syntax. Do not include DIAGRAM/IMAGE markers — insert them after with dedicated tools.",
|
|
2590
|
+
"description": "Create a document from CDMD markdown. Call getCdmdLanguageGuide first if unfamiliar with syntax. Do not include DIAGRAM/IMAGE markers — insert them after with dedicated tools. Supports @-mentioning people: embed `<!-- REFERENCE: {\"type\":\"user\",\"id\":\"<user_uuid>\",\"label\":\"Name\"} -->` to notify a teammate. Use listAssignablePrincipals to look up the user_id from a name; mentions of users outside the project are silently dropped.",
|
|
2473
2591
|
"operationId": "createDocument",
|
|
2474
2592
|
"tags": [
|
|
2475
2593
|
"documents"
|
|
@@ -2493,6 +2611,10 @@
|
|
|
2493
2611
|
"cdmd": {
|
|
2494
2612
|
"type": "string"
|
|
2495
2613
|
},
|
|
2614
|
+
"position": {
|
|
2615
|
+
"type": "number",
|
|
2616
|
+
"description": "Sort position within the parent folder (or project root if no folderId). When omitted, the document is appended at the end."
|
|
2617
|
+
},
|
|
2496
2618
|
"changeSummary": {
|
|
2497
2619
|
"type": "string",
|
|
2498
2620
|
"description": "Version history summary."
|
|
@@ -2584,10 +2706,1867 @@
|
|
|
2584
2706
|
"/tools/editDocument": {
|
|
2585
2707
|
"post": {
|
|
2586
2708
|
"summary": "editDocument",
|
|
2587
|
-
"description": "Edit a document with line-based patches. Call getDocument first for line numbers and versionTimestamp. Call getCdmdLanguageGuide if unfamiliar with CDMD syntax. Do not edit DIAGRAM/IMAGE markers manually — use dedicated diagram/image tools.",
|
|
2709
|
+
"description": "Edit a document with line-based patches. Call getDocument first for line numbers and versionTimestamp. Call getCdmdLanguageGuide if unfamiliar with CDMD syntax. Do not edit DIAGRAM/IMAGE markers manually — use dedicated diagram/image tools. To @-mention a person in your patch, insert `<!-- REFERENCE: {\"type\":\"user\",\"id\":\"<user_uuid>\",\"label\":\"Name\"} -->`; look up the user_id via listAssignablePrincipals. Mentioned users are notified automatically.",
|
|
2588
2710
|
"operationId": "editDocument",
|
|
2589
2711
|
"tags": [
|
|
2590
|
-
"documents"
|
|
2712
|
+
"documents"
|
|
2713
|
+
],
|
|
2714
|
+
"requestBody": {
|
|
2715
|
+
"required": false,
|
|
2716
|
+
"content": {
|
|
2717
|
+
"application/json": {
|
|
2718
|
+
"schema": {
|
|
2719
|
+
"type": "object",
|
|
2720
|
+
"properties": {
|
|
2721
|
+
"documentId": {
|
|
2722
|
+
"type": "string"
|
|
2723
|
+
},
|
|
2724
|
+
"title": {
|
|
2725
|
+
"type": "string",
|
|
2726
|
+
"description": "New title."
|
|
2727
|
+
},
|
|
2728
|
+
"folderId": {
|
|
2729
|
+
"type": "string",
|
|
2730
|
+
"description": "Move to this folder."
|
|
2731
|
+
},
|
|
2732
|
+
"position": {
|
|
2733
|
+
"type": "number",
|
|
2734
|
+
"description": "Sort position within the parent folder. Use to reposition a single document. For batch sibling reorder, use reorderDocuments."
|
|
2735
|
+
},
|
|
2736
|
+
"versionTimestamp": {
|
|
2737
|
+
"type": "number",
|
|
2738
|
+
"description": "Version timestamp from getDocument() for optimistic locking."
|
|
2739
|
+
},
|
|
2740
|
+
"changeSummary": {
|
|
2741
|
+
"type": "string",
|
|
2742
|
+
"description": "Version history summary."
|
|
2743
|
+
},
|
|
2744
|
+
"patches": {
|
|
2745
|
+
"type": "array",
|
|
2746
|
+
"description": "Line-based patches. Can be empty if only updating title, folderId, or position.",
|
|
2747
|
+
"items": {
|
|
2748
|
+
"type": "object",
|
|
2749
|
+
"properties": {
|
|
2750
|
+
"startLine": {
|
|
2751
|
+
"type": "number",
|
|
2752
|
+
"description": "1-based start line."
|
|
2753
|
+
},
|
|
2754
|
+
"endLine": {
|
|
2755
|
+
"type": "number",
|
|
2756
|
+
"description": "1-based end line (inclusive)."
|
|
2757
|
+
},
|
|
2758
|
+
"replacement": {
|
|
2759
|
+
"type": "string",
|
|
2760
|
+
"description": "Replacement text. Empty string to delete lines."
|
|
2761
|
+
}
|
|
2762
|
+
},
|
|
2763
|
+
"required": [
|
|
2764
|
+
"startLine",
|
|
2765
|
+
"endLine",
|
|
2766
|
+
"replacement"
|
|
2767
|
+
]
|
|
2768
|
+
}
|
|
2769
|
+
}
|
|
2770
|
+
},
|
|
2771
|
+
"required": [
|
|
2772
|
+
"documentId",
|
|
2773
|
+
"versionTimestamp"
|
|
2774
|
+
]
|
|
2775
|
+
}
|
|
2776
|
+
}
|
|
2777
|
+
}
|
|
2778
|
+
},
|
|
2779
|
+
"responses": {
|
|
2780
|
+
"200": {
|
|
2781
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
2782
|
+
"content": {
|
|
2783
|
+
"application/json": {
|
|
2784
|
+
"schema": {
|
|
2785
|
+
"type": "object",
|
|
2786
|
+
"additionalProperties": true
|
|
2787
|
+
}
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
},
|
|
2791
|
+
"400": {
|
|
2792
|
+
"description": "Validation error.",
|
|
2793
|
+
"content": {
|
|
2794
|
+
"application/json": {
|
|
2795
|
+
"schema": {
|
|
2796
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2797
|
+
}
|
|
2798
|
+
}
|
|
2799
|
+
}
|
|
2800
|
+
},
|
|
2801
|
+
"401": {
|
|
2802
|
+
"description": "Missing or invalid credentials.",
|
|
2803
|
+
"content": {
|
|
2804
|
+
"application/json": {
|
|
2805
|
+
"schema": {
|
|
2806
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2807
|
+
}
|
|
2808
|
+
}
|
|
2809
|
+
}
|
|
2810
|
+
},
|
|
2811
|
+
"403": {
|
|
2812
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
2813
|
+
"content": {
|
|
2814
|
+
"application/json": {
|
|
2815
|
+
"schema": {
|
|
2816
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2817
|
+
}
|
|
2818
|
+
}
|
|
2819
|
+
}
|
|
2820
|
+
},
|
|
2821
|
+
"404": {
|
|
2822
|
+
"description": "Resource not found.",
|
|
2823
|
+
"content": {
|
|
2824
|
+
"application/json": {
|
|
2825
|
+
"schema": {
|
|
2826
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2827
|
+
}
|
|
2828
|
+
}
|
|
2829
|
+
}
|
|
2830
|
+
},
|
|
2831
|
+
"422": {
|
|
2832
|
+
"description": "Body did not match the tool's input schema.",
|
|
2833
|
+
"content": {
|
|
2834
|
+
"application/json": {
|
|
2835
|
+
"schema": {
|
|
2836
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2837
|
+
}
|
|
2838
|
+
}
|
|
2839
|
+
}
|
|
2840
|
+
},
|
|
2841
|
+
"500": {
|
|
2842
|
+
"description": "Server error.",
|
|
2843
|
+
"content": {
|
|
2844
|
+
"application/json": {
|
|
2845
|
+
"schema": {
|
|
2846
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2847
|
+
}
|
|
2848
|
+
}
|
|
2849
|
+
}
|
|
2850
|
+
}
|
|
2851
|
+
}
|
|
2852
|
+
}
|
|
2853
|
+
},
|
|
2854
|
+
"/tools/findAndReplaceTextInDocument": {
|
|
2855
|
+
"post": {
|
|
2856
|
+
"summary": "findAndReplaceTextInDocument",
|
|
2857
|
+
"description": "Find and replace text in a document. Searches for all occurrences and replaces them. Case-sensitive by default. Diagrams/images are automatically protected — only document text is affected. Note: when the `replace` value contains a `<!-- REFERENCE: {...} -->` marker (e.g. inserting a user mention), it round-trips losslessly through the editor and triggers notifications if it adds a new user mention.",
|
|
2858
|
+
"operationId": "findAndReplaceTextInDocument",
|
|
2859
|
+
"tags": [
|
|
2860
|
+
"documents"
|
|
2861
|
+
],
|
|
2862
|
+
"requestBody": {
|
|
2863
|
+
"required": false,
|
|
2864
|
+
"content": {
|
|
2865
|
+
"application/json": {
|
|
2866
|
+
"schema": {
|
|
2867
|
+
"type": "object",
|
|
2868
|
+
"properties": {
|
|
2869
|
+
"documentId": {
|
|
2870
|
+
"type": "string"
|
|
2871
|
+
},
|
|
2872
|
+
"find": {
|
|
2873
|
+
"type": "string",
|
|
2874
|
+
"description": "Text to search for."
|
|
2875
|
+
},
|
|
2876
|
+
"replace": {
|
|
2877
|
+
"type": "string",
|
|
2878
|
+
"description": "Replacement text. Empty string to delete occurrences."
|
|
2879
|
+
},
|
|
2880
|
+
"caseSensitive": {
|
|
2881
|
+
"type": "boolean",
|
|
2882
|
+
"description": "Case-sensitive matching. Default: true."
|
|
2883
|
+
},
|
|
2884
|
+
"changeSummary": {
|
|
2885
|
+
"type": "string",
|
|
2886
|
+
"description": "Version history summary."
|
|
2887
|
+
}
|
|
2888
|
+
},
|
|
2889
|
+
"required": [
|
|
2890
|
+
"documentId",
|
|
2891
|
+
"find",
|
|
2892
|
+
"replace"
|
|
2893
|
+
]
|
|
2894
|
+
}
|
|
2895
|
+
}
|
|
2896
|
+
}
|
|
2897
|
+
},
|
|
2898
|
+
"responses": {
|
|
2899
|
+
"200": {
|
|
2900
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
2901
|
+
"content": {
|
|
2902
|
+
"application/json": {
|
|
2903
|
+
"schema": {
|
|
2904
|
+
"type": "object",
|
|
2905
|
+
"additionalProperties": true
|
|
2906
|
+
}
|
|
2907
|
+
}
|
|
2908
|
+
}
|
|
2909
|
+
},
|
|
2910
|
+
"400": {
|
|
2911
|
+
"description": "Validation error.",
|
|
2912
|
+
"content": {
|
|
2913
|
+
"application/json": {
|
|
2914
|
+
"schema": {
|
|
2915
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2916
|
+
}
|
|
2917
|
+
}
|
|
2918
|
+
}
|
|
2919
|
+
},
|
|
2920
|
+
"401": {
|
|
2921
|
+
"description": "Missing or invalid credentials.",
|
|
2922
|
+
"content": {
|
|
2923
|
+
"application/json": {
|
|
2924
|
+
"schema": {
|
|
2925
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2926
|
+
}
|
|
2927
|
+
}
|
|
2928
|
+
}
|
|
2929
|
+
},
|
|
2930
|
+
"403": {
|
|
2931
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
2932
|
+
"content": {
|
|
2933
|
+
"application/json": {
|
|
2934
|
+
"schema": {
|
|
2935
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2936
|
+
}
|
|
2937
|
+
}
|
|
2938
|
+
}
|
|
2939
|
+
},
|
|
2940
|
+
"404": {
|
|
2941
|
+
"description": "Resource not found.",
|
|
2942
|
+
"content": {
|
|
2943
|
+
"application/json": {
|
|
2944
|
+
"schema": {
|
|
2945
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2946
|
+
}
|
|
2947
|
+
}
|
|
2948
|
+
}
|
|
2949
|
+
},
|
|
2950
|
+
"422": {
|
|
2951
|
+
"description": "Body did not match the tool's input schema.",
|
|
2952
|
+
"content": {
|
|
2953
|
+
"application/json": {
|
|
2954
|
+
"schema": {
|
|
2955
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2956
|
+
}
|
|
2957
|
+
}
|
|
2958
|
+
}
|
|
2959
|
+
},
|
|
2960
|
+
"500": {
|
|
2961
|
+
"description": "Server error.",
|
|
2962
|
+
"content": {
|
|
2963
|
+
"application/json": {
|
|
2964
|
+
"schema": {
|
|
2965
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
2966
|
+
}
|
|
2967
|
+
}
|
|
2968
|
+
}
|
|
2969
|
+
}
|
|
2970
|
+
}
|
|
2971
|
+
}
|
|
2972
|
+
},
|
|
2973
|
+
"/tools/getDiagramInDocument": {
|
|
2974
|
+
"post": {
|
|
2975
|
+
"summary": "getDiagramInDocument",
|
|
2976
|
+
"description": "Get a diagram's full details including raw DSL source code. Use diagramId from DIAGRAM_OMITTED markers in getDocument output. Returns diagramCode, type, name, nlDescription, and versionTimestamp.",
|
|
2977
|
+
"operationId": "getDiagramInDocument",
|
|
2978
|
+
"tags": [
|
|
2979
|
+
"diagrams"
|
|
2980
|
+
],
|
|
2981
|
+
"requestBody": {
|
|
2982
|
+
"required": false,
|
|
2983
|
+
"content": {
|
|
2984
|
+
"application/json": {
|
|
2985
|
+
"schema": {
|
|
2986
|
+
"type": "object",
|
|
2987
|
+
"properties": {
|
|
2988
|
+
"diagramId": {
|
|
2989
|
+
"type": "string",
|
|
2990
|
+
"description": "Diagram ID from DIAGRAM_OMITTED markers."
|
|
2991
|
+
},
|
|
2992
|
+
"fields": {
|
|
2993
|
+
"type": "array",
|
|
2994
|
+
"items": {
|
|
2995
|
+
"type": "string"
|
|
2996
|
+
},
|
|
2997
|
+
"description": "Field projection. Valid fields: diagramId, documentId, type, name, diagramCode, nlDescription, colorPlan, renderStatus, renderError, createdAt, updatedAt, versionTimestamp."
|
|
2998
|
+
}
|
|
2999
|
+
},
|
|
3000
|
+
"required": [
|
|
3001
|
+
"diagramId"
|
|
3002
|
+
]
|
|
3003
|
+
}
|
|
3004
|
+
}
|
|
3005
|
+
}
|
|
3006
|
+
},
|
|
3007
|
+
"responses": {
|
|
3008
|
+
"200": {
|
|
3009
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3010
|
+
"content": {
|
|
3011
|
+
"application/json": {
|
|
3012
|
+
"schema": {
|
|
3013
|
+
"type": "object",
|
|
3014
|
+
"additionalProperties": true
|
|
3015
|
+
}
|
|
3016
|
+
}
|
|
3017
|
+
}
|
|
3018
|
+
},
|
|
3019
|
+
"400": {
|
|
3020
|
+
"description": "Validation error.",
|
|
3021
|
+
"content": {
|
|
3022
|
+
"application/json": {
|
|
3023
|
+
"schema": {
|
|
3024
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3025
|
+
}
|
|
3026
|
+
}
|
|
3027
|
+
}
|
|
3028
|
+
},
|
|
3029
|
+
"401": {
|
|
3030
|
+
"description": "Missing or invalid credentials.",
|
|
3031
|
+
"content": {
|
|
3032
|
+
"application/json": {
|
|
3033
|
+
"schema": {
|
|
3034
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3035
|
+
}
|
|
3036
|
+
}
|
|
3037
|
+
}
|
|
3038
|
+
},
|
|
3039
|
+
"403": {
|
|
3040
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3041
|
+
"content": {
|
|
3042
|
+
"application/json": {
|
|
3043
|
+
"schema": {
|
|
3044
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3045
|
+
}
|
|
3046
|
+
}
|
|
3047
|
+
}
|
|
3048
|
+
},
|
|
3049
|
+
"404": {
|
|
3050
|
+
"description": "Resource not found.",
|
|
3051
|
+
"content": {
|
|
3052
|
+
"application/json": {
|
|
3053
|
+
"schema": {
|
|
3054
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3055
|
+
}
|
|
3056
|
+
}
|
|
3057
|
+
}
|
|
3058
|
+
},
|
|
3059
|
+
"422": {
|
|
3060
|
+
"description": "Body did not match the tool's input schema.",
|
|
3061
|
+
"content": {
|
|
3062
|
+
"application/json": {
|
|
3063
|
+
"schema": {
|
|
3064
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3065
|
+
}
|
|
3066
|
+
}
|
|
3067
|
+
}
|
|
3068
|
+
},
|
|
3069
|
+
"500": {
|
|
3070
|
+
"description": "Server error.",
|
|
3071
|
+
"content": {
|
|
3072
|
+
"application/json": {
|
|
3073
|
+
"schema": {
|
|
3074
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3075
|
+
}
|
|
3076
|
+
}
|
|
3077
|
+
}
|
|
3078
|
+
}
|
|
3079
|
+
}
|
|
3080
|
+
}
|
|
3081
|
+
},
|
|
3082
|
+
"/tools/insertDiagramInDocument": {
|
|
3083
|
+
"post": {
|
|
3084
|
+
"summary": "insertDiagramInDocument",
|
|
3085
|
+
"description": "Insert a new diagram into a document. Call listDiagramTypes to find your type, then getDiagramTypeGuide for DSL syntax before writing diagramCode. Always set prompt + nlDescription to describe what the diagram shows (they are its saved description) and keep them accurate. After inserting, VERIFY the render — set returnImage:true (or call getDiagramImage) to actually SEE it — and if it is wrong or ugly, correct it with updateDiagramInDocument (provide the full updated diagramCode).",
|
|
3086
|
+
"operationId": "insertDiagramInDocument",
|
|
3087
|
+
"tags": [
|
|
3088
|
+
"diagrams"
|
|
3089
|
+
],
|
|
3090
|
+
"requestBody": {
|
|
3091
|
+
"required": false,
|
|
3092
|
+
"content": {
|
|
3093
|
+
"application/json": {
|
|
3094
|
+
"schema": {
|
|
3095
|
+
"type": "object",
|
|
3096
|
+
"properties": {
|
|
3097
|
+
"documentId": {
|
|
3098
|
+
"type": "string"
|
|
3099
|
+
},
|
|
3100
|
+
"documentVersionTimestamp": {
|
|
3101
|
+
"type": "number",
|
|
3102
|
+
"description": "Version timestamp from getDocument() for optimistic locking."
|
|
3103
|
+
},
|
|
3104
|
+
"type": {
|
|
3105
|
+
"type": "string",
|
|
3106
|
+
"description": "Diagram type (e.g. mermaid, plantuml, bpmn, d2). Call listDiagramTypes for all types."
|
|
3107
|
+
},
|
|
3108
|
+
"diagramCode": {
|
|
3109
|
+
"type": "string",
|
|
3110
|
+
"description": "Diagram DSL code. Call getDiagramTypeGuide for syntax."
|
|
3111
|
+
},
|
|
3112
|
+
"prompt": {
|
|
3113
|
+
"type": "string",
|
|
3114
|
+
"description": "Short description of what the diagram shows (1-2 sentences)."
|
|
3115
|
+
},
|
|
3116
|
+
"nlDescription": {
|
|
3117
|
+
"type": "string",
|
|
3118
|
+
"description": "Extended description of the diagram (2-4 sentences)."
|
|
3119
|
+
},
|
|
3120
|
+
"align": {
|
|
3121
|
+
"type": "string",
|
|
3122
|
+
"description": "Alignment.",
|
|
3123
|
+
"enum": [
|
|
3124
|
+
"left",
|
|
3125
|
+
"center",
|
|
3126
|
+
"right"
|
|
3127
|
+
]
|
|
3128
|
+
},
|
|
3129
|
+
"caption": {
|
|
3130
|
+
"type": "string",
|
|
3131
|
+
"description": "Caption below the diagram."
|
|
3132
|
+
},
|
|
3133
|
+
"afterLine": {
|
|
3134
|
+
"type": "number",
|
|
3135
|
+
"description": "Insert after this line number (1-based)."
|
|
3136
|
+
},
|
|
3137
|
+
"colorPlan": {
|
|
3138
|
+
"type": "object",
|
|
3139
|
+
"description": "BPMN only. Color plan: { byElementId: { ElementId: SwatchName } }.",
|
|
3140
|
+
"properties": {
|
|
3141
|
+
"byElementId": {
|
|
3142
|
+
"type": "object",
|
|
3143
|
+
"description": "Map of element IDs to color swatch names.",
|
|
3144
|
+
"additionalProperties": {
|
|
3145
|
+
"type": "string"
|
|
3146
|
+
}
|
|
3147
|
+
}
|
|
3148
|
+
},
|
|
3149
|
+
"required": [
|
|
3150
|
+
"byElementId"
|
|
3151
|
+
]
|
|
3152
|
+
},
|
|
3153
|
+
"returnImage": {
|
|
3154
|
+
"type": "boolean",
|
|
3155
|
+
"description": "If true, also render the inserted diagram and return it as an image inline (one-call insert-and-get-image). Defaults false."
|
|
3156
|
+
},
|
|
3157
|
+
"imageFormat": {
|
|
3158
|
+
"type": "string",
|
|
3159
|
+
"enum": [
|
|
3160
|
+
"png",
|
|
3161
|
+
"jpeg",
|
|
3162
|
+
"svg"
|
|
3163
|
+
],
|
|
3164
|
+
"description": "Image format when returnImage:true (default png)."
|
|
3165
|
+
},
|
|
3166
|
+
"imageScale": {
|
|
3167
|
+
"type": "number",
|
|
3168
|
+
"enum": [
|
|
3169
|
+
1,
|
|
3170
|
+
2,
|
|
3171
|
+
3
|
|
3172
|
+
],
|
|
3173
|
+
"description": "Raster resolution 1x/2x/3x when returnImage:true (default 2)."
|
|
3174
|
+
},
|
|
3175
|
+
"imageBackground": {
|
|
3176
|
+
"type": "string",
|
|
3177
|
+
"description": "Background for the returned png/jpeg (e.g. '#ffffff' or 'transparent')."
|
|
3178
|
+
}
|
|
3179
|
+
},
|
|
3180
|
+
"required": [
|
|
3181
|
+
"documentId",
|
|
3182
|
+
"documentVersionTimestamp",
|
|
3183
|
+
"type",
|
|
3184
|
+
"diagramCode",
|
|
3185
|
+
"prompt",
|
|
3186
|
+
"nlDescription",
|
|
3187
|
+
"align",
|
|
3188
|
+
"caption",
|
|
3189
|
+
"afterLine"
|
|
3190
|
+
]
|
|
3191
|
+
}
|
|
3192
|
+
}
|
|
3193
|
+
}
|
|
3194
|
+
},
|
|
3195
|
+
"responses": {
|
|
3196
|
+
"200": {
|
|
3197
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3198
|
+
"content": {
|
|
3199
|
+
"application/json": {
|
|
3200
|
+
"schema": {
|
|
3201
|
+
"type": "object",
|
|
3202
|
+
"additionalProperties": true
|
|
3203
|
+
}
|
|
3204
|
+
}
|
|
3205
|
+
}
|
|
3206
|
+
},
|
|
3207
|
+
"400": {
|
|
3208
|
+
"description": "Validation error.",
|
|
3209
|
+
"content": {
|
|
3210
|
+
"application/json": {
|
|
3211
|
+
"schema": {
|
|
3212
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3213
|
+
}
|
|
3214
|
+
}
|
|
3215
|
+
}
|
|
3216
|
+
},
|
|
3217
|
+
"401": {
|
|
3218
|
+
"description": "Missing or invalid credentials.",
|
|
3219
|
+
"content": {
|
|
3220
|
+
"application/json": {
|
|
3221
|
+
"schema": {
|
|
3222
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3223
|
+
}
|
|
3224
|
+
}
|
|
3225
|
+
}
|
|
3226
|
+
},
|
|
3227
|
+
"403": {
|
|
3228
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3229
|
+
"content": {
|
|
3230
|
+
"application/json": {
|
|
3231
|
+
"schema": {
|
|
3232
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3233
|
+
}
|
|
3234
|
+
}
|
|
3235
|
+
}
|
|
3236
|
+
},
|
|
3237
|
+
"404": {
|
|
3238
|
+
"description": "Resource not found.",
|
|
3239
|
+
"content": {
|
|
3240
|
+
"application/json": {
|
|
3241
|
+
"schema": {
|
|
3242
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3243
|
+
}
|
|
3244
|
+
}
|
|
3245
|
+
}
|
|
3246
|
+
},
|
|
3247
|
+
"422": {
|
|
3248
|
+
"description": "Body did not match the tool's input schema.",
|
|
3249
|
+
"content": {
|
|
3250
|
+
"application/json": {
|
|
3251
|
+
"schema": {
|
|
3252
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3253
|
+
}
|
|
3254
|
+
}
|
|
3255
|
+
}
|
|
3256
|
+
},
|
|
3257
|
+
"500": {
|
|
3258
|
+
"description": "Server error.",
|
|
3259
|
+
"content": {
|
|
3260
|
+
"application/json": {
|
|
3261
|
+
"schema": {
|
|
3262
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3263
|
+
}
|
|
3264
|
+
}
|
|
3265
|
+
}
|
|
3266
|
+
}
|
|
3267
|
+
}
|
|
3268
|
+
}
|
|
3269
|
+
},
|
|
3270
|
+
"/tools/updateDiagramInDocument": {
|
|
3271
|
+
"post": {
|
|
3272
|
+
"summary": "updateDiagramInDocument",
|
|
3273
|
+
"description": "Update a diagram's code, description, or properties. Call getDiagramTypeGuide for DSL syntax. Requires documentVersionTimestamp from getDocument. IMPORTANT: To change what the diagram visually shows, you MUST provide diagramCode with the full updated DSL source. The prompt and nlDescription fields are metadata only and do NOT change the rendered diagram. After updating, re-render with getDiagramImage to confirm it now looks right (iterate if not), and keep prompt/nlDescription in step with what the diagram now shows.",
|
|
3274
|
+
"operationId": "updateDiagramInDocument",
|
|
3275
|
+
"tags": [
|
|
3276
|
+
"diagrams"
|
|
3277
|
+
],
|
|
3278
|
+
"requestBody": {
|
|
3279
|
+
"required": false,
|
|
3280
|
+
"content": {
|
|
3281
|
+
"application/json": {
|
|
3282
|
+
"schema": {
|
|
3283
|
+
"type": "object",
|
|
3284
|
+
"properties": {
|
|
3285
|
+
"diagramId": {
|
|
3286
|
+
"type": "string",
|
|
3287
|
+
"description": "Diagram ID from DIAGRAM_OMITTED markers."
|
|
3288
|
+
},
|
|
3289
|
+
"diagramCode": {
|
|
3290
|
+
"type": "string",
|
|
3291
|
+
"description": "New diagram DSL source code. REQUIRED to change what the diagram visually renders. Call getDiagramTypeGuide for syntax. Must provide the COMPLETE updated DSL, not just the changed parts."
|
|
3292
|
+
},
|
|
3293
|
+
"prompt": {
|
|
3294
|
+
"type": "string",
|
|
3295
|
+
"description": "New short description (metadata only — does NOT change the rendered diagram)."
|
|
3296
|
+
},
|
|
3297
|
+
"nlDescription": {
|
|
3298
|
+
"type": "string",
|
|
3299
|
+
"description": "New extended description (metadata only — does NOT change the rendered diagram)."
|
|
3300
|
+
},
|
|
3301
|
+
"align": {
|
|
3302
|
+
"type": "string",
|
|
3303
|
+
"description": "Alignment.",
|
|
3304
|
+
"enum": [
|
|
3305
|
+
"left",
|
|
3306
|
+
"center",
|
|
3307
|
+
"right"
|
|
3308
|
+
]
|
|
3309
|
+
},
|
|
3310
|
+
"caption": {
|
|
3311
|
+
"type": "string",
|
|
3312
|
+
"description": "New caption."
|
|
3313
|
+
},
|
|
3314
|
+
"colorPlan": {
|
|
3315
|
+
"type": "object",
|
|
3316
|
+
"description": "BPMN only. Updated color plan. Set to null to remove.",
|
|
3317
|
+
"properties": {
|
|
3318
|
+
"byElementId": {
|
|
3319
|
+
"type": "object",
|
|
3320
|
+
"description": "Map of element IDs to color swatch names.",
|
|
3321
|
+
"additionalProperties": {
|
|
3322
|
+
"type": "string"
|
|
3323
|
+
}
|
|
3324
|
+
}
|
|
3325
|
+
},
|
|
3326
|
+
"required": [
|
|
3327
|
+
"byElementId"
|
|
3328
|
+
]
|
|
3329
|
+
},
|
|
3330
|
+
"documentVersionTimestamp": {
|
|
3331
|
+
"type": "number",
|
|
3332
|
+
"description": "Version timestamp from getDocument() for optimistic locking."
|
|
3333
|
+
}
|
|
3334
|
+
},
|
|
3335
|
+
"required": [
|
|
3336
|
+
"diagramId",
|
|
3337
|
+
"documentVersionTimestamp"
|
|
3338
|
+
]
|
|
3339
|
+
}
|
|
3340
|
+
}
|
|
3341
|
+
}
|
|
3342
|
+
},
|
|
3343
|
+
"responses": {
|
|
3344
|
+
"200": {
|
|
3345
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3346
|
+
"content": {
|
|
3347
|
+
"application/json": {
|
|
3348
|
+
"schema": {
|
|
3349
|
+
"type": "object",
|
|
3350
|
+
"additionalProperties": true
|
|
3351
|
+
}
|
|
3352
|
+
}
|
|
3353
|
+
}
|
|
3354
|
+
},
|
|
3355
|
+
"400": {
|
|
3356
|
+
"description": "Validation error.",
|
|
3357
|
+
"content": {
|
|
3358
|
+
"application/json": {
|
|
3359
|
+
"schema": {
|
|
3360
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3361
|
+
}
|
|
3362
|
+
}
|
|
3363
|
+
}
|
|
3364
|
+
},
|
|
3365
|
+
"401": {
|
|
3366
|
+
"description": "Missing or invalid credentials.",
|
|
3367
|
+
"content": {
|
|
3368
|
+
"application/json": {
|
|
3369
|
+
"schema": {
|
|
3370
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3371
|
+
}
|
|
3372
|
+
}
|
|
3373
|
+
}
|
|
3374
|
+
},
|
|
3375
|
+
"403": {
|
|
3376
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3377
|
+
"content": {
|
|
3378
|
+
"application/json": {
|
|
3379
|
+
"schema": {
|
|
3380
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3381
|
+
}
|
|
3382
|
+
}
|
|
3383
|
+
}
|
|
3384
|
+
},
|
|
3385
|
+
"404": {
|
|
3386
|
+
"description": "Resource not found.",
|
|
3387
|
+
"content": {
|
|
3388
|
+
"application/json": {
|
|
3389
|
+
"schema": {
|
|
3390
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3391
|
+
}
|
|
3392
|
+
}
|
|
3393
|
+
}
|
|
3394
|
+
},
|
|
3395
|
+
"422": {
|
|
3396
|
+
"description": "Body did not match the tool's input schema.",
|
|
3397
|
+
"content": {
|
|
3398
|
+
"application/json": {
|
|
3399
|
+
"schema": {
|
|
3400
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3401
|
+
}
|
|
3402
|
+
}
|
|
3403
|
+
}
|
|
3404
|
+
},
|
|
3405
|
+
"500": {
|
|
3406
|
+
"description": "Server error.",
|
|
3407
|
+
"content": {
|
|
3408
|
+
"application/json": {
|
|
3409
|
+
"schema": {
|
|
3410
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3411
|
+
}
|
|
3412
|
+
}
|
|
3413
|
+
}
|
|
3414
|
+
}
|
|
3415
|
+
}
|
|
3416
|
+
}
|
|
3417
|
+
},
|
|
3418
|
+
"/tools/deleteDiagramInDocument": {
|
|
3419
|
+
"post": {
|
|
3420
|
+
"summary": "deleteDiagramInDocument",
|
|
3421
|
+
"description": "Delete a diagram from a document.",
|
|
3422
|
+
"operationId": "deleteDiagramInDocument",
|
|
3423
|
+
"tags": [
|
|
3424
|
+
"diagrams"
|
|
3425
|
+
],
|
|
3426
|
+
"requestBody": {
|
|
3427
|
+
"required": false,
|
|
3428
|
+
"content": {
|
|
3429
|
+
"application/json": {
|
|
3430
|
+
"schema": {
|
|
3431
|
+
"type": "object",
|
|
3432
|
+
"properties": {
|
|
3433
|
+
"diagramId": {
|
|
3434
|
+
"type": "string",
|
|
3435
|
+
"description": "Diagram ID from DIAGRAM_OMITTED markers."
|
|
3436
|
+
}
|
|
3437
|
+
},
|
|
3438
|
+
"required": [
|
|
3439
|
+
"diagramId"
|
|
3440
|
+
]
|
|
3441
|
+
}
|
|
3442
|
+
}
|
|
3443
|
+
}
|
|
3444
|
+
},
|
|
3445
|
+
"responses": {
|
|
3446
|
+
"200": {
|
|
3447
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3448
|
+
"content": {
|
|
3449
|
+
"application/json": {
|
|
3450
|
+
"schema": {
|
|
3451
|
+
"type": "object",
|
|
3452
|
+
"additionalProperties": true
|
|
3453
|
+
}
|
|
3454
|
+
}
|
|
3455
|
+
}
|
|
3456
|
+
},
|
|
3457
|
+
"400": {
|
|
3458
|
+
"description": "Validation error.",
|
|
3459
|
+
"content": {
|
|
3460
|
+
"application/json": {
|
|
3461
|
+
"schema": {
|
|
3462
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3463
|
+
}
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
},
|
|
3467
|
+
"401": {
|
|
3468
|
+
"description": "Missing or invalid credentials.",
|
|
3469
|
+
"content": {
|
|
3470
|
+
"application/json": {
|
|
3471
|
+
"schema": {
|
|
3472
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3473
|
+
}
|
|
3474
|
+
}
|
|
3475
|
+
}
|
|
3476
|
+
},
|
|
3477
|
+
"403": {
|
|
3478
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3479
|
+
"content": {
|
|
3480
|
+
"application/json": {
|
|
3481
|
+
"schema": {
|
|
3482
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3483
|
+
}
|
|
3484
|
+
}
|
|
3485
|
+
}
|
|
3486
|
+
},
|
|
3487
|
+
"404": {
|
|
3488
|
+
"description": "Resource not found.",
|
|
3489
|
+
"content": {
|
|
3490
|
+
"application/json": {
|
|
3491
|
+
"schema": {
|
|
3492
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3493
|
+
}
|
|
3494
|
+
}
|
|
3495
|
+
}
|
|
3496
|
+
},
|
|
3497
|
+
"422": {
|
|
3498
|
+
"description": "Body did not match the tool's input schema.",
|
|
3499
|
+
"content": {
|
|
3500
|
+
"application/json": {
|
|
3501
|
+
"schema": {
|
|
3502
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3503
|
+
}
|
|
3504
|
+
}
|
|
3505
|
+
}
|
|
3506
|
+
},
|
|
3507
|
+
"500": {
|
|
3508
|
+
"description": "Server error.",
|
|
3509
|
+
"content": {
|
|
3510
|
+
"application/json": {
|
|
3511
|
+
"schema": {
|
|
3512
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3513
|
+
}
|
|
3514
|
+
}
|
|
3515
|
+
}
|
|
3516
|
+
}
|
|
3517
|
+
}
|
|
3518
|
+
}
|
|
3519
|
+
},
|
|
3520
|
+
"/tools/deleteDocument": {
|
|
3521
|
+
"post": {
|
|
3522
|
+
"summary": "deleteDocument",
|
|
3523
|
+
"description": "Delete a document.",
|
|
3524
|
+
"operationId": "deleteDocument",
|
|
3525
|
+
"tags": [
|
|
3526
|
+
"documents"
|
|
3527
|
+
],
|
|
3528
|
+
"requestBody": {
|
|
3529
|
+
"required": false,
|
|
3530
|
+
"content": {
|
|
3531
|
+
"application/json": {
|
|
3532
|
+
"schema": {
|
|
3533
|
+
"type": "object",
|
|
3534
|
+
"properties": {
|
|
3535
|
+
"documentId": {
|
|
3536
|
+
"type": "string"
|
|
3537
|
+
}
|
|
3538
|
+
},
|
|
3539
|
+
"required": [
|
|
3540
|
+
"documentId"
|
|
3541
|
+
]
|
|
3542
|
+
}
|
|
3543
|
+
}
|
|
3544
|
+
}
|
|
3545
|
+
},
|
|
3546
|
+
"responses": {
|
|
3547
|
+
"200": {
|
|
3548
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3549
|
+
"content": {
|
|
3550
|
+
"application/json": {
|
|
3551
|
+
"schema": {
|
|
3552
|
+
"type": "object",
|
|
3553
|
+
"additionalProperties": true
|
|
3554
|
+
}
|
|
3555
|
+
}
|
|
3556
|
+
}
|
|
3557
|
+
},
|
|
3558
|
+
"400": {
|
|
3559
|
+
"description": "Validation error.",
|
|
3560
|
+
"content": {
|
|
3561
|
+
"application/json": {
|
|
3562
|
+
"schema": {
|
|
3563
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3564
|
+
}
|
|
3565
|
+
}
|
|
3566
|
+
}
|
|
3567
|
+
},
|
|
3568
|
+
"401": {
|
|
3569
|
+
"description": "Missing or invalid credentials.",
|
|
3570
|
+
"content": {
|
|
3571
|
+
"application/json": {
|
|
3572
|
+
"schema": {
|
|
3573
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3574
|
+
}
|
|
3575
|
+
}
|
|
3576
|
+
}
|
|
3577
|
+
},
|
|
3578
|
+
"403": {
|
|
3579
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3580
|
+
"content": {
|
|
3581
|
+
"application/json": {
|
|
3582
|
+
"schema": {
|
|
3583
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
}
|
|
3587
|
+
},
|
|
3588
|
+
"404": {
|
|
3589
|
+
"description": "Resource not found.",
|
|
3590
|
+
"content": {
|
|
3591
|
+
"application/json": {
|
|
3592
|
+
"schema": {
|
|
3593
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3594
|
+
}
|
|
3595
|
+
}
|
|
3596
|
+
}
|
|
3597
|
+
},
|
|
3598
|
+
"422": {
|
|
3599
|
+
"description": "Body did not match the tool's input schema.",
|
|
3600
|
+
"content": {
|
|
3601
|
+
"application/json": {
|
|
3602
|
+
"schema": {
|
|
3603
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3604
|
+
}
|
|
3605
|
+
}
|
|
3606
|
+
}
|
|
3607
|
+
},
|
|
3608
|
+
"500": {
|
|
3609
|
+
"description": "Server error.",
|
|
3610
|
+
"content": {
|
|
3611
|
+
"application/json": {
|
|
3612
|
+
"schema": {
|
|
3613
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3614
|
+
}
|
|
3615
|
+
}
|
|
3616
|
+
}
|
|
3617
|
+
}
|
|
3618
|
+
}
|
|
3619
|
+
}
|
|
3620
|
+
},
|
|
3621
|
+
"/tools/getWhiteboardGuide": {
|
|
3622
|
+
"post": {
|
|
3623
|
+
"summary": "getWhiteboardGuide",
|
|
3624
|
+
"description": "Get the Stable Baseline whiteboarding guide (Markdown): when to use stencils vs architecture icons vs code/BPMN diagrams vs plain shapes vs real images vs frames/presentations, how to lay out and verify a board, and how to edit a large board safely (patch by id, never replace). Call before authoring a non-trivial whiteboard.",
|
|
3625
|
+
"operationId": "getWhiteboardGuide",
|
|
3626
|
+
"tags": [
|
|
3627
|
+
"whiteboards"
|
|
3628
|
+
],
|
|
3629
|
+
"requestBody": {
|
|
3630
|
+
"required": false,
|
|
3631
|
+
"content": {
|
|
3632
|
+
"application/json": {
|
|
3633
|
+
"schema": {
|
|
3634
|
+
"type": "object",
|
|
3635
|
+
"properties": {}
|
|
3636
|
+
}
|
|
3637
|
+
}
|
|
3638
|
+
}
|
|
3639
|
+
},
|
|
3640
|
+
"responses": {
|
|
3641
|
+
"200": {
|
|
3642
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3643
|
+
"content": {
|
|
3644
|
+
"application/json": {
|
|
3645
|
+
"schema": {
|
|
3646
|
+
"type": "object",
|
|
3647
|
+
"additionalProperties": true
|
|
3648
|
+
}
|
|
3649
|
+
}
|
|
3650
|
+
}
|
|
3651
|
+
},
|
|
3652
|
+
"400": {
|
|
3653
|
+
"description": "Validation error.",
|
|
3654
|
+
"content": {
|
|
3655
|
+
"application/json": {
|
|
3656
|
+
"schema": {
|
|
3657
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3658
|
+
}
|
|
3659
|
+
}
|
|
3660
|
+
}
|
|
3661
|
+
},
|
|
3662
|
+
"401": {
|
|
3663
|
+
"description": "Missing or invalid credentials.",
|
|
3664
|
+
"content": {
|
|
3665
|
+
"application/json": {
|
|
3666
|
+
"schema": {
|
|
3667
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3668
|
+
}
|
|
3669
|
+
}
|
|
3670
|
+
}
|
|
3671
|
+
},
|
|
3672
|
+
"403": {
|
|
3673
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3674
|
+
"content": {
|
|
3675
|
+
"application/json": {
|
|
3676
|
+
"schema": {
|
|
3677
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3678
|
+
}
|
|
3679
|
+
}
|
|
3680
|
+
}
|
|
3681
|
+
},
|
|
3682
|
+
"404": {
|
|
3683
|
+
"description": "Resource not found.",
|
|
3684
|
+
"content": {
|
|
3685
|
+
"application/json": {
|
|
3686
|
+
"schema": {
|
|
3687
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3688
|
+
}
|
|
3689
|
+
}
|
|
3690
|
+
}
|
|
3691
|
+
},
|
|
3692
|
+
"422": {
|
|
3693
|
+
"description": "Body did not match the tool's input schema.",
|
|
3694
|
+
"content": {
|
|
3695
|
+
"application/json": {
|
|
3696
|
+
"schema": {
|
|
3697
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3698
|
+
}
|
|
3699
|
+
}
|
|
3700
|
+
}
|
|
3701
|
+
},
|
|
3702
|
+
"500": {
|
|
3703
|
+
"description": "Server error.",
|
|
3704
|
+
"content": {
|
|
3705
|
+
"application/json": {
|
|
3706
|
+
"schema": {
|
|
3707
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3708
|
+
}
|
|
3709
|
+
}
|
|
3710
|
+
}
|
|
3711
|
+
}
|
|
3712
|
+
}
|
|
3713
|
+
}
|
|
3714
|
+
},
|
|
3715
|
+
"/tools/createWhiteboard": {
|
|
3716
|
+
"post": {
|
|
3717
|
+
"summary": "createWhiteboard",
|
|
3718
|
+
"description": "Create a whiteboard — an infinite Excalidraw canvas. A whiteboard is a hidden document (it won't appear in listDocuments) that hosts a single freeform canvas, and opens in the immersive whiteboard editor in the app. Returns documentId + diagramId. Author shapes afterwards with addWhiteboardElements (high-level specs) or updateWhiteboardScene. For anything beyond a blank board, call getWhiteboardGuide first to plan the layout (stencils vs architecture icons vs code/BPMN diagrams vs plain shapes), and render with getWhiteboardImage to verify as you go.",
|
|
3719
|
+
"operationId": "createWhiteboard",
|
|
3720
|
+
"tags": [
|
|
3721
|
+
"whiteboards"
|
|
3722
|
+
],
|
|
3723
|
+
"requestBody": {
|
|
3724
|
+
"required": false,
|
|
3725
|
+
"content": {
|
|
3726
|
+
"application/json": {
|
|
3727
|
+
"schema": {
|
|
3728
|
+
"type": "object",
|
|
3729
|
+
"properties": {
|
|
3730
|
+
"projectId": {
|
|
3731
|
+
"type": "string"
|
|
3732
|
+
},
|
|
3733
|
+
"title": {
|
|
3734
|
+
"type": "string",
|
|
3735
|
+
"description": "Whiteboard title. Defaults to 'Untitled whiteboard'."
|
|
3736
|
+
},
|
|
3737
|
+
"folderId": {
|
|
3738
|
+
"type": "string",
|
|
3739
|
+
"description": "Optional folder to file the whiteboard under."
|
|
3740
|
+
}
|
|
3741
|
+
},
|
|
3742
|
+
"required": [
|
|
3743
|
+
"projectId"
|
|
3744
|
+
]
|
|
3745
|
+
}
|
|
3746
|
+
}
|
|
3747
|
+
}
|
|
3748
|
+
},
|
|
3749
|
+
"responses": {
|
|
3750
|
+
"200": {
|
|
3751
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3752
|
+
"content": {
|
|
3753
|
+
"application/json": {
|
|
3754
|
+
"schema": {
|
|
3755
|
+
"type": "object",
|
|
3756
|
+
"additionalProperties": true
|
|
3757
|
+
}
|
|
3758
|
+
}
|
|
3759
|
+
}
|
|
3760
|
+
},
|
|
3761
|
+
"400": {
|
|
3762
|
+
"description": "Validation error.",
|
|
3763
|
+
"content": {
|
|
3764
|
+
"application/json": {
|
|
3765
|
+
"schema": {
|
|
3766
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3767
|
+
}
|
|
3768
|
+
}
|
|
3769
|
+
}
|
|
3770
|
+
},
|
|
3771
|
+
"401": {
|
|
3772
|
+
"description": "Missing or invalid credentials.",
|
|
3773
|
+
"content": {
|
|
3774
|
+
"application/json": {
|
|
3775
|
+
"schema": {
|
|
3776
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3777
|
+
}
|
|
3778
|
+
}
|
|
3779
|
+
}
|
|
3780
|
+
},
|
|
3781
|
+
"403": {
|
|
3782
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3783
|
+
"content": {
|
|
3784
|
+
"application/json": {
|
|
3785
|
+
"schema": {
|
|
3786
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3787
|
+
}
|
|
3788
|
+
}
|
|
3789
|
+
}
|
|
3790
|
+
},
|
|
3791
|
+
"404": {
|
|
3792
|
+
"description": "Resource not found.",
|
|
3793
|
+
"content": {
|
|
3794
|
+
"application/json": {
|
|
3795
|
+
"schema": {
|
|
3796
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3797
|
+
}
|
|
3798
|
+
}
|
|
3799
|
+
}
|
|
3800
|
+
},
|
|
3801
|
+
"422": {
|
|
3802
|
+
"description": "Body did not match the tool's input schema.",
|
|
3803
|
+
"content": {
|
|
3804
|
+
"application/json": {
|
|
3805
|
+
"schema": {
|
|
3806
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3807
|
+
}
|
|
3808
|
+
}
|
|
3809
|
+
}
|
|
3810
|
+
},
|
|
3811
|
+
"500": {
|
|
3812
|
+
"description": "Server error.",
|
|
3813
|
+
"content": {
|
|
3814
|
+
"application/json": {
|
|
3815
|
+
"schema": {
|
|
3816
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3817
|
+
}
|
|
3818
|
+
}
|
|
3819
|
+
}
|
|
3820
|
+
}
|
|
3821
|
+
}
|
|
3822
|
+
}
|
|
3823
|
+
},
|
|
3824
|
+
"/tools/listWhiteboards": {
|
|
3825
|
+
"post": {
|
|
3826
|
+
"summary": "listWhiteboards",
|
|
3827
|
+
"description": "List the whiteboards in a project (hidden whiteboard-kind documents). Returns documentId, diagramId, title and timestamps for each.",
|
|
3828
|
+
"operationId": "listWhiteboards",
|
|
3829
|
+
"tags": [
|
|
3830
|
+
"whiteboards"
|
|
3831
|
+
],
|
|
3832
|
+
"requestBody": {
|
|
3833
|
+
"required": false,
|
|
3834
|
+
"content": {
|
|
3835
|
+
"application/json": {
|
|
3836
|
+
"schema": {
|
|
3837
|
+
"type": "object",
|
|
3838
|
+
"properties": {
|
|
3839
|
+
"projectId": {
|
|
3840
|
+
"type": "string"
|
|
3841
|
+
}
|
|
3842
|
+
},
|
|
3843
|
+
"required": [
|
|
3844
|
+
"projectId"
|
|
3845
|
+
]
|
|
3846
|
+
}
|
|
3847
|
+
}
|
|
3848
|
+
}
|
|
3849
|
+
},
|
|
3850
|
+
"responses": {
|
|
3851
|
+
"200": {
|
|
3852
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3853
|
+
"content": {
|
|
3854
|
+
"application/json": {
|
|
3855
|
+
"schema": {
|
|
3856
|
+
"type": "object",
|
|
3857
|
+
"additionalProperties": true
|
|
3858
|
+
}
|
|
3859
|
+
}
|
|
3860
|
+
}
|
|
3861
|
+
},
|
|
3862
|
+
"400": {
|
|
3863
|
+
"description": "Validation error.",
|
|
3864
|
+
"content": {
|
|
3865
|
+
"application/json": {
|
|
3866
|
+
"schema": {
|
|
3867
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3868
|
+
}
|
|
3869
|
+
}
|
|
3870
|
+
}
|
|
3871
|
+
},
|
|
3872
|
+
"401": {
|
|
3873
|
+
"description": "Missing or invalid credentials.",
|
|
3874
|
+
"content": {
|
|
3875
|
+
"application/json": {
|
|
3876
|
+
"schema": {
|
|
3877
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3880
|
+
}
|
|
3881
|
+
},
|
|
3882
|
+
"403": {
|
|
3883
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3884
|
+
"content": {
|
|
3885
|
+
"application/json": {
|
|
3886
|
+
"schema": {
|
|
3887
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3888
|
+
}
|
|
3889
|
+
}
|
|
3890
|
+
}
|
|
3891
|
+
},
|
|
3892
|
+
"404": {
|
|
3893
|
+
"description": "Resource not found.",
|
|
3894
|
+
"content": {
|
|
3895
|
+
"application/json": {
|
|
3896
|
+
"schema": {
|
|
3897
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3898
|
+
}
|
|
3899
|
+
}
|
|
3900
|
+
}
|
|
3901
|
+
},
|
|
3902
|
+
"422": {
|
|
3903
|
+
"description": "Body did not match the tool's input schema.",
|
|
3904
|
+
"content": {
|
|
3905
|
+
"application/json": {
|
|
3906
|
+
"schema": {
|
|
3907
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3908
|
+
}
|
|
3909
|
+
}
|
|
3910
|
+
}
|
|
3911
|
+
},
|
|
3912
|
+
"500": {
|
|
3913
|
+
"description": "Server error.",
|
|
3914
|
+
"content": {
|
|
3915
|
+
"application/json": {
|
|
3916
|
+
"schema": {
|
|
3917
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3918
|
+
}
|
|
3919
|
+
}
|
|
3920
|
+
}
|
|
3921
|
+
}
|
|
3922
|
+
}
|
|
3923
|
+
}
|
|
3924
|
+
},
|
|
3925
|
+
"/tools/getWhiteboard": {
|
|
3926
|
+
"post": {
|
|
3927
|
+
"summary": "getWhiteboard",
|
|
3928
|
+
"description": "Read a whiteboard: its metadata plus a summary of the canvas (element count, element types, and text labels on the board). Pass includeElements=true to also return the full Excalidraw scene ({elements, appState, files}) — needed if you intend to modify it and send it back via updateWhiteboardScene. FOR BEST RESULTS, also call getWhiteboardImage to render the board to an image and actually SEE it: the visual layout (positions, spacing, overlaps, colours, how shapes connect) is far easier to understand from the rendered picture than from the element list, so view it first to truly understand the board and to propose or verify edits accurately.",
|
|
3929
|
+
"operationId": "getWhiteboard",
|
|
3930
|
+
"tags": [
|
|
3931
|
+
"whiteboards"
|
|
3932
|
+
],
|
|
3933
|
+
"requestBody": {
|
|
3934
|
+
"required": false,
|
|
3935
|
+
"content": {
|
|
3936
|
+
"application/json": {
|
|
3937
|
+
"schema": {
|
|
3938
|
+
"type": "object",
|
|
3939
|
+
"properties": {
|
|
3940
|
+
"documentId": {
|
|
3941
|
+
"type": "string"
|
|
3942
|
+
},
|
|
3943
|
+
"includeElements": {
|
|
3944
|
+
"type": "boolean",
|
|
3945
|
+
"description": "When true, returns the full Excalidraw scene so it can be modified and written back."
|
|
3946
|
+
}
|
|
3947
|
+
},
|
|
3948
|
+
"required": [
|
|
3949
|
+
"documentId"
|
|
3950
|
+
]
|
|
3951
|
+
}
|
|
3952
|
+
}
|
|
3953
|
+
}
|
|
3954
|
+
},
|
|
3955
|
+
"responses": {
|
|
3956
|
+
"200": {
|
|
3957
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
3958
|
+
"content": {
|
|
3959
|
+
"application/json": {
|
|
3960
|
+
"schema": {
|
|
3961
|
+
"type": "object",
|
|
3962
|
+
"additionalProperties": true
|
|
3963
|
+
}
|
|
3964
|
+
}
|
|
3965
|
+
}
|
|
3966
|
+
},
|
|
3967
|
+
"400": {
|
|
3968
|
+
"description": "Validation error.",
|
|
3969
|
+
"content": {
|
|
3970
|
+
"application/json": {
|
|
3971
|
+
"schema": {
|
|
3972
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3973
|
+
}
|
|
3974
|
+
}
|
|
3975
|
+
}
|
|
3976
|
+
},
|
|
3977
|
+
"401": {
|
|
3978
|
+
"description": "Missing or invalid credentials.",
|
|
3979
|
+
"content": {
|
|
3980
|
+
"application/json": {
|
|
3981
|
+
"schema": {
|
|
3982
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3983
|
+
}
|
|
3984
|
+
}
|
|
3985
|
+
}
|
|
3986
|
+
},
|
|
3987
|
+
"403": {
|
|
3988
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
3989
|
+
"content": {
|
|
3990
|
+
"application/json": {
|
|
3991
|
+
"schema": {
|
|
3992
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
3993
|
+
}
|
|
3994
|
+
}
|
|
3995
|
+
}
|
|
3996
|
+
},
|
|
3997
|
+
"404": {
|
|
3998
|
+
"description": "Resource not found.",
|
|
3999
|
+
"content": {
|
|
4000
|
+
"application/json": {
|
|
4001
|
+
"schema": {
|
|
4002
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4003
|
+
}
|
|
4004
|
+
}
|
|
4005
|
+
}
|
|
4006
|
+
},
|
|
4007
|
+
"422": {
|
|
4008
|
+
"description": "Body did not match the tool's input schema.",
|
|
4009
|
+
"content": {
|
|
4010
|
+
"application/json": {
|
|
4011
|
+
"schema": {
|
|
4012
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4013
|
+
}
|
|
4014
|
+
}
|
|
4015
|
+
}
|
|
4016
|
+
},
|
|
4017
|
+
"500": {
|
|
4018
|
+
"description": "Server error.",
|
|
4019
|
+
"content": {
|
|
4020
|
+
"application/json": {
|
|
4021
|
+
"schema": {
|
|
4022
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4023
|
+
}
|
|
4024
|
+
}
|
|
4025
|
+
}
|
|
4026
|
+
}
|
|
4027
|
+
}
|
|
4028
|
+
}
|
|
4029
|
+
},
|
|
4030
|
+
"/tools/updateWhiteboardScene": {
|
|
4031
|
+
"post": {
|
|
4032
|
+
"summary": "updateWhiteboardScene",
|
|
4033
|
+
"description": "Edit elements on a whiteboard's canvas WITHOUT dropping the rest of the scene. A board may hold many diagrams/elements, so prefer surgical edits: mode='patch' (DEFAULT) shallow-merges each incoming object into the existing element with the same `id` (send just {id, backgroundColor:'blue'} to recolour one box, or {id, x, y} to move one) and appends any elements whose id is new/absent — everything else is left untouched. `deleteIds` removes specific elements by id. mode='append' only adds. mode='replace' overwrites the ENTIRE scene (use ONLY when intentionally rewriting the whole board). To author NEW shapes/connectors from a high-level spec, prefer addWhiteboardElements. Optional appState/files are merged in. PROCESS: for a non-trivial edit call getWhiteboardGuide FIRST; after editing, ALWAYS call getWhiteboardImage to confirm the board still looks right (layout, labels, overlaps), and patch again if it doesn't.",
|
|
4034
|
+
"operationId": "updateWhiteboardScene",
|
|
4035
|
+
"tags": [
|
|
4036
|
+
"whiteboards"
|
|
4037
|
+
],
|
|
4038
|
+
"requestBody": {
|
|
4039
|
+
"required": false,
|
|
4040
|
+
"content": {
|
|
4041
|
+
"application/json": {
|
|
4042
|
+
"schema": {
|
|
4043
|
+
"type": "object",
|
|
4044
|
+
"properties": {
|
|
4045
|
+
"documentId": {
|
|
4046
|
+
"type": "string"
|
|
4047
|
+
},
|
|
4048
|
+
"elements": {
|
|
4049
|
+
"type": "array",
|
|
4050
|
+
"description": "Elements to write. For mode 'patch', each may be a partial { id, ...changedFields } merged into the matching element by id; full Excalidraw elements for 'replace'/'append' (or new ids in 'patch').",
|
|
4051
|
+
"items": {
|
|
4052
|
+
"type": "object"
|
|
4053
|
+
}
|
|
4054
|
+
},
|
|
4055
|
+
"mode": {
|
|
4056
|
+
"type": "string",
|
|
4057
|
+
"enum": [
|
|
4058
|
+
"patch",
|
|
4059
|
+
"append",
|
|
4060
|
+
"replace"
|
|
4061
|
+
],
|
|
4062
|
+
"description": "patch (DEFAULT — merge by id, keep the rest), append (add only), or replace (overwrite the whole scene)."
|
|
4063
|
+
},
|
|
4064
|
+
"deleteIds": {
|
|
4065
|
+
"type": "array",
|
|
4066
|
+
"items": {
|
|
4067
|
+
"type": "string"
|
|
4068
|
+
},
|
|
4069
|
+
"description": "Element ids to remove from the scene."
|
|
4070
|
+
},
|
|
4071
|
+
"appState": {
|
|
4072
|
+
"type": "object",
|
|
4073
|
+
"description": "Optional Excalidraw appState fields to merge (e.g. viewBackgroundColor)."
|
|
4074
|
+
},
|
|
4075
|
+
"files": {
|
|
4076
|
+
"type": "object",
|
|
4077
|
+
"description": "Optional Excalidraw BinaryFiles map (for embedded images), merged in."
|
|
4078
|
+
}
|
|
4079
|
+
},
|
|
4080
|
+
"required": [
|
|
4081
|
+
"documentId"
|
|
4082
|
+
]
|
|
4083
|
+
}
|
|
4084
|
+
}
|
|
4085
|
+
}
|
|
4086
|
+
},
|
|
4087
|
+
"responses": {
|
|
4088
|
+
"200": {
|
|
4089
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
4090
|
+
"content": {
|
|
4091
|
+
"application/json": {
|
|
4092
|
+
"schema": {
|
|
4093
|
+
"type": "object",
|
|
4094
|
+
"additionalProperties": true
|
|
4095
|
+
}
|
|
4096
|
+
}
|
|
4097
|
+
}
|
|
4098
|
+
},
|
|
4099
|
+
"400": {
|
|
4100
|
+
"description": "Validation error.",
|
|
4101
|
+
"content": {
|
|
4102
|
+
"application/json": {
|
|
4103
|
+
"schema": {
|
|
4104
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4105
|
+
}
|
|
4106
|
+
}
|
|
4107
|
+
}
|
|
4108
|
+
},
|
|
4109
|
+
"401": {
|
|
4110
|
+
"description": "Missing or invalid credentials.",
|
|
4111
|
+
"content": {
|
|
4112
|
+
"application/json": {
|
|
4113
|
+
"schema": {
|
|
4114
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4115
|
+
}
|
|
4116
|
+
}
|
|
4117
|
+
}
|
|
4118
|
+
},
|
|
4119
|
+
"403": {
|
|
4120
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
4121
|
+
"content": {
|
|
4122
|
+
"application/json": {
|
|
4123
|
+
"schema": {
|
|
4124
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4125
|
+
}
|
|
4126
|
+
}
|
|
4127
|
+
}
|
|
4128
|
+
},
|
|
4129
|
+
"404": {
|
|
4130
|
+
"description": "Resource not found.",
|
|
4131
|
+
"content": {
|
|
4132
|
+
"application/json": {
|
|
4133
|
+
"schema": {
|
|
4134
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4135
|
+
}
|
|
4136
|
+
}
|
|
4137
|
+
}
|
|
4138
|
+
},
|
|
4139
|
+
"422": {
|
|
4140
|
+
"description": "Body did not match the tool's input schema.",
|
|
4141
|
+
"content": {
|
|
4142
|
+
"application/json": {
|
|
4143
|
+
"schema": {
|
|
4144
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4145
|
+
}
|
|
4146
|
+
}
|
|
4147
|
+
}
|
|
4148
|
+
},
|
|
4149
|
+
"500": {
|
|
4150
|
+
"description": "Server error.",
|
|
4151
|
+
"content": {
|
|
4152
|
+
"application/json": {
|
|
4153
|
+
"schema": {
|
|
4154
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4155
|
+
}
|
|
4156
|
+
}
|
|
4157
|
+
}
|
|
4158
|
+
}
|
|
4159
|
+
}
|
|
4160
|
+
}
|
|
4161
|
+
},
|
|
4162
|
+
"/tools/addWhiteboardElements": {
|
|
4163
|
+
"post": {
|
|
4164
|
+
"summary": "addWhiteboardElements",
|
|
4165
|
+
"description": "Author shapes onto a whiteboard from high-level specs (you do NOT need the full Excalidraw element schema). Appends to the canvas. Expressive enough to reproduce real Excalidraw templates (sticky-note brainstorm grids, sketchy mind maps, flowcharts). Each spec: { type: 'rectangle'|'ellipse'|'diamond'|'sticky'|'text'|'arrow'|'line'|'frame'|'image'|'stencil', id?, x, y, width, height, text? (STRONGLY PREFER setting a shape's label via its own `text` — it becomes a centered, auto-WRAPPED bound label fitted to the shape; do NOT drop a separate type:'text' element on top of a shape as its label. Standalone type:'text' is for free-floating titles/notes and now also wraps to its width; Yes/No label on an arrow — emojis are fine, e.g. 'Risks ⚠️'), fontSize?, fontFamily? (1=hand-drawn default, 2=normal, 3=code), textAlign?, backgroundColor? (name 'blue'/'green'/'yellow'/'pink'/'violet'/'orange'/'teal'/… or hex), strokeColor?, fillStyle? ('solid'|'hachure'|'cross-hatch'), strokeStyle? ('solid'|'dashed'|'dotted' — use 'dashed' for grid/category borders), strokeWidth? (1 thin/2 bold/4 extra), roughness? (0 clean, 1 default, 2 very sketchy/hand-drawn — use 2 for organic mind maps), roundness? (number type or null for sharp), opacity?, name? (frame title), frameId? (put a shape inside a frame), start?:{id}, end?:{id} (connect arrows/lines to shapes by id — connectors AUTO-CLIP to the shape edges, never overrun to the centre, AUTO-ROUTE around any shapes in between so a decision's No/loop-back branch never cuts straight through the boxes between source and target, and bound text auto-wraps + centres), routing? ('straight' default | 'elbow' for clean right-angle flowchart/org-chart connectors | 'curved'), startArrowhead?/endArrowhead? (arrowheads are SOLID filled triangles by default — just OMIT them. Pass null for a plain mind-map spoke with no head. Do NOT pass 'arrow': that is Excalidraw's open 'V' and is auto-upgraded to a solid triangle anyway), points? ([[0,0],[dx,dy]] relative, only for manual geometry — almost never needed; binding by id is better), props? (escape hatch: any other Excalidraw field) }. ARCHITECTURE ICONS: to place a software-architecture icon (AWS/Azure/GCP/Docker/Kubernetes/databases/etc.), first call listArchitectureIcons to find one, then add a spec { type:'image', iconPath:'<relative_url e.g. dev/docker.svg>', x, y, width:96, height:96, text?:'<caption shown below>' } — the icon is stored as a URL reference (never base64). Use imageUrl instead of iconPath for any other public image. Combine icons with labelled boxes + elbow arrows for clean architecture diagrams. LIBRARY STENCILS: for hand-drawn, on-brand elements (sticky notes, scrum/kanban columns, flowchart symbols, UML/ER, BPMN, org-chart nodes, wireframe widgets, stick figures), FIRST call listWhiteboardStencils to find one, then add { type:'stencil', stencilKey:'<key from listWhiteboardStencils>', x, y } (or { type:'stencil', stencil:'<name e.g. yellow sticky note>', pack?:'<pack>', x, y } to fuzzy-match by name). STRONGLY prefer these over plain rectangles whenever the user asks for sticky notes, kanban/scrum/story boards, flowcharts, wireframes/mockups, org charts, etc. FRAMES: a frame is a NON-DESTRUCTIVE, ANY-SIZE container. To enclose shapes that ALREADY exist, add ONE type:'frame' sized to cover them (Excalidraw auto-captures elements inside a frame's bounds) or set those shapes' frameId — never recreate or delete-and-redraw content just to frame it. If a frame doesn't fully cover its content, just RESIZE the frame (patch its width/height). Deleting a frame (deleteIds:[frameId]) leaves all its contents intact on the canvas — it only removes the frame border + title. PRESENTATION/SLIDES: when the user wants a presentation or slide deck, create type:'frame' slides sized width:1280,height:720 (16:9), laid out LEFT-TO-RIGHT at the same y (x: 0, then 1440, 2880, 4320, …), each with a `name` (the slide title). Put every slide's shapes/text/images INSIDE its frame by setting their frameId to that frame's id (give the frame an id and reference it). Slides play in order (left-to-right, then top-to-bottom) in the board's Present mode and export to PPTX, so one frame = one slide. FLOWCHART recipe: rectangles (roundness null for sharp process boxes), diamonds for decisions, arrows with routing:'elbow' and Yes/No as the arrow's text. Use type 'sticky' for solid-fill notes; type 'line' with no arrowheads + roughness:2 for sketchy mind-map spokes. Give shapes ids and reference them from connectors. Connectors may also bind to shapes ALREADY on the board by their id (get them via getWhiteboard includeElements:true) — you do NOT need to resend existing shapes; the server reads the live scene to bind the arrow and route it around the other boxes. Great for brainstorms, mind maps, flowcharts, org charts, SWOT, retros. PROCESS: for any non-trivial board call getWhiteboardGuide FIRST to plan it; then after adding, ALWAYS call getWhiteboardImage to SEE the result and check layout, labels, spacing, overlaps and how shapes connect — if anything looks off, fix it with updateWhiteboardScene (patch by id) and render again, iterating until it looks right.",
|
|
4166
|
+
"operationId": "addWhiteboardElements",
|
|
4167
|
+
"tags": [
|
|
4168
|
+
"whiteboards"
|
|
4169
|
+
],
|
|
4170
|
+
"requestBody": {
|
|
4171
|
+
"required": false,
|
|
4172
|
+
"content": {
|
|
4173
|
+
"application/json": {
|
|
4174
|
+
"schema": {
|
|
4175
|
+
"type": "object",
|
|
4176
|
+
"properties": {
|
|
4177
|
+
"documentId": {
|
|
4178
|
+
"type": "string"
|
|
4179
|
+
},
|
|
4180
|
+
"shapes": {
|
|
4181
|
+
"type": "array",
|
|
4182
|
+
"description": "Non-empty array of shape specs to append.",
|
|
4183
|
+
"items": {
|
|
4184
|
+
"type": "object"
|
|
4185
|
+
},
|
|
4186
|
+
"minItems": 1
|
|
4187
|
+
}
|
|
4188
|
+
},
|
|
4189
|
+
"required": [
|
|
4190
|
+
"documentId",
|
|
4191
|
+
"shapes"
|
|
4192
|
+
]
|
|
4193
|
+
}
|
|
4194
|
+
}
|
|
4195
|
+
}
|
|
4196
|
+
},
|
|
4197
|
+
"responses": {
|
|
4198
|
+
"200": {
|
|
4199
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
4200
|
+
"content": {
|
|
4201
|
+
"application/json": {
|
|
4202
|
+
"schema": {
|
|
4203
|
+
"type": "object",
|
|
4204
|
+
"additionalProperties": true
|
|
4205
|
+
}
|
|
4206
|
+
}
|
|
4207
|
+
}
|
|
4208
|
+
},
|
|
4209
|
+
"400": {
|
|
4210
|
+
"description": "Validation error.",
|
|
4211
|
+
"content": {
|
|
4212
|
+
"application/json": {
|
|
4213
|
+
"schema": {
|
|
4214
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4215
|
+
}
|
|
4216
|
+
}
|
|
4217
|
+
}
|
|
4218
|
+
},
|
|
4219
|
+
"401": {
|
|
4220
|
+
"description": "Missing or invalid credentials.",
|
|
4221
|
+
"content": {
|
|
4222
|
+
"application/json": {
|
|
4223
|
+
"schema": {
|
|
4224
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4225
|
+
}
|
|
4226
|
+
}
|
|
4227
|
+
}
|
|
4228
|
+
},
|
|
4229
|
+
"403": {
|
|
4230
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
4231
|
+
"content": {
|
|
4232
|
+
"application/json": {
|
|
4233
|
+
"schema": {
|
|
4234
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4235
|
+
}
|
|
4236
|
+
}
|
|
4237
|
+
}
|
|
4238
|
+
},
|
|
4239
|
+
"404": {
|
|
4240
|
+
"description": "Resource not found.",
|
|
4241
|
+
"content": {
|
|
4242
|
+
"application/json": {
|
|
4243
|
+
"schema": {
|
|
4244
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4245
|
+
}
|
|
4246
|
+
}
|
|
4247
|
+
}
|
|
4248
|
+
},
|
|
4249
|
+
"422": {
|
|
4250
|
+
"description": "Body did not match the tool's input schema.",
|
|
4251
|
+
"content": {
|
|
4252
|
+
"application/json": {
|
|
4253
|
+
"schema": {
|
|
4254
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4255
|
+
}
|
|
4256
|
+
}
|
|
4257
|
+
}
|
|
4258
|
+
},
|
|
4259
|
+
"500": {
|
|
4260
|
+
"description": "Server error.",
|
|
4261
|
+
"content": {
|
|
4262
|
+
"application/json": {
|
|
4263
|
+
"schema": {
|
|
4264
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4265
|
+
}
|
|
4266
|
+
}
|
|
4267
|
+
}
|
|
4268
|
+
}
|
|
4269
|
+
}
|
|
4270
|
+
}
|
|
4271
|
+
},
|
|
4272
|
+
"/tools/insertWhiteboardImage": {
|
|
4273
|
+
"post": {
|
|
4274
|
+
"summary": "insertWhiteboardImage",
|
|
4275
|
+
"description": "Insert a real IMAGE (photo, screenshot, logo, picture) into a whiteboard — the storage-backed equivalent of insertImageInDocument. Provide the image as imageUrl (fetched and re-hosted), imageBase64, or imageBinary; for large files call createImageUploadSession(documentId) first then pass the returned assetUrl as imageUrl. The bytes are stored in the document-images bucket and the scene only holds a reference (never base64), exactly like pasted images. Options: caption (a text label placed + grouped beneath the image), width/height in px to RESIZE (if only one is given the other follows a 4:3 ratio; ~360px wide if neither), and placement via x/y (top-left) OR align ('left'|'center'|'right', positioned just below existing content) — omit both to auto-place to the right of the current content. After inserting, call getWhiteboardImage to verify. To move or resize the image later, patch its element via updateWhiteboardScene (mode:'patch' with {id, x, y, width, height}). For curated software-architecture ICONS (AWS/Docker/etc.) use addWhiteboardElements with an {type:'image', iconPath} spec instead.",
|
|
4276
|
+
"operationId": "insertWhiteboardImage",
|
|
4277
|
+
"tags": [
|
|
4278
|
+
"whiteboards"
|
|
4279
|
+
],
|
|
4280
|
+
"requestBody": {
|
|
4281
|
+
"required": false,
|
|
4282
|
+
"content": {
|
|
4283
|
+
"application/json": {
|
|
4284
|
+
"schema": {
|
|
4285
|
+
"type": "object",
|
|
4286
|
+
"properties": {
|
|
4287
|
+
"documentId": {
|
|
4288
|
+
"type": "string",
|
|
4289
|
+
"description": "The whiteboard's documentId."
|
|
4290
|
+
},
|
|
4291
|
+
"imageUrl": {
|
|
4292
|
+
"type": "string",
|
|
4293
|
+
"description": "URL to fetch the image from, or an assetUrl returned by createImageUploadSession."
|
|
4294
|
+
},
|
|
4295
|
+
"imageBase64": {
|
|
4296
|
+
"type": "string",
|
|
4297
|
+
"description": "Base64-encoded image bytes (a data: URL prefix is allowed). Best for small images."
|
|
4298
|
+
},
|
|
4299
|
+
"imageBinary": {
|
|
4300
|
+
"type": "array",
|
|
4301
|
+
"items": {
|
|
4302
|
+
"type": "number"
|
|
4303
|
+
},
|
|
4304
|
+
"description": "Raw image bytes as an array of 0-255 values (alternative to imageBase64)."
|
|
4305
|
+
},
|
|
4306
|
+
"caption": {
|
|
4307
|
+
"type": "string",
|
|
4308
|
+
"description": "Optional caption shown as a text label grouped beneath the image."
|
|
4309
|
+
},
|
|
4310
|
+
"width": {
|
|
4311
|
+
"type": "number",
|
|
4312
|
+
"description": "Display width in px (resize). Defaults to ~360."
|
|
4313
|
+
},
|
|
4314
|
+
"height": {
|
|
4315
|
+
"type": "number",
|
|
4316
|
+
"description": "Display height in px. Derived from width at 4:3 if omitted."
|
|
4317
|
+
},
|
|
4318
|
+
"x": {
|
|
4319
|
+
"type": "number",
|
|
4320
|
+
"description": "Top-left x on the canvas. Omit to auto-place."
|
|
4321
|
+
},
|
|
4322
|
+
"y": {
|
|
4323
|
+
"type": "number",
|
|
4324
|
+
"description": "Top-left y on the canvas. Omit to auto-place."
|
|
4325
|
+
},
|
|
4326
|
+
"align": {
|
|
4327
|
+
"type": "string",
|
|
4328
|
+
"enum": [
|
|
4329
|
+
"left",
|
|
4330
|
+
"center",
|
|
4331
|
+
"right"
|
|
4332
|
+
],
|
|
4333
|
+
"description": "Horizontal alignment relative to existing content (placed below it). Ignored if x/y are provided."
|
|
4334
|
+
},
|
|
4335
|
+
"fileName": {
|
|
4336
|
+
"type": "string",
|
|
4337
|
+
"description": "Optional original filename (for storage + type hinting)."
|
|
4338
|
+
}
|
|
4339
|
+
},
|
|
4340
|
+
"required": [
|
|
4341
|
+
"documentId"
|
|
4342
|
+
]
|
|
4343
|
+
}
|
|
4344
|
+
}
|
|
4345
|
+
}
|
|
4346
|
+
},
|
|
4347
|
+
"responses": {
|
|
4348
|
+
"200": {
|
|
4349
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
4350
|
+
"content": {
|
|
4351
|
+
"application/json": {
|
|
4352
|
+
"schema": {
|
|
4353
|
+
"type": "object",
|
|
4354
|
+
"additionalProperties": true
|
|
4355
|
+
}
|
|
4356
|
+
}
|
|
4357
|
+
}
|
|
4358
|
+
},
|
|
4359
|
+
"400": {
|
|
4360
|
+
"description": "Validation error.",
|
|
4361
|
+
"content": {
|
|
4362
|
+
"application/json": {
|
|
4363
|
+
"schema": {
|
|
4364
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4365
|
+
}
|
|
4366
|
+
}
|
|
4367
|
+
}
|
|
4368
|
+
},
|
|
4369
|
+
"401": {
|
|
4370
|
+
"description": "Missing or invalid credentials.",
|
|
4371
|
+
"content": {
|
|
4372
|
+
"application/json": {
|
|
4373
|
+
"schema": {
|
|
4374
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4375
|
+
}
|
|
4376
|
+
}
|
|
4377
|
+
}
|
|
4378
|
+
},
|
|
4379
|
+
"403": {
|
|
4380
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
4381
|
+
"content": {
|
|
4382
|
+
"application/json": {
|
|
4383
|
+
"schema": {
|
|
4384
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4385
|
+
}
|
|
4386
|
+
}
|
|
4387
|
+
}
|
|
4388
|
+
},
|
|
4389
|
+
"404": {
|
|
4390
|
+
"description": "Resource not found.",
|
|
4391
|
+
"content": {
|
|
4392
|
+
"application/json": {
|
|
4393
|
+
"schema": {
|
|
4394
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4395
|
+
}
|
|
4396
|
+
}
|
|
4397
|
+
}
|
|
4398
|
+
},
|
|
4399
|
+
"422": {
|
|
4400
|
+
"description": "Body did not match the tool's input schema.",
|
|
4401
|
+
"content": {
|
|
4402
|
+
"application/json": {
|
|
4403
|
+
"schema": {
|
|
4404
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4405
|
+
}
|
|
4406
|
+
}
|
|
4407
|
+
}
|
|
4408
|
+
},
|
|
4409
|
+
"500": {
|
|
4410
|
+
"description": "Server error.",
|
|
4411
|
+
"content": {
|
|
4412
|
+
"application/json": {
|
|
4413
|
+
"schema": {
|
|
4414
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4415
|
+
}
|
|
4416
|
+
}
|
|
4417
|
+
}
|
|
4418
|
+
}
|
|
4419
|
+
}
|
|
4420
|
+
}
|
|
4421
|
+
},
|
|
4422
|
+
"/tools/insertWhiteboardDiagram": {
|
|
4423
|
+
"post": {
|
|
4424
|
+
"summary": "insertWhiteboardDiagram",
|
|
4425
|
+
"description": "Insert a real DIAGRAM (BPMN, Diagrams-as-Code / any DSL: mermaid, d2, plantuml, graphviz, …) into a whiteboard as an editable SB diagram element. Provide documentId, diagramType (call listDiagramTypes / getDiagramTypeGuide), and source (the DSL). The diagram is rendered to an image stored like a pasted image, and its editable source is kept in a sidecar so it stays a live, re-openable diagram on the board (double-click on the canvas opens the BPMN / code / AI editor). Options: caption (label beneath it), width/height to size it, and x/y or align ('left'|'center'|'right') to place it (defaults to the right of existing content). After inserting, call getWhiteboardImage to see it and verify it rendered correctly (fix the source and re-insert if it is wrong). For a plain picture (not a diagram) use insertWhiteboardImage; to generate a diagram image WITHOUT inserting use renderDiagram.",
|
|
4426
|
+
"operationId": "insertWhiteboardDiagram",
|
|
4427
|
+
"tags": [
|
|
4428
|
+
"whiteboards"
|
|
4429
|
+
],
|
|
4430
|
+
"requestBody": {
|
|
4431
|
+
"required": false,
|
|
4432
|
+
"content": {
|
|
4433
|
+
"application/json": {
|
|
4434
|
+
"schema": {
|
|
4435
|
+
"type": "object",
|
|
4436
|
+
"properties": {
|
|
4437
|
+
"documentId": {
|
|
4438
|
+
"type": "string",
|
|
4439
|
+
"description": "The whiteboard's documentId."
|
|
4440
|
+
},
|
|
4441
|
+
"diagramType": {
|
|
4442
|
+
"type": "string",
|
|
4443
|
+
"description": "Diagram language, e.g. 'bpmn', 'mermaid', 'd2', 'plantuml', 'graphviz'. See listDiagramTypes."
|
|
4444
|
+
},
|
|
4445
|
+
"source": {
|
|
4446
|
+
"type": "string",
|
|
4447
|
+
"description": "The diagram DSL / code."
|
|
4448
|
+
},
|
|
4449
|
+
"caption": {
|
|
4450
|
+
"type": "string",
|
|
4451
|
+
"description": "Optional caption shown beneath the diagram."
|
|
4452
|
+
},
|
|
4453
|
+
"width": {
|
|
4454
|
+
"type": "number",
|
|
4455
|
+
"description": "Display width in px (aspect ratio preserved). Defaults to a capped natural size."
|
|
4456
|
+
},
|
|
4457
|
+
"height": {
|
|
4458
|
+
"type": "number",
|
|
4459
|
+
"description": "Display height in px (defaults from width + aspect)."
|
|
4460
|
+
},
|
|
4461
|
+
"x": {
|
|
4462
|
+
"type": "number",
|
|
4463
|
+
"description": "Top-left x on the canvas. Omit to auto-place."
|
|
4464
|
+
},
|
|
4465
|
+
"y": {
|
|
4466
|
+
"type": "number",
|
|
4467
|
+
"description": "Top-left y on the canvas. Omit to auto-place."
|
|
4468
|
+
},
|
|
4469
|
+
"align": {
|
|
4470
|
+
"type": "string",
|
|
4471
|
+
"enum": [
|
|
4472
|
+
"left",
|
|
4473
|
+
"center",
|
|
4474
|
+
"right"
|
|
4475
|
+
],
|
|
4476
|
+
"description": "Horizontal alignment relative to existing content (placed below it). Ignored if x/y given."
|
|
4477
|
+
}
|
|
4478
|
+
},
|
|
4479
|
+
"required": [
|
|
4480
|
+
"documentId",
|
|
4481
|
+
"diagramType",
|
|
4482
|
+
"source"
|
|
4483
|
+
]
|
|
4484
|
+
}
|
|
4485
|
+
}
|
|
4486
|
+
}
|
|
4487
|
+
},
|
|
4488
|
+
"responses": {
|
|
4489
|
+
"200": {
|
|
4490
|
+
"description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
|
|
4491
|
+
"content": {
|
|
4492
|
+
"application/json": {
|
|
4493
|
+
"schema": {
|
|
4494
|
+
"type": "object",
|
|
4495
|
+
"additionalProperties": true
|
|
4496
|
+
}
|
|
4497
|
+
}
|
|
4498
|
+
}
|
|
4499
|
+
},
|
|
4500
|
+
"400": {
|
|
4501
|
+
"description": "Validation error.",
|
|
4502
|
+
"content": {
|
|
4503
|
+
"application/json": {
|
|
4504
|
+
"schema": {
|
|
4505
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4506
|
+
}
|
|
4507
|
+
}
|
|
4508
|
+
}
|
|
4509
|
+
},
|
|
4510
|
+
"401": {
|
|
4511
|
+
"description": "Missing or invalid credentials.",
|
|
4512
|
+
"content": {
|
|
4513
|
+
"application/json": {
|
|
4514
|
+
"schema": {
|
|
4515
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4516
|
+
}
|
|
4517
|
+
}
|
|
4518
|
+
}
|
|
4519
|
+
},
|
|
4520
|
+
"403": {
|
|
4521
|
+
"description": "Authenticated but lacking the required permission or feature flag.",
|
|
4522
|
+
"content": {
|
|
4523
|
+
"application/json": {
|
|
4524
|
+
"schema": {
|
|
4525
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4526
|
+
}
|
|
4527
|
+
}
|
|
4528
|
+
}
|
|
4529
|
+
},
|
|
4530
|
+
"404": {
|
|
4531
|
+
"description": "Resource not found.",
|
|
4532
|
+
"content": {
|
|
4533
|
+
"application/json": {
|
|
4534
|
+
"schema": {
|
|
4535
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4536
|
+
}
|
|
4537
|
+
}
|
|
4538
|
+
}
|
|
4539
|
+
},
|
|
4540
|
+
"422": {
|
|
4541
|
+
"description": "Body did not match the tool's input schema.",
|
|
4542
|
+
"content": {
|
|
4543
|
+
"application/json": {
|
|
4544
|
+
"schema": {
|
|
4545
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4546
|
+
}
|
|
4547
|
+
}
|
|
4548
|
+
}
|
|
4549
|
+
},
|
|
4550
|
+
"500": {
|
|
4551
|
+
"description": "Server error.",
|
|
4552
|
+
"content": {
|
|
4553
|
+
"application/json": {
|
|
4554
|
+
"schema": {
|
|
4555
|
+
"$ref": "#/components/schemas/ErrorResponse"
|
|
4556
|
+
}
|
|
4557
|
+
}
|
|
4558
|
+
}
|
|
4559
|
+
}
|
|
4560
|
+
}
|
|
4561
|
+
}
|
|
4562
|
+
},
|
|
4563
|
+
"/tools/listWhiteboardStencils": {
|
|
4564
|
+
"post": {
|
|
4565
|
+
"summary": "listWhiteboardStencils",
|
|
4566
|
+
"description": "Search the built-in library of STRUCTURAL whiteboard stencils — ready-made, hand-drawn multi-element graphics: sticky notes (post-it), scrum-board columns, flowchart symbols, UML/ER, BPMN, org-chart nodes, gantt, lo-fi/UX wireframe widgets, charts, and stick figures. Returns matching stencils each with a `key`, name, pack and category, plus the full pack/category lists. Place one via addWhiteboardElements({type:'stencil', stencilKey:'<key>', x, y}). These look far richer and more on-brand than plain rectangles — use them when the user asks for sticky notes, kanban/scrum boards, flowcharts, wireframes, mockups, etc. SEARCH TIPS: prefer BROAD single words ('sticky', 'decision', 'actor', 'phone', 'process') — multi-word exact phrases often miss. If an exact query matches nothing the result is auto-broadened to close candidates (broadened:true is set); you can also pass pack/category to browse. When ANY returned stencil reasonably fits, PLACE it instead of drawing a plain rectangle — do not abandon stencils just because your first phrase returned 0. The library does NOT contain free-form 'cloud' / 'hat' / 'thought-bubble' shapes; approximate those with the closest stencil (e.g. a sticky note or a simple shape) or fall back to a plain shape only when nothing fits. For cloud/architecture ICONS (AWS/Azure/GCP/Docker/Kubernetes/databases) use listArchitectureIcons instead.",
|
|
4567
|
+
"operationId": "listWhiteboardStencils",
|
|
4568
|
+
"tags": [
|
|
4569
|
+
"whiteboards"
|
|
2591
4570
|
],
|
|
2592
4571
|
"requestBody": {
|
|
2593
4572
|
"required": false,
|
|
@@ -2596,56 +4575,23 @@
|
|
|
2596
4575
|
"schema": {
|
|
2597
4576
|
"type": "object",
|
|
2598
4577
|
"properties": {
|
|
2599
|
-
"
|
|
2600
|
-
"type": "string"
|
|
2601
|
-
},
|
|
2602
|
-
"title": {
|
|
4578
|
+
"query": {
|
|
2603
4579
|
"type": "string",
|
|
2604
|
-
"description": "
|
|
4580
|
+
"description": "Free-text search across name + pack + category (e.g. 'sticky note', 'decision', 'database table', 'phone frame', 'actor')."
|
|
2605
4581
|
},
|
|
2606
|
-
"
|
|
4582
|
+
"pack": {
|
|
2607
4583
|
"type": "string",
|
|
2608
|
-
"description": "
|
|
2609
|
-
},
|
|
2610
|
-
"versionTimestamp": {
|
|
2611
|
-
"type": "number",
|
|
2612
|
-
"description": "Version timestamp from getDocument() for optimistic locking."
|
|
4584
|
+
"description": "Restrict to one pack, e.g. 'Sticky Notes', 'Flowchart', 'BPMN', 'UML & ER', 'Scrum Board', 'Lo-Fi Wireframes', 'Org Chart'."
|
|
2613
4585
|
},
|
|
2614
|
-
"
|
|
4586
|
+
"category": {
|
|
2615
4587
|
"type": "string",
|
|
2616
|
-
"description": "
|
|
4588
|
+
"description": "Filter by category: 'Notes & Planning', 'Diagramming', 'UI & Wireframing', 'Data & Charts', 'People & Fun'."
|
|
2617
4589
|
},
|
|
2618
|
-
"
|
|
2619
|
-
"type": "
|
|
2620
|
-
"description": "
|
|
2621
|
-
"items": {
|
|
2622
|
-
"type": "object",
|
|
2623
|
-
"properties": {
|
|
2624
|
-
"startLine": {
|
|
2625
|
-
"type": "number",
|
|
2626
|
-
"description": "1-based start line."
|
|
2627
|
-
},
|
|
2628
|
-
"endLine": {
|
|
2629
|
-
"type": "number",
|
|
2630
|
-
"description": "1-based end line (inclusive)."
|
|
2631
|
-
},
|
|
2632
|
-
"replacement": {
|
|
2633
|
-
"type": "string",
|
|
2634
|
-
"description": "Replacement text. Empty string to delete lines."
|
|
2635
|
-
}
|
|
2636
|
-
},
|
|
2637
|
-
"required": [
|
|
2638
|
-
"startLine",
|
|
2639
|
-
"endLine",
|
|
2640
|
-
"replacement"
|
|
2641
|
-
]
|
|
2642
|
-
}
|
|
4590
|
+
"limit": {
|
|
4591
|
+
"type": "number",
|
|
4592
|
+
"description": "Max results (default 60, max 200)."
|
|
2643
4593
|
}
|
|
2644
|
-
}
|
|
2645
|
-
"required": [
|
|
2646
|
-
"documentId",
|
|
2647
|
-
"versionTimestamp"
|
|
2648
|
-
]
|
|
4594
|
+
}
|
|
2649
4595
|
}
|
|
2650
4596
|
}
|
|
2651
4597
|
}
|
|
@@ -2725,13 +4671,13 @@
|
|
|
2725
4671
|
}
|
|
2726
4672
|
}
|
|
2727
4673
|
},
|
|
2728
|
-
"/tools/
|
|
4674
|
+
"/tools/getWhiteboardImage": {
|
|
2729
4675
|
"post": {
|
|
2730
|
-
"summary": "
|
|
2731
|
-
"description": "
|
|
2732
|
-
"operationId": "
|
|
4676
|
+
"summary": "getWhiteboardImage",
|
|
4677
|
+
"description": "Render a whiteboard to an IMAGE so you can SEE it and confirm your edits look right, then iterate — like taking a screenshot. Returns the rendered board as a viewable PNG (default) attached to the result. Pass elementIds to render only specific shapes (e.g. to inspect one section/slide), format:'svg' for vector markup instead of a raster, or background to set the canvas colour. Call this after addWhiteboardElements/updateWhiteboardScene to check layout, overlaps, labels and alignment before continuing.",
|
|
4678
|
+
"operationId": "getWhiteboardImage",
|
|
2733
4679
|
"tags": [
|
|
2734
|
-
"
|
|
4680
|
+
"whiteboards"
|
|
2735
4681
|
],
|
|
2736
4682
|
"requestBody": {
|
|
2737
4683
|
"required": false,
|
|
@@ -2741,29 +4687,31 @@
|
|
|
2741
4687
|
"type": "object",
|
|
2742
4688
|
"properties": {
|
|
2743
4689
|
"documentId": {
|
|
2744
|
-
"type": "string"
|
|
2745
|
-
},
|
|
2746
|
-
"find": {
|
|
2747
4690
|
"type": "string",
|
|
2748
|
-
"description": "
|
|
4691
|
+
"description": "The whiteboard's documentId."
|
|
2749
4692
|
},
|
|
2750
|
-
"
|
|
4693
|
+
"format": {
|
|
2751
4694
|
"type": "string",
|
|
2752
|
-
"
|
|
4695
|
+
"enum": [
|
|
4696
|
+
"png",
|
|
4697
|
+
"svg"
|
|
4698
|
+
],
|
|
4699
|
+
"description": "png (default — a viewable raster) or svg (vector markup)."
|
|
2753
4700
|
},
|
|
2754
|
-
"
|
|
2755
|
-
"type": "
|
|
2756
|
-
"
|
|
4701
|
+
"elementIds": {
|
|
4702
|
+
"type": "array",
|
|
4703
|
+
"items": {
|
|
4704
|
+
"type": "string"
|
|
4705
|
+
},
|
|
4706
|
+
"description": "Render only these element ids (plus their bound labels + group peers) instead of the whole board."
|
|
2757
4707
|
},
|
|
2758
|
-
"
|
|
4708
|
+
"background": {
|
|
2759
4709
|
"type": "string",
|
|
2760
|
-
"description": "
|
|
4710
|
+
"description": "Canvas background colour (default white), e.g. '#ffffff' or 'transparent'."
|
|
2761
4711
|
}
|
|
2762
4712
|
},
|
|
2763
4713
|
"required": [
|
|
2764
|
-
"documentId"
|
|
2765
|
-
"find",
|
|
2766
|
-
"replace"
|
|
4714
|
+
"documentId"
|
|
2767
4715
|
]
|
|
2768
4716
|
}
|
|
2769
4717
|
}
|
|
@@ -2844,13 +4792,13 @@
|
|
|
2844
4792
|
}
|
|
2845
4793
|
}
|
|
2846
4794
|
},
|
|
2847
|
-
"/tools/
|
|
4795
|
+
"/tools/deleteWhiteboard": {
|
|
2848
4796
|
"post": {
|
|
2849
|
-
"summary": "
|
|
2850
|
-
"description": "
|
|
2851
|
-
"operationId": "
|
|
4797
|
+
"summary": "deleteWhiteboard",
|
|
4798
|
+
"description": "Delete a whiteboard (the host document and its canvas).",
|
|
4799
|
+
"operationId": "deleteWhiteboard",
|
|
2852
4800
|
"tags": [
|
|
2853
|
-
"
|
|
4801
|
+
"whiteboards"
|
|
2854
4802
|
],
|
|
2855
4803
|
"requestBody": {
|
|
2856
4804
|
"required": false,
|
|
@@ -2859,20 +4807,12 @@
|
|
|
2859
4807
|
"schema": {
|
|
2860
4808
|
"type": "object",
|
|
2861
4809
|
"properties": {
|
|
2862
|
-
"
|
|
2863
|
-
"type": "string"
|
|
2864
|
-
"description": "Diagram ID from DIAGRAM_OMITTED markers."
|
|
2865
|
-
},
|
|
2866
|
-
"fields": {
|
|
2867
|
-
"type": "array",
|
|
2868
|
-
"items": {
|
|
2869
|
-
"type": "string"
|
|
2870
|
-
},
|
|
2871
|
-
"description": "Field projection. Valid fields: diagramId, documentId, type, name, diagramCode, nlDescription, colorPlan, renderStatus, renderError, createdAt, updatedAt, versionTimestamp."
|
|
4810
|
+
"documentId": {
|
|
4811
|
+
"type": "string"
|
|
2872
4812
|
}
|
|
2873
4813
|
},
|
|
2874
4814
|
"required": [
|
|
2875
|
-
"
|
|
4815
|
+
"documentId"
|
|
2876
4816
|
]
|
|
2877
4817
|
}
|
|
2878
4818
|
}
|
|
@@ -2953,11 +4893,11 @@
|
|
|
2953
4893
|
}
|
|
2954
4894
|
}
|
|
2955
4895
|
},
|
|
2956
|
-
"/tools/
|
|
4896
|
+
"/tools/renderDiagram": {
|
|
2957
4897
|
"post": {
|
|
2958
|
-
"summary": "
|
|
2959
|
-
"description": "
|
|
2960
|
-
"operationId": "
|
|
4898
|
+
"summary": "renderDiagram",
|
|
4899
|
+
"description": "Generate a diagram from its DSL/code and get the IMAGE back — WITHOUT inserting it into any document or whiteboard. For acting as a pure diagram generator. Provide diagramType (e.g. 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'; call listDiagramTypes for the full set) and source (the diagram code). Choose format 'png' (default), 'jpeg', or 'svg'; for raster choose scale 1/2/3 for 1x/2x/3x; optional background (png only). Returns a TEMPORARY signed imageUrl that expires in 1 hour (then auto-deleted), and for png/jpeg the image inline so you can see it. To render a diagram that already lives in a document/whiteboard use getDiagramImage; to persist a new one use insertDiagramInDocument or insertWhiteboardDiagram.",
|
|
4900
|
+
"operationId": "renderDiagram",
|
|
2961
4901
|
"tags": [
|
|
2962
4902
|
"diagrams"
|
|
2963
4903
|
],
|
|
@@ -2968,73 +4908,40 @@
|
|
|
2968
4908
|
"schema": {
|
|
2969
4909
|
"type": "object",
|
|
2970
4910
|
"properties": {
|
|
2971
|
-
"
|
|
2972
|
-
"type": "string"
|
|
2973
|
-
},
|
|
2974
|
-
"documentVersionTimestamp": {
|
|
2975
|
-
"type": "number",
|
|
2976
|
-
"description": "Version timestamp from getDocument() for optimistic locking."
|
|
2977
|
-
},
|
|
2978
|
-
"type": {
|
|
2979
|
-
"type": "string",
|
|
2980
|
-
"description": "Diagram type (e.g. mermaid, plantuml, bpmn, d2). Call listDiagramTypes for all types."
|
|
2981
|
-
},
|
|
2982
|
-
"diagramCode": {
|
|
2983
|
-
"type": "string",
|
|
2984
|
-
"description": "Diagram DSL code. Call getDiagramTypeGuide for syntax."
|
|
2985
|
-
},
|
|
2986
|
-
"prompt": {
|
|
4911
|
+
"diagramType": {
|
|
2987
4912
|
"type": "string",
|
|
2988
|
-
"description": "
|
|
4913
|
+
"description": "Diagram language, e.g. 'mermaid', 'd2', 'plantuml', 'graphviz', 'bpmn', 'vegalite'. See listDiagramTypes."
|
|
2989
4914
|
},
|
|
2990
|
-
"
|
|
4915
|
+
"source": {
|
|
2991
4916
|
"type": "string",
|
|
2992
|
-
"description": "
|
|
4917
|
+
"description": "The diagram DSL / code to render."
|
|
2993
4918
|
},
|
|
2994
|
-
"
|
|
4919
|
+
"format": {
|
|
2995
4920
|
"type": "string",
|
|
2996
|
-
"description": "Alignment.",
|
|
2997
4921
|
"enum": [
|
|
2998
|
-
"
|
|
2999
|
-
"
|
|
3000
|
-
"
|
|
3001
|
-
]
|
|
3002
|
-
|
|
3003
|
-
"caption": {
|
|
3004
|
-
"type": "string",
|
|
3005
|
-
"description": "Caption below the diagram."
|
|
4922
|
+
"png",
|
|
4923
|
+
"jpeg",
|
|
4924
|
+
"svg"
|
|
4925
|
+
],
|
|
4926
|
+
"description": "png (default) or jpeg = raster; svg = vector."
|
|
3006
4927
|
},
|
|
3007
|
-
"
|
|
4928
|
+
"scale": {
|
|
3008
4929
|
"type": "number",
|
|
3009
|
-
"
|
|
4930
|
+
"enum": [
|
|
4931
|
+
1,
|
|
4932
|
+
2,
|
|
4933
|
+
3
|
|
4934
|
+
],
|
|
4935
|
+
"description": "Raster resolution multiplier 1x/2x/3x (default 2). Ignored for svg."
|
|
3010
4936
|
},
|
|
3011
|
-
"
|
|
3012
|
-
"type": "
|
|
3013
|
-
"description": "
|
|
3014
|
-
"properties": {
|
|
3015
|
-
"byElementId": {
|
|
3016
|
-
"type": "object",
|
|
3017
|
-
"description": "Map of element IDs to color swatch names.",
|
|
3018
|
-
"additionalProperties": {
|
|
3019
|
-
"type": "string"
|
|
3020
|
-
}
|
|
3021
|
-
}
|
|
3022
|
-
},
|
|
3023
|
-
"required": [
|
|
3024
|
-
"byElementId"
|
|
3025
|
-
]
|
|
4937
|
+
"background": {
|
|
4938
|
+
"type": "string",
|
|
4939
|
+
"description": "Background for png/jpeg, e.g. '#ffffff' or 'transparent' (png only)."
|
|
3026
4940
|
}
|
|
3027
4941
|
},
|
|
3028
4942
|
"required": [
|
|
3029
|
-
"
|
|
3030
|
-
"
|
|
3031
|
-
"type",
|
|
3032
|
-
"diagramCode",
|
|
3033
|
-
"prompt",
|
|
3034
|
-
"nlDescription",
|
|
3035
|
-
"align",
|
|
3036
|
-
"caption",
|
|
3037
|
-
"afterLine"
|
|
4943
|
+
"diagramType",
|
|
4944
|
+
"source"
|
|
3038
4945
|
]
|
|
3039
4946
|
}
|
|
3040
4947
|
}
|
|
@@ -3115,11 +5022,11 @@
|
|
|
3115
5022
|
}
|
|
3116
5023
|
}
|
|
3117
5024
|
},
|
|
3118
|
-
"/tools/
|
|
5025
|
+
"/tools/getDiagramImage": {
|
|
3119
5026
|
"post": {
|
|
3120
|
-
"summary": "
|
|
3121
|
-
"description": "
|
|
3122
|
-
"operationId": "
|
|
5027
|
+
"summary": "getDiagramImage",
|
|
5028
|
+
"description": "Render a diagram that ALREADY exists in a document to an IMAGE (svg/png/jpeg @1x/2x/3x) and return it — a temporary signed URL (expires in 1 hour) plus, for png/jpeg, the image inline so you can see it. Pass the diagramId (from getDocument's DIAGRAM markers or getDiagramInDocument). Reuses the diagram's cached server render when available (pixel-identical to the editor). Use renderDiagram instead to generate from raw DSL without an existing diagram.",
|
|
5029
|
+
"operationId": "getDiagramImage",
|
|
3123
5030
|
"tags": [
|
|
3124
5031
|
"diagrams"
|
|
3125
5032
|
],
|
|
@@ -3132,57 +5039,33 @@
|
|
|
3132
5039
|
"properties": {
|
|
3133
5040
|
"diagramId": {
|
|
3134
5041
|
"type": "string",
|
|
3135
|
-
"description": "
|
|
3136
|
-
},
|
|
3137
|
-
"diagramCode": {
|
|
3138
|
-
"type": "string",
|
|
3139
|
-
"description": "New diagram DSL source code. REQUIRED to change what the diagram visually renders. Call getDiagramTypeGuide for syntax. Must provide the COMPLETE updated DSL, not just the changed parts."
|
|
3140
|
-
},
|
|
3141
|
-
"prompt": {
|
|
3142
|
-
"type": "string",
|
|
3143
|
-
"description": "New short description (metadata only — does NOT change the rendered diagram)."
|
|
5042
|
+
"description": "The diagram's id (from getDocument markers / getDiagramInDocument)."
|
|
3144
5043
|
},
|
|
3145
|
-
"
|
|
5044
|
+
"format": {
|
|
3146
5045
|
"type": "string",
|
|
3147
|
-
"
|
|
5046
|
+
"enum": [
|
|
5047
|
+
"png",
|
|
5048
|
+
"jpeg",
|
|
5049
|
+
"svg"
|
|
5050
|
+
],
|
|
5051
|
+
"description": "png (default) or jpeg = raster; svg = vector."
|
|
3148
5052
|
},
|
|
3149
|
-
"
|
|
3150
|
-
"type": "
|
|
3151
|
-
"description": "Alignment.",
|
|
5053
|
+
"scale": {
|
|
5054
|
+
"type": "number",
|
|
3152
5055
|
"enum": [
|
|
3153
|
-
|
|
3154
|
-
|
|
3155
|
-
|
|
3156
|
-
]
|
|
5056
|
+
1,
|
|
5057
|
+
2,
|
|
5058
|
+
3
|
|
5059
|
+
],
|
|
5060
|
+
"description": "Raster resolution multiplier 1x/2x/3x (default 2). Ignored for svg."
|
|
3157
5061
|
},
|
|
3158
|
-
"
|
|
5062
|
+
"background": {
|
|
3159
5063
|
"type": "string",
|
|
3160
|
-
"description": "
|
|
3161
|
-
},
|
|
3162
|
-
"colorPlan": {
|
|
3163
|
-
"type": "object",
|
|
3164
|
-
"description": "BPMN only. Updated color plan. Set to null to remove.",
|
|
3165
|
-
"properties": {
|
|
3166
|
-
"byElementId": {
|
|
3167
|
-
"type": "object",
|
|
3168
|
-
"description": "Map of element IDs to color swatch names.",
|
|
3169
|
-
"additionalProperties": {
|
|
3170
|
-
"type": "string"
|
|
3171
|
-
}
|
|
3172
|
-
}
|
|
3173
|
-
},
|
|
3174
|
-
"required": [
|
|
3175
|
-
"byElementId"
|
|
3176
|
-
]
|
|
3177
|
-
},
|
|
3178
|
-
"documentVersionTimestamp": {
|
|
3179
|
-
"type": "number",
|
|
3180
|
-
"description": "Version timestamp from getDocument() for optimistic locking."
|
|
5064
|
+
"description": "Background for png/jpeg, e.g. '#ffffff' or 'transparent' (png only)."
|
|
3181
5065
|
}
|
|
3182
5066
|
},
|
|
3183
5067
|
"required": [
|
|
3184
|
-
"diagramId"
|
|
3185
|
-
"documentVersionTimestamp"
|
|
5068
|
+
"diagramId"
|
|
3186
5069
|
]
|
|
3187
5070
|
}
|
|
3188
5071
|
}
|
|
@@ -3263,13 +5146,13 @@
|
|
|
3263
5146
|
}
|
|
3264
5147
|
}
|
|
3265
5148
|
},
|
|
3266
|
-
"/tools/
|
|
5149
|
+
"/tools/rebuildPlatformCatalogEmbeddings": {
|
|
3267
5150
|
"post": {
|
|
3268
|
-
"summary": "
|
|
3269
|
-
"description": "
|
|
3270
|
-
"operationId": "
|
|
5151
|
+
"summary": "rebuildPlatformCatalogEmbeddings",
|
|
5152
|
+
"description": "Internal maintenance (requires write). Syncs gte-small (384-dim) vector embeddings for the MCP tool, whiteboard stencil, and architecture icon catalogs into platform_catalog_embeddings, so searchTools, listWhiteboardStencils, and listArchitectureIcons can do semantic search. Incremental: scans every catalog, diffs by content hash, and re-embeds ONLY changed rows (cheap no-op when nothing changed). This normally runs automatically every hour (the platform-catalog-sync cron), so manual calls are rarely needed — use it to force an immediate sync after changing tools/stencils/icons. Embeds up to ~120 changed rows per call; if more changed, call again until allDone is true. Not part of normal authoring flows.",
|
|
5153
|
+
"operationId": "rebuildPlatformCatalogEmbeddings",
|
|
3271
5154
|
"tags": [
|
|
3272
|
-
"
|
|
5155
|
+
"uncategorized"
|
|
3273
5156
|
],
|
|
3274
5157
|
"requestBody": {
|
|
3275
5158
|
"required": false,
|
|
@@ -3278,14 +5161,19 @@
|
|
|
3278
5161
|
"schema": {
|
|
3279
5162
|
"type": "object",
|
|
3280
5163
|
"properties": {
|
|
3281
|
-
"
|
|
3282
|
-
"type": "
|
|
3283
|
-
"
|
|
5164
|
+
"types": {
|
|
5165
|
+
"type": "array",
|
|
5166
|
+
"items": {
|
|
5167
|
+
"type": "string",
|
|
5168
|
+
"enum": [
|
|
5169
|
+
"tool",
|
|
5170
|
+
"stencil",
|
|
5171
|
+
"icon"
|
|
5172
|
+
]
|
|
5173
|
+
},
|
|
5174
|
+
"description": "Which catalogs to sync. Defaults to all three (tool, stencil, icon)."
|
|
3284
5175
|
}
|
|
3285
|
-
}
|
|
3286
|
-
"required": [
|
|
3287
|
-
"diagramId"
|
|
3288
|
-
]
|
|
5176
|
+
}
|
|
3289
5177
|
}
|
|
3290
5178
|
}
|
|
3291
5179
|
}
|
|
@@ -3365,11 +5253,11 @@
|
|
|
3365
5253
|
}
|
|
3366
5254
|
}
|
|
3367
5255
|
},
|
|
3368
|
-
"/tools/
|
|
5256
|
+
"/tools/reorderDocuments": {
|
|
3369
5257
|
"post": {
|
|
3370
|
-
"summary": "
|
|
3371
|
-
"description": "
|
|
3372
|
-
"operationId": "
|
|
5258
|
+
"summary": "reorderDocuments",
|
|
5259
|
+
"description": "Batch-reorder documents within a folder (or project root) by setting sibling positions. Pass [{documentId, position}, ...] where position is a non-negative integer; usually you renumber siblings sequentially as 0, 1, 2…. Position-only update — does not bump version or create a snapshot. To MOVE a document to a different folder, use editDocument({folderId, position}) instead.",
|
|
5260
|
+
"operationId": "reorderDocuments",
|
|
3373
5261
|
"tags": [
|
|
3374
5262
|
"documents"
|
|
3375
5263
|
],
|
|
@@ -3380,12 +5268,29 @@
|
|
|
3380
5268
|
"schema": {
|
|
3381
5269
|
"type": "object",
|
|
3382
5270
|
"properties": {
|
|
3383
|
-
"
|
|
3384
|
-
"type": "
|
|
5271
|
+
"items": {
|
|
5272
|
+
"type": "array",
|
|
5273
|
+
"description": "List of document position updates. All documents must belong to the same project.",
|
|
5274
|
+
"items": {
|
|
5275
|
+
"type": "object",
|
|
5276
|
+
"properties": {
|
|
5277
|
+
"documentId": {
|
|
5278
|
+
"type": "string"
|
|
5279
|
+
},
|
|
5280
|
+
"position": {
|
|
5281
|
+
"type": "number"
|
|
5282
|
+
}
|
|
5283
|
+
},
|
|
5284
|
+
"required": [
|
|
5285
|
+
"documentId",
|
|
5286
|
+
"position"
|
|
5287
|
+
]
|
|
5288
|
+
},
|
|
5289
|
+
"minItems": 1
|
|
3385
5290
|
}
|
|
3386
5291
|
},
|
|
3387
5292
|
"required": [
|
|
3388
|
-
"
|
|
5293
|
+
"items"
|
|
3389
5294
|
]
|
|
3390
5295
|
}
|
|
3391
5296
|
}
|
|
@@ -4439,7 +6344,7 @@
|
|
|
4439
6344
|
"description": "Step 1 of file ingest. Mint a single-use PUT upload URL for a large file (PDF, DOCX, plain text, or markdown — up to 150 MB). Returns { sessionId, uploadUrl, expiresAt, maxBytes }. Upload the raw bytes to uploadUrl with PUT, then call createDocumentFromUpload({ sessionId, projectId }) to start the conversion. The file is auto-deleted once the document is created.",
|
|
4440
6345
|
"operationId": "createDocumentIngestSession",
|
|
4441
6346
|
"tags": [
|
|
4442
|
-
"
|
|
6347
|
+
"documents"
|
|
4443
6348
|
],
|
|
4444
6349
|
"requestBody": {
|
|
4445
6350
|
"required": false,
|
|
@@ -4559,7 +6464,7 @@
|
|
|
4559
6464
|
"description": "Step 2 of file ingest. After the file is uploaded via the PUT URL from createDocumentIngestSession, call this to start the async conversion. Returns { jobId, documentId } immediately — the document is created as a draft and progressively populated as the worker processes the file. Poll getDocumentIngestJob({ jobId }) to track progress. Idempotent: calling twice with the same sessionId returns the same job/document.",
|
|
4560
6465
|
"operationId": "createDocumentFromUpload",
|
|
4561
6466
|
"tags": [
|
|
4562
|
-
"
|
|
6467
|
+
"documents"
|
|
4563
6468
|
],
|
|
4564
6469
|
"requestBody": {
|
|
4565
6470
|
"required": false,
|
|
@@ -4678,7 +6583,7 @@
|
|
|
4678
6583
|
"description": "Read the current status of an ingest job. Returns { status, stage, processedImages, totalImages, documentId, error?, lastHeartbeatAt }. Stages: pending → downloaded → extracted → draft_saved → images_processing → finalized → cleaned_up. Status: queued, running, succeeded, failed, cancelled. The associated document_id is populated immediately and progressively filled in as images are processed.",
|
|
4679
6584
|
"operationId": "getDocumentIngestJob",
|
|
4680
6585
|
"tags": [
|
|
4681
|
-
"
|
|
6586
|
+
"documents"
|
|
4682
6587
|
],
|
|
4683
6588
|
"requestBody": {
|
|
4684
6589
|
"required": false,
|
|
@@ -9043,7 +10948,7 @@
|
|
|
9043
10948
|
"description": "Update a task. Tasks share a row with improvements (`improvement_items` with `is_task=true`), so this is a thin alias over updateImprovement — every field on updateImprovement is supported, including `checklist`, `acceptance_criteria`, status transitions (blocked/rejected/done need their respective comments), dates, owner, percent_complete, etc. Requires versionTimestamp from getTask for optimistic locking. To edit checklist items: call getTask, modify the `checklist` array (preserving each row's `id` to keep its attribution stamps), and pass the full array back here — array order is the sort order. Assignment: pass `owner_id=<uuid>` to assign to a user, `owner_team_id=<uuid>` to assign to a team (mutually exclusive — the DB enforces with a CHECK constraint). To unassign, pass `owner_id=null` AND `owner_team_id=null`. To switch owner kind, send the new value AND null the old one in the SAME call.",
|
|
9044
10949
|
"operationId": "updateTask",
|
|
9045
10950
|
"tags": [
|
|
9046
|
-
"
|
|
10951
|
+
"plans"
|
|
9047
10952
|
],
|
|
9048
10953
|
"requestBody": {
|
|
9049
10954
|
"required": false,
|
|
@@ -10590,7 +12495,7 @@
|
|
|
10590
12495
|
"description": "Phase 5 / E3 — Provenance-aware assessor for a set of chunk_ids returned by kg_search. Returns per-chunk bucket (authored-grounded | extracted-high-conf | extracted-low-conf | no-support), overall distribution, dominant_bucket, and recommend_refusal. Pure metadata read - no LLM cost. Used by the agent's response policy to decide whether to answer confidently, caveat, or refuse.",
|
|
10591
12496
|
"operationId": "kg_evaluate_retrieval",
|
|
10592
12497
|
"tags": [
|
|
10593
|
-
"
|
|
12498
|
+
"knowledge_graph"
|
|
10594
12499
|
],
|
|
10595
12500
|
"requestBody": {
|
|
10596
12501
|
"required": false,
|
|
@@ -12074,7 +13979,7 @@
|
|
|
12074
13979
|
"/tools/getSubscription": {
|
|
12075
13980
|
"post": {
|
|
12076
13981
|
"summary": "getSubscription",
|
|
12077
|
-
"description": "Read the subscription state for an organisation. Returns tier, status, current billing period, seat count, member count, cancellation flag, trial end. Stripe IDs are stripped. Pair with listPaymentMethods/listInvoices for the full billing dashboard.",
|
|
13982
|
+
"description": "Read the subscription state for an organisation. Returns tier, status, current billing period, seat count, member count, cancellation flag, trial end. Stripe IDs are stripped. Pair with listPaymentMethods/listInvoices for the full billing dashboard. Use when the user asks 'what plan am I on', 'how many seats do I have', 'when does my subscription renew', or to check current billing status.",
|
|
12078
13983
|
"operationId": "getSubscription",
|
|
12079
13984
|
"tags": [
|
|
12080
13985
|
"billing"
|
|
@@ -12801,7 +14706,7 @@
|
|
|
12801
14706
|
"/tools/listResourcePermissions": {
|
|
12802
14707
|
"post": {
|
|
12803
14708
|
"summary": "listResourcePermissions",
|
|
12804
|
-
"description": "List explicit permission grants on a resource (workspace/project/folder/document/improvement/plan), including principal type (user|team), level (none|read|write|admin), and 3-state overrides for documents/improvements/plans. Read-only.",
|
|
14709
|
+
"description": "List explicit permission grants on a resource (workspace/project/folder/document/improvement/plan), including principal type (user|team), level (none|read|write|admin), and 3-state overrides for documents/improvements/plans. Read-only. Use when the user asks 'who can see this', 'who has access', 'what permissions are set on this', or to audit existing access on a resource.",
|
|
12805
14710
|
"operationId": "listResourcePermissions",
|
|
12806
14711
|
"tags": [
|
|
12807
14712
|
"permissions"
|
|
@@ -12916,7 +14821,7 @@
|
|
|
12916
14821
|
"/tools/getEffectivePermission": {
|
|
12917
14822
|
"post": {
|
|
12918
14823
|
"summary": "getEffectivePermission",
|
|
12919
|
-
"description": "Compute a user's effective permission level on a resource (taking team grants, inheritance, and 3-state overrides into account) and the source. Asking about another user requires can_manage_perms on the org.",
|
|
14824
|
+
"description": "Compute a user's effective permission level on a resource (taking team grants, inheritance, and 3-state overrides into account) and the source. Asking about another user requires can_manage_perms on the org. Use when the user asks 'can X access this', 'what level of access does X have', 'why can X see this', or to debug an unexpected permission outcome.",
|
|
12920
14825
|
"operationId": "getEffectivePermission",
|
|
12921
14826
|
"tags": [
|
|
12922
14827
|
"permissions"
|
|
@@ -14125,7 +16030,7 @@
|
|
|
14125
16030
|
"/tools/inviteMember": {
|
|
14126
16031
|
"post": {
|
|
14127
16032
|
"summary": "inviteMember",
|
|
14128
|
-
"description": "Invite a person by email to the credential's organisation. Auth: org id must match the credential AND credential must hold can_manage_members. Rate limit 10/h. Returns invitation_id, expiry, and a seat-billing-impact summary. Email-existence is opaque: the response shape never reveals whether the email is already a member, already invited, or new.",
|
|
16033
|
+
"description": "Invite a person by email to the credential's organisation. Auth: org id must match the credential AND credential must hold can_manage_members. Rate limit 10/h. Returns invitation_id, expiry, and a seat-billing-impact summary. Email-existence is opaque: the response shape never reveals whether the email is already a member, already invited, or new. Use when the user asks to invite a teammate, friend, colleague, or new user to their organisation, or to onboard someone.",
|
|
14129
16034
|
"operationId": "inviteMember",
|
|
14130
16035
|
"tags": [
|
|
14131
16036
|
"members"
|
|
@@ -14247,7 +16152,7 @@
|
|
|
14247
16152
|
"/tools/cancelInvitation": {
|
|
14248
16153
|
"post": {
|
|
14249
16154
|
"summary": "cancelInvitation",
|
|
14250
|
-
"description": "Cancel a pending invitation by id. Sets status='revoked'. Server resolves the organisation_id from the invitation row; the credential must match that org AND hold can_manage_members. Idempotent. Rate limit 30/min.",
|
|
16155
|
+
"description": "Cancel a pending invitation by id. Sets status='revoked'. Server resolves the organisation_id from the invitation row; the credential must match that org AND hold can_manage_members. Idempotent. Rate limit 30/min. Use when the user asks to cancel, revoke, or undo a pending invitation — for example to correct a typo'd email address before re-inviting.",
|
|
14251
16156
|
"operationId": "cancelInvitation",
|
|
14252
16157
|
"tags": [
|
|
14253
16158
|
"members"
|
|
@@ -14349,7 +16254,7 @@
|
|
|
14349
16254
|
"/tools/resendInvitation": {
|
|
14350
16255
|
"post": {
|
|
14351
16256
|
"summary": "resendInvitation",
|
|
14352
|
-
"description": "Resend a pending invitation: extends expires_at by 7 days and re-triggers the invitation email. Server resolves the organisation_id from the invitation row. Rate limit 6/h per invitation_id.",
|
|
16257
|
+
"description": "Resend a pending invitation: extends expires_at by 7 days and re-triggers the invitation email. Server resolves the organisation_id from the invitation row. Rate limit 6/h per invitation_id. Use when the user asks to resend, re-send, or re-trigger an invitation email — typically because the recipient lost it or the original expired.",
|
|
14353
16258
|
"operationId": "resendInvitation",
|
|
14354
16259
|
"tags": [
|
|
14355
16260
|
"members"
|
|
@@ -14451,7 +16356,7 @@
|
|
|
14451
16356
|
"/tools/updateMemberRole": {
|
|
14452
16357
|
"post": {
|
|
14453
16358
|
"summary": "updateMemberRole",
|
|
14454
|
-
"description": "Update an organisation member's role (admin or member). Owners cannot be changed via this tool. Refuses self-promotion. Rate limit 30/min.",
|
|
16359
|
+
"description": "Update an organisation member's role (admin or member). Owners cannot be changed via this tool. Refuses self-promotion. Rate limit 30/min. Use when the user asks to promote someone to admin, demote an admin to member, or change a teammate's role.",
|
|
14455
16360
|
"operationId": "updateMemberRole",
|
|
14456
16361
|
"tags": [
|
|
14457
16362
|
"members"
|
|
@@ -14567,7 +16472,7 @@
|
|
|
14567
16472
|
"/tools/setMemberActive": {
|
|
14568
16473
|
"post": {
|
|
14569
16474
|
"summary": "setMemberActive",
|
|
14570
|
-
"description": "Soft-deactivate or reactivate an organisation member. Refuses self-deactivation, last-admin/owner deactivation, and deactivation of an owner. Rate limit 30/min.",
|
|
16475
|
+
"description": "Soft-deactivate or reactivate an organisation member. Refuses self-deactivation, last-admin/owner deactivation, and deactivation of an owner. Rate limit 30/min. Use when the user asks to deactivate, suspend, freeze, reactivate, or unfreeze a member without fully removing them.",
|
|
14571
16476
|
"operationId": "setMemberActive",
|
|
14572
16477
|
"tags": [
|
|
14573
16478
|
"members"
|
|
@@ -14677,7 +16582,7 @@
|
|
|
14677
16582
|
"/tools/removeMember": {
|
|
14678
16583
|
"post": {
|
|
14679
16584
|
"summary": "removeMember",
|
|
14680
|
-
"description": "Hard-remove a member from an organisation, cascading to workspace and team memberships and resource permissions. Refuses self-removal and last-owner removal. Stripe seat downgrade is NOT performed here — pair with a Phase 6 billing tool. Rate limit 5/min.",
|
|
16585
|
+
"description": "Hard-remove a member from an organisation, cascading to workspace and team memberships and resource permissions. Refuses self-removal and last-owner removal. Stripe seat downgrade is NOT performed here — pair with a Phase 6 billing tool. Rate limit 5/min. Use when the user asks to remove, kick out, fire, offboard, or fully terminate a member's access to the organisation.",
|
|
14681
16586
|
"operationId": "removeMember",
|
|
14682
16587
|
"tags": [
|
|
14683
16588
|
"members"
|
|
@@ -16122,7 +18027,7 @@
|
|
|
16122
18027
|
"/tools/upsertResourcePermission": {
|
|
16123
18028
|
"post": {
|
|
16124
18029
|
"summary": "upsertResourcePermission",
|
|
16125
|
-
"description": "Insert or update a resource_permissions row for a user OR team on a workspace/project/folder/document/improvement/plan. Refuses self-escalation. Rate limit 30/min.",
|
|
18030
|
+
"description": "Insert or update a resource_permissions row for a user OR team on a workspace/project/folder/document/improvement/plan. Refuses self-escalation. Rate limit 30/min. Use when the user asks to give access to, share with, grant access, add a permission, make accessible, or invite someone to a specific workspace/project/folder/document — i.e. resource-level access (not org-level membership; that's inviteMember).",
|
|
16126
18031
|
"operationId": "upsertResourcePermission",
|
|
16127
18032
|
"tags": [
|
|
16128
18033
|
"permissions"
|
|
@@ -16373,7 +18278,7 @@
|
|
|
16373
18278
|
"/tools/deleteResourcePermission": {
|
|
16374
18279
|
"post": {
|
|
16375
18280
|
"summary": "deleteResourcePermission",
|
|
16376
|
-
"description": "Delete a resource_permissions row. Refuses if the row is the LAST admin grant on the resource. Rate limit 30/min.",
|
|
18281
|
+
"description": "Delete a resource_permissions row. Refuses if the row is the LAST admin grant on the resource. Rate limit 30/min. Use when the user asks to revoke access, remove access, take away access, unshare, or delete a permission grant on a specific resource.",
|
|
16377
18282
|
"operationId": "deleteResourcePermission",
|
|
16378
18283
|
"tags": [
|
|
16379
18284
|
"permissions"
|
|
@@ -16604,7 +18509,7 @@
|
|
|
16604
18509
|
"/tools/previewSubscriptionChange": {
|
|
16605
18510
|
"post": {
|
|
16606
18511
|
"summary": "previewSubscriptionChange",
|
|
16607
|
-
"description": "Preview a subscription tier or seat change. Returns confirmation_token (10-min TTL) plus proration and next-invoice math. Cross-tier upgrades from Free return requires_checkout=true; the apply step creates a hosted Stripe Checkout session. Rate limit 30/h.",
|
|
18512
|
+
"description": "Preview a subscription tier or seat change. Returns confirmation_token (10-min TTL) plus proration and next-invoice math. Cross-tier upgrades from Free return requires_checkout=true; the apply step creates a hosted Stripe Checkout session. Rate limit 30/h. Use when the user asks to upgrade their plan (free→pro), downgrade, add seats, increase seats, or change subscription tier — ALWAYS call this preview first, then applySubscriptionChange with the returned token after the user confirms.",
|
|
16608
18513
|
"operationId": "previewSubscriptionChange",
|
|
16609
18514
|
"tags": [
|
|
16610
18515
|
"billing"
|
|
@@ -16719,7 +18624,7 @@
|
|
|
16719
18624
|
"/tools/applySubscriptionChange": {
|
|
16720
18625
|
"post": {
|
|
16721
18626
|
"summary": "applySubscriptionChange",
|
|
16722
|
-
"description": "Apply a previously previewed subscription change. Same-tier seat changes update Stripe in place; cross-tier upgrades from Free return a hosted Checkout URL. Refuses target=free (use cancelSubscription) and target=enterprise (sales-led). Rate limit 5/h.",
|
|
18627
|
+
"description": "Apply a previously previewed subscription change. Same-tier seat changes update Stripe in place; cross-tier upgrades from Free return a hosted Checkout URL. Refuses target=free (use cancelSubscription) and target=enterprise (sales-led). Rate limit 5/h. Use only AFTER previewSubscriptionChange and after the user confirms the preview's pricing — never call apply without the user seeing the preview first.",
|
|
16723
18628
|
"operationId": "applySubscriptionChange",
|
|
16724
18629
|
"tags": [
|
|
16725
18630
|
"billing"
|
|
@@ -16821,7 +18726,7 @@
|
|
|
16821
18726
|
"/tools/previewSubscriptionCancellation": {
|
|
16822
18727
|
"post": {
|
|
16823
18728
|
"summary": "previewSubscriptionCancellation",
|
|
16824
|
-
"description": "Preview the consequences of cancelling. Returns confirmation_token plus summary {remaining_credits, prepaid_days, prepaid_value_aud, feature_loss[], at_risk_seats}. Soft cancel only. Rate limit 30/h.",
|
|
18729
|
+
"description": "Preview the consequences of cancelling. Returns confirmation_token plus summary {remaining_credits, prepaid_days, prepaid_value_aud, feature_loss[], at_risk_seats}. Soft cancel only. Rate limit 30/h. Use when the user asks to cancel, end, or stop their subscription — ALWAYS call this first to show the cost of cancelling before passing the token to cancelSubscription.",
|
|
16825
18730
|
"operationId": "previewSubscriptionCancellation",
|
|
16826
18731
|
"tags": [
|
|
16827
18732
|
"billing"
|
|
@@ -16923,7 +18828,7 @@
|
|
|
16923
18828
|
"/tools/cancelSubscription": {
|
|
16924
18829
|
"post": {
|
|
16925
18830
|
"summary": "cancelSubscription",
|
|
16926
|
-
"description": "Apply a previewed soft cancellation (cancel_at_period_end=true). Customer keeps full access until period end. Rate limit 5/h.",
|
|
18831
|
+
"description": "Apply a previewed soft cancellation (cancel_at_period_end=true). Customer keeps full access until period end. Rate limit 5/h. Use only AFTER previewSubscriptionCancellation and after the user confirms — never cancel without showing the preview first.",
|
|
16927
18832
|
"operationId": "cancelSubscription",
|
|
16928
18833
|
"tags": [
|
|
16929
18834
|
"billing"
|
|
@@ -17025,7 +18930,7 @@
|
|
|
17025
18930
|
"/tools/quoteCreditPackage": {
|
|
17026
18931
|
"post": {
|
|
17027
18932
|
"summary": "quoteCreditPackage",
|
|
17028
|
-
"description": "Quote a credit-package purchase (first half of the human-in-the-loop ritual). Returns quote_token (10-min TTL) plus package + total_aud. Caller must invoke purchaseCreditPackage(quote_token) within the TTL.",
|
|
18933
|
+
"description": "Quote a credit-package purchase (first half of the human-in-the-loop ritual). Returns quote_token (10-min TTL) plus package + total_aud. Caller must invoke purchaseCreditPackage(quote_token) within the TTL. Use when the user asks to buy credits, purchase credits, top up credits, or add more credits — ALWAYS call this first then purchaseCreditPackage after the user confirms.",
|
|
17029
18934
|
"operationId": "quoteCreditPackage",
|
|
17030
18935
|
"tags": [
|
|
17031
18936
|
"billing"
|
|
@@ -17132,7 +19037,7 @@
|
|
|
17132
19037
|
"/tools/purchaseCreditPackage": {
|
|
17133
19038
|
"post": {
|
|
17134
19039
|
"summary": "purchaseCreditPackage",
|
|
17135
|
-
"description": "Apply a credit-package quote by creating a hosted Stripe Checkout session. Returns checkout_url + session_id. Refuses if catalogued price has drifted. Rate limit 5/h.",
|
|
19040
|
+
"description": "Apply a credit-package quote by creating a hosted Stripe Checkout session. Returns checkout_url + session_id. Refuses if catalogued price has drifted. Rate limit 5/h. Use only AFTER quoteCreditPackage and after the user confirms — never start a checkout without the quote step first.",
|
|
17136
19041
|
"operationId": "purchaseCreditPackage",
|
|
17137
19042
|
"tags": [
|
|
17138
19043
|
"billing"
|
|
@@ -17234,7 +19139,7 @@
|
|
|
17234
19139
|
"/tools/reactivateSubscription": {
|
|
17235
19140
|
"post": {
|
|
17236
19141
|
"summary": "reactivateSubscription",
|
|
17237
|
-
"description": "Reactivate a subscription that was scheduled to cancel at period end (clears cancel_at_period_end). Rate limit 5/h.",
|
|
19142
|
+
"description": "Reactivate a subscription that was scheduled to cancel at period end (clears cancel_at_period_end). Rate limit 5/h. Use when the user asks to reactivate, uncancel, restore, or keep their subscription after they previously cancelled but before the period ends.",
|
|
17238
19143
|
"operationId": "reactivateSubscription",
|
|
17239
19144
|
"tags": [
|
|
17240
19145
|
"billing"
|