@stablebaseline/sdk 0.4.3 → 0.4.5

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/openapi.json CHANGED
@@ -3925,7 +3925,7 @@
3925
3925
  },
3926
3926
  "brandKitId": {
3927
3927
  "type": "string",
3928
- "description": "Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used."
3928
+ "description": "Optional brand kit id (from listBrandKits) to theme a branded-executive deck. If omitted, the org's built-in default is used. Create one from just a logo (or a .pptx/.docx) via createBrandKit."
3929
3929
  }
3930
3930
  },
3931
3931
  "required": [
@@ -4281,6 +4281,859 @@
4281
4281
  }
4282
4282
  }
4283
4283
  },
4284
+ "/tools/designDeck": {
4285
+ "post": {
4286
+ "summary": "designDeck",
4287
+ "description": "Create or refine a slide deck on a whiteboard by conversing with the AI design agent. Send a brief for a NEW deck, a change to an EXISTING one, or an answer to the agent's question. The agent builds a polished, on-brand deck and places it on the board; if the brief is ambiguous it asks ONE clarifying question (answer with the same sessionId). Returns immediately; poll getDeckReply for the result. Use for building or editing slide decks / presentations. The deck lives in a whiteboard, so it needs an existing whiteboard documentId: if you do not have one, create it first with createWhiteboard and pass its documentId here. FIRST vs FOLLOW-UP: the first call (from nothing) builds; a follow-up call (an answer, a change, or a new instruction) passes the sessionId (or the deckId) plus the new message. kind:'deck' (default) is the premium on-brand HTML deck; kind:'express' builds the native, deterministic branded-executive deck directly on the whiteboard (faster, lower fidelity, one-shot, not conversational). COST + APPROVAL: a build costs 50 credits and an edit 10; a clarifying question is FREE. Call FIRST without confirm to get the exact cost plus the workspace balance, show it to the user, and only call again with confirm:true once they agree. The fee is auto-refunded if a turn produces no change or fails. Returns sessionId (the conversation), deckId (the deck), status, turnType, started, awaitingUser, needsConfirmation, insufficientCredits, and assistantMessage. Export the finished deck with exportFromWhiteboard.",
4288
+ "operationId": "designDeck",
4289
+ "tags": [
4290
+ "uncategorized"
4291
+ ],
4292
+ "requestBody": {
4293
+ "required": false,
4294
+ "content": {
4295
+ "application/json": {
4296
+ "schema": {
4297
+ "type": "object",
4298
+ "properties": {
4299
+ "documentId": {
4300
+ "type": "string",
4301
+ "description": "The whiteboard to design into. REQUIRED: the deck lives in this whiteboard. Create one first with createWhiteboard if you do not already have its id."
4302
+ },
4303
+ "message": {
4304
+ "type": "string",
4305
+ "description": "This turn's message in plain language: the design brief on the first turn, an edit instruction later, or the user's ANSWER to a clarifying question the agent asked. On a follow-up turn, pass this together with the sessionId (or deckId) from the earlier call."
4306
+ },
4307
+ "sessionId": {
4308
+ "type": "string",
4309
+ "description": "The design conversation to continue, as returned by an earlier designDeck call. Pass it together with message to answer a question, make an edit, or send a follow-up. Omit on the very first call to start a new conversation."
4310
+ },
4311
+ "deckId": {
4312
+ "type": "string",
4313
+ "description": "Optional. An existing deck to continue designing (usually you pass sessionId instead; when both are given the session's deck wins)."
4314
+ },
4315
+ "kind": {
4316
+ "type": "string",
4317
+ "enum": [
4318
+ "deck",
4319
+ "illustration",
4320
+ "design",
4321
+ "express"
4322
+ ],
4323
+ "description": "Which engine. 'deck' (default) = the premium on-brand HTML deck (conversational, build + edit); 'illustration' and 'design' are conversational variants. 'express' = the native, deterministic branded-executive deck (faster, lower fidelity, one-shot, not conversational)."
4324
+ },
4325
+ "title": {
4326
+ "type": "string",
4327
+ "description": "Optional title. If omitted, a clear one is derived from the brief."
4328
+ },
4329
+ "brandKitId": {
4330
+ "type": "string",
4331
+ "description": "Optional brand kit id (from listBrandKits) to theme the deck. If omitted, the organisation's effective brand is used."
4332
+ },
4333
+ "slideCount": {
4334
+ "type": "number",
4335
+ "description": "Optional target number of slides for a build turn (the composer adjusts to fit the story). Typical 6 to 12."
4336
+ },
4337
+ "attachments": {
4338
+ "type": "array",
4339
+ "description": "Optional reference images for THIS turn (up to 8; images only). The agent lifts palette, layout, and tone from them (it does not pixel-copy). Non-image attachments are ignored.",
4340
+ "items": {
4341
+ "type": "object",
4342
+ "description": "One reference image: give a public url, OR base64 data plus its mediaType.",
4343
+ "properties": {
4344
+ "url": {
4345
+ "type": "string",
4346
+ "description": "A public https URL to the image."
4347
+ },
4348
+ "data": {
4349
+ "type": "string",
4350
+ "description": "The image as base64 (no data: prefix). Provide mediaType alongside it."
4351
+ },
4352
+ "mediaType": {
4353
+ "type": "string",
4354
+ "description": "The image MIME type, e.g. 'image/png' or 'image/jpeg'."
4355
+ },
4356
+ "name": {
4357
+ "type": "string",
4358
+ "description": "Optional human-readable name for the image."
4359
+ }
4360
+ }
4361
+ }
4362
+ },
4363
+ "confirm": {
4364
+ "type": "boolean",
4365
+ "description": "Set true ONLY after the user has approved the cost (50 for a build, 10 for an edit). Leave unset/false on the first call of a turn to receive the cost quote plus balance. A clarifying question turn is never charged."
4366
+ }
4367
+ },
4368
+ "required": [
4369
+ "documentId",
4370
+ "message"
4371
+ ]
4372
+ }
4373
+ }
4374
+ }
4375
+ },
4376
+ "responses": {
4377
+ "200": {
4378
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
4379
+ "content": {
4380
+ "application/json": {
4381
+ "schema": {
4382
+ "type": "object",
4383
+ "additionalProperties": true
4384
+ }
4385
+ }
4386
+ }
4387
+ },
4388
+ "400": {
4389
+ "description": "Validation error.",
4390
+ "content": {
4391
+ "application/json": {
4392
+ "schema": {
4393
+ "$ref": "#/components/schemas/ErrorResponse"
4394
+ }
4395
+ }
4396
+ }
4397
+ },
4398
+ "401": {
4399
+ "description": "Missing or invalid credentials.",
4400
+ "content": {
4401
+ "application/json": {
4402
+ "schema": {
4403
+ "$ref": "#/components/schemas/ErrorResponse"
4404
+ }
4405
+ }
4406
+ }
4407
+ },
4408
+ "403": {
4409
+ "description": "Authenticated but lacking the required permission or feature flag.",
4410
+ "content": {
4411
+ "application/json": {
4412
+ "schema": {
4413
+ "$ref": "#/components/schemas/ErrorResponse"
4414
+ }
4415
+ }
4416
+ }
4417
+ },
4418
+ "404": {
4419
+ "description": "Resource not found.",
4420
+ "content": {
4421
+ "application/json": {
4422
+ "schema": {
4423
+ "$ref": "#/components/schemas/ErrorResponse"
4424
+ }
4425
+ }
4426
+ }
4427
+ },
4428
+ "422": {
4429
+ "description": "Body did not match the tool's input schema.",
4430
+ "content": {
4431
+ "application/json": {
4432
+ "schema": {
4433
+ "$ref": "#/components/schemas/ErrorResponse"
4434
+ }
4435
+ }
4436
+ }
4437
+ },
4438
+ "500": {
4439
+ "description": "Server error.",
4440
+ "content": {
4441
+ "application/json": {
4442
+ "schema": {
4443
+ "$ref": "#/components/schemas/ErrorResponse"
4444
+ }
4445
+ }
4446
+ }
4447
+ }
4448
+ }
4449
+ }
4450
+ },
4451
+ "/tools/getDeckReply": {
4452
+ "post": {
4453
+ "summary": "getDeckReply",
4454
+ "description": "Get the design agent's reply after calling designDeck: the status (thinking/building/ready) and EITHER the finished deck (slide count + preview) OR a clarifying question to answer (call designDeck with the sessionId + your answer). Poll until ready or a question appears. Give it the whiteboard documentId and the deckId (both returned by designDeck). It returns the build status ('generating' while working, 'ready' when the deck is finished, 'failed' if it failed) plus, once ready, the slide count and a thumbnail image URL. IMPORTANT for the conversation: if the agent asked a CLARIFYING QUESTION instead of doing the work, this returns awaitingUser:true with pendingQuestion (and assistantMessage) — relay that question to the user, then call designDeck again with the same sessionId and the user's answer as message to continue. It also returns the full conversation (history + status + pending question). A turn usually takes about 1 to 3 minutes, so poll every 15 to 30 seconds until it is 'ready' or awaitingUser is true. When ready, the deck has already been placed on the whiteboard; you can also export it with exportFromWhiteboard. If a turn failed or produced no change, the user was not charged.",
4455
+ "operationId": "getDeckReply",
4456
+ "tags": [
4457
+ "uncategorized"
4458
+ ],
4459
+ "requestBody": {
4460
+ "required": false,
4461
+ "content": {
4462
+ "application/json": {
4463
+ "schema": {
4464
+ "type": "object",
4465
+ "properties": {
4466
+ "documentId": {
4467
+ "type": "string",
4468
+ "description": "The whiteboard that hosts the deck."
4469
+ },
4470
+ "deckId": {
4471
+ "type": "string",
4472
+ "description": "The deck to poll, as returned by designDeck."
4473
+ }
4474
+ },
4475
+ "required": [
4476
+ "documentId",
4477
+ "deckId"
4478
+ ]
4479
+ }
4480
+ }
4481
+ }
4482
+ },
4483
+ "responses": {
4484
+ "200": {
4485
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
4486
+ "content": {
4487
+ "application/json": {
4488
+ "schema": {
4489
+ "type": "object",
4490
+ "additionalProperties": true
4491
+ }
4492
+ }
4493
+ }
4494
+ },
4495
+ "400": {
4496
+ "description": "Validation error.",
4497
+ "content": {
4498
+ "application/json": {
4499
+ "schema": {
4500
+ "$ref": "#/components/schemas/ErrorResponse"
4501
+ }
4502
+ }
4503
+ }
4504
+ },
4505
+ "401": {
4506
+ "description": "Missing or invalid credentials.",
4507
+ "content": {
4508
+ "application/json": {
4509
+ "schema": {
4510
+ "$ref": "#/components/schemas/ErrorResponse"
4511
+ }
4512
+ }
4513
+ }
4514
+ },
4515
+ "403": {
4516
+ "description": "Authenticated but lacking the required permission or feature flag.",
4517
+ "content": {
4518
+ "application/json": {
4519
+ "schema": {
4520
+ "$ref": "#/components/schemas/ErrorResponse"
4521
+ }
4522
+ }
4523
+ }
4524
+ },
4525
+ "404": {
4526
+ "description": "Resource not found.",
4527
+ "content": {
4528
+ "application/json": {
4529
+ "schema": {
4530
+ "$ref": "#/components/schemas/ErrorResponse"
4531
+ }
4532
+ }
4533
+ }
4534
+ },
4535
+ "422": {
4536
+ "description": "Body did not match the tool's input schema.",
4537
+ "content": {
4538
+ "application/json": {
4539
+ "schema": {
4540
+ "$ref": "#/components/schemas/ErrorResponse"
4541
+ }
4542
+ }
4543
+ }
4544
+ },
4545
+ "500": {
4546
+ "description": "Server error.",
4547
+ "content": {
4548
+ "application/json": {
4549
+ "schema": {
4550
+ "$ref": "#/components/schemas/ErrorResponse"
4551
+ }
4552
+ }
4553
+ }
4554
+ }
4555
+ }
4556
+ }
4557
+ },
4558
+ "/tools/designInWhiteboard": {
4559
+ "post": {
4560
+ "summary": "designInWhiteboard",
4561
+ "description": "DEPRECATED — use designDeck instead. This tool no longer designs anything; it returns a short message pointing you at designDeck (to build or edit a slide deck on a whiteboard) or at createWhiteboard + addWhiteboardElements (for manual whiteboard content). It has NO side effects and runs no design. It is kept only so existing callers get a clear message; it will be upgraded in a future update.",
4562
+ "operationId": "designInWhiteboard",
4563
+ "tags": [
4564
+ "whiteboards"
4565
+ ],
4566
+ "requestBody": {
4567
+ "required": false,
4568
+ "content": {
4569
+ "application/json": {
4570
+ "schema": {
4571
+ "type": "object",
4572
+ "properties": {
4573
+ "documentId": {
4574
+ "type": "string",
4575
+ "description": "Ignored. Deprecated tool — use designDeck."
4576
+ },
4577
+ "message": {
4578
+ "type": "string",
4579
+ "description": "Ignored. Deprecated tool — use designDeck."
4580
+ }
4581
+ }
4582
+ }
4583
+ }
4584
+ }
4585
+ },
4586
+ "responses": {
4587
+ "200": {
4588
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
4589
+ "content": {
4590
+ "application/json": {
4591
+ "schema": {
4592
+ "type": "object",
4593
+ "additionalProperties": true
4594
+ }
4595
+ }
4596
+ }
4597
+ },
4598
+ "400": {
4599
+ "description": "Validation error.",
4600
+ "content": {
4601
+ "application/json": {
4602
+ "schema": {
4603
+ "$ref": "#/components/schemas/ErrorResponse"
4604
+ }
4605
+ }
4606
+ }
4607
+ },
4608
+ "401": {
4609
+ "description": "Missing or invalid credentials.",
4610
+ "content": {
4611
+ "application/json": {
4612
+ "schema": {
4613
+ "$ref": "#/components/schemas/ErrorResponse"
4614
+ }
4615
+ }
4616
+ }
4617
+ },
4618
+ "403": {
4619
+ "description": "Authenticated but lacking the required permission or feature flag.",
4620
+ "content": {
4621
+ "application/json": {
4622
+ "schema": {
4623
+ "$ref": "#/components/schemas/ErrorResponse"
4624
+ }
4625
+ }
4626
+ }
4627
+ },
4628
+ "404": {
4629
+ "description": "Resource not found.",
4630
+ "content": {
4631
+ "application/json": {
4632
+ "schema": {
4633
+ "$ref": "#/components/schemas/ErrorResponse"
4634
+ }
4635
+ }
4636
+ }
4637
+ },
4638
+ "422": {
4639
+ "description": "Body did not match the tool's input schema.",
4640
+ "content": {
4641
+ "application/json": {
4642
+ "schema": {
4643
+ "$ref": "#/components/schemas/ErrorResponse"
4644
+ }
4645
+ }
4646
+ }
4647
+ },
4648
+ "500": {
4649
+ "description": "Server error.",
4650
+ "content": {
4651
+ "application/json": {
4652
+ "schema": {
4653
+ "$ref": "#/components/schemas/ErrorResponse"
4654
+ }
4655
+ }
4656
+ }
4657
+ }
4658
+ }
4659
+ }
4660
+ },
4661
+ "/tools/editInWhiteboard": {
4662
+ "post": {
4663
+ "summary": "editInWhiteboard",
4664
+ "description": "DEPRECATED — use designDeck instead. An edit is just another turn in the design conversation, and designDeck handles build AND edit. This tool no longer edits anything; it returns a short message pointing you at designDeck. It has NO side effects and runs no design. It is kept only so existing callers get a clear message; it will be upgraded in a future update.",
4665
+ "operationId": "editInWhiteboard",
4666
+ "tags": [
4667
+ "whiteboards"
4668
+ ],
4669
+ "requestBody": {
4670
+ "required": false,
4671
+ "content": {
4672
+ "application/json": {
4673
+ "schema": {
4674
+ "type": "object",
4675
+ "properties": {
4676
+ "documentId": {
4677
+ "type": "string",
4678
+ "description": "Ignored. Deprecated tool — use designDeck."
4679
+ },
4680
+ "designId": {
4681
+ "type": "string",
4682
+ "description": "Ignored. Deprecated tool — use designDeck."
4683
+ },
4684
+ "instruction": {
4685
+ "type": "string",
4686
+ "description": "Ignored. Deprecated tool — use designDeck."
4687
+ }
4688
+ }
4689
+ }
4690
+ }
4691
+ }
4692
+ },
4693
+ "responses": {
4694
+ "200": {
4695
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
4696
+ "content": {
4697
+ "application/json": {
4698
+ "schema": {
4699
+ "type": "object",
4700
+ "additionalProperties": true
4701
+ }
4702
+ }
4703
+ }
4704
+ },
4705
+ "400": {
4706
+ "description": "Validation error.",
4707
+ "content": {
4708
+ "application/json": {
4709
+ "schema": {
4710
+ "$ref": "#/components/schemas/ErrorResponse"
4711
+ }
4712
+ }
4713
+ }
4714
+ },
4715
+ "401": {
4716
+ "description": "Missing or invalid credentials.",
4717
+ "content": {
4718
+ "application/json": {
4719
+ "schema": {
4720
+ "$ref": "#/components/schemas/ErrorResponse"
4721
+ }
4722
+ }
4723
+ }
4724
+ },
4725
+ "403": {
4726
+ "description": "Authenticated but lacking the required permission or feature flag.",
4727
+ "content": {
4728
+ "application/json": {
4729
+ "schema": {
4730
+ "$ref": "#/components/schemas/ErrorResponse"
4731
+ }
4732
+ }
4733
+ }
4734
+ },
4735
+ "404": {
4736
+ "description": "Resource not found.",
4737
+ "content": {
4738
+ "application/json": {
4739
+ "schema": {
4740
+ "$ref": "#/components/schemas/ErrorResponse"
4741
+ }
4742
+ }
4743
+ }
4744
+ },
4745
+ "422": {
4746
+ "description": "Body did not match the tool's input schema.",
4747
+ "content": {
4748
+ "application/json": {
4749
+ "schema": {
4750
+ "$ref": "#/components/schemas/ErrorResponse"
4751
+ }
4752
+ }
4753
+ }
4754
+ },
4755
+ "500": {
4756
+ "description": "Server error.",
4757
+ "content": {
4758
+ "application/json": {
4759
+ "schema": {
4760
+ "$ref": "#/components/schemas/ErrorResponse"
4761
+ }
4762
+ }
4763
+ }
4764
+ }
4765
+ }
4766
+ }
4767
+ },
4768
+ "/tools/exportFromWhiteboard": {
4769
+ "post": {
4770
+ "summary": "exportFromWhiteboard",
4771
+ "description": "Export a design that lives in a whiteboard to an editable PowerPoint (PPTX), PDF, PNG images, or raw HTML. Give it the whiteboard documentId and the designId (the deck). kind:'deck' (default) renders the finished deck via the export worker: 'pptx' = native, fully-editable PowerPoint (real shapes and text, not screenshots); 'pdf' = vector, one page per slide; 'png' = one image per slide (returned as a base64 array); 'html' = the self-contained deck HTML. Returns the file as base64 in data (pptx/pdf/html) or per-slide base64 in slides (png). The design must be finished; one that is still generating, failed, or archived returns a clear message.",
4772
+ "operationId": "exportFromWhiteboard",
4773
+ "tags": [
4774
+ "whiteboards"
4775
+ ],
4776
+ "requestBody": {
4777
+ "required": false,
4778
+ "content": {
4779
+ "application/json": {
4780
+ "schema": {
4781
+ "type": "object",
4782
+ "properties": {
4783
+ "documentId": {
4784
+ "type": "string",
4785
+ "description": "The whiteboard that hosts the design."
4786
+ },
4787
+ "designId": {
4788
+ "type": "string",
4789
+ "description": "The design to export (the deck id), as returned by designInWhiteboard."
4790
+ },
4791
+ "kind": {
4792
+ "type": "string",
4793
+ "enum": [
4794
+ "deck"
4795
+ ],
4796
+ "description": "Which engine. 'deck' (default)."
4797
+ },
4798
+ "format": {
4799
+ "type": "string",
4800
+ "enum": [
4801
+ "pptx",
4802
+ "pdf",
4803
+ "png",
4804
+ "html"
4805
+ ],
4806
+ "description": "Output format. 'pptx' (default) = editable PowerPoint; 'pdf' = vector PDF; 'png' = one base64 image per slide; 'html' = the design's self-contained HTML."
4807
+ },
4808
+ "brandKitId": {
4809
+ "type": "string",
4810
+ "description": "Optional brand kit id (reserved for future per-export theming; the design is already branded, so this is usually unnecessary)."
4811
+ }
4812
+ },
4813
+ "required": [
4814
+ "documentId",
4815
+ "designId"
4816
+ ]
4817
+ }
4818
+ }
4819
+ }
4820
+ },
4821
+ "responses": {
4822
+ "200": {
4823
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
4824
+ "content": {
4825
+ "application/json": {
4826
+ "schema": {
4827
+ "type": "object",
4828
+ "additionalProperties": true
4829
+ }
4830
+ }
4831
+ }
4832
+ },
4833
+ "400": {
4834
+ "description": "Validation error.",
4835
+ "content": {
4836
+ "application/json": {
4837
+ "schema": {
4838
+ "$ref": "#/components/schemas/ErrorResponse"
4839
+ }
4840
+ }
4841
+ }
4842
+ },
4843
+ "401": {
4844
+ "description": "Missing or invalid credentials.",
4845
+ "content": {
4846
+ "application/json": {
4847
+ "schema": {
4848
+ "$ref": "#/components/schemas/ErrorResponse"
4849
+ }
4850
+ }
4851
+ }
4852
+ },
4853
+ "403": {
4854
+ "description": "Authenticated but lacking the required permission or feature flag.",
4855
+ "content": {
4856
+ "application/json": {
4857
+ "schema": {
4858
+ "$ref": "#/components/schemas/ErrorResponse"
4859
+ }
4860
+ }
4861
+ }
4862
+ },
4863
+ "404": {
4864
+ "description": "Resource not found.",
4865
+ "content": {
4866
+ "application/json": {
4867
+ "schema": {
4868
+ "$ref": "#/components/schemas/ErrorResponse"
4869
+ }
4870
+ }
4871
+ }
4872
+ },
4873
+ "422": {
4874
+ "description": "Body did not match the tool's input schema.",
4875
+ "content": {
4876
+ "application/json": {
4877
+ "schema": {
4878
+ "$ref": "#/components/schemas/ErrorResponse"
4879
+ }
4880
+ }
4881
+ }
4882
+ },
4883
+ "500": {
4884
+ "description": "Server error.",
4885
+ "content": {
4886
+ "application/json": {
4887
+ "schema": {
4888
+ "$ref": "#/components/schemas/ErrorResponse"
4889
+ }
4890
+ }
4891
+ }
4892
+ }
4893
+ }
4894
+ }
4895
+ },
4896
+ "/tools/getDesignStatusInWhiteboard": {
4897
+ "post": {
4898
+ "summary": "getDesignStatusInWhiteboard",
4899
+ "description": "DEPRECATED — use getDeckReply instead. This tool no longer reads any status; it returns a short message pointing you at getDeckReply (poll it after calling designDeck to get the agent's reply — the deck, or a clarifying question). It has NO side effects. It is kept only so existing callers get a clear message; it will be upgraded in a future update.",
4900
+ "operationId": "getDesignStatusInWhiteboard",
4901
+ "tags": [
4902
+ "whiteboards"
4903
+ ],
4904
+ "requestBody": {
4905
+ "required": false,
4906
+ "content": {
4907
+ "application/json": {
4908
+ "schema": {
4909
+ "type": "object",
4910
+ "properties": {
4911
+ "documentId": {
4912
+ "type": "string",
4913
+ "description": "Ignored. Deprecated tool — use getDeckReply."
4914
+ },
4915
+ "designId": {
4916
+ "type": "string",
4917
+ "description": "Ignored. Deprecated tool — use getDeckReply."
4918
+ }
4919
+ }
4920
+ }
4921
+ }
4922
+ }
4923
+ },
4924
+ "responses": {
4925
+ "200": {
4926
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
4927
+ "content": {
4928
+ "application/json": {
4929
+ "schema": {
4930
+ "type": "object",
4931
+ "additionalProperties": true
4932
+ }
4933
+ }
4934
+ }
4935
+ },
4936
+ "400": {
4937
+ "description": "Validation error.",
4938
+ "content": {
4939
+ "application/json": {
4940
+ "schema": {
4941
+ "$ref": "#/components/schemas/ErrorResponse"
4942
+ }
4943
+ }
4944
+ }
4945
+ },
4946
+ "401": {
4947
+ "description": "Missing or invalid credentials.",
4948
+ "content": {
4949
+ "application/json": {
4950
+ "schema": {
4951
+ "$ref": "#/components/schemas/ErrorResponse"
4952
+ }
4953
+ }
4954
+ }
4955
+ },
4956
+ "403": {
4957
+ "description": "Authenticated but lacking the required permission or feature flag.",
4958
+ "content": {
4959
+ "application/json": {
4960
+ "schema": {
4961
+ "$ref": "#/components/schemas/ErrorResponse"
4962
+ }
4963
+ }
4964
+ }
4965
+ },
4966
+ "404": {
4967
+ "description": "Resource not found.",
4968
+ "content": {
4969
+ "application/json": {
4970
+ "schema": {
4971
+ "$ref": "#/components/schemas/ErrorResponse"
4972
+ }
4973
+ }
4974
+ }
4975
+ },
4976
+ "422": {
4977
+ "description": "Body did not match the tool's input schema.",
4978
+ "content": {
4979
+ "application/json": {
4980
+ "schema": {
4981
+ "$ref": "#/components/schemas/ErrorResponse"
4982
+ }
4983
+ }
4984
+ }
4985
+ },
4986
+ "500": {
4987
+ "description": "Server error.",
4988
+ "content": {
4989
+ "application/json": {
4990
+ "schema": {
4991
+ "$ref": "#/components/schemas/ErrorResponse"
4992
+ }
4993
+ }
4994
+ }
4995
+ }
4996
+ }
4997
+ }
4998
+ },
4999
+ "/tools/generateInWhiteboard": {
5000
+ "post": {
5001
+ "summary": "generateInWhiteboard",
5002
+ "description": "Generate an on-brand ASSET inside a whiteboard and place it on the board. kind:'illustration' (default) makes a standalone, on-brand illustration (raw pixels, the one thing native shapes and diagrams cannot make) from a plain-language prompt, colour-conditioned to the organisation's brand (or a specific brandKitId), in a clean flat-vector editorial style with NO text, letters, or numbers baked in. It is stored and dropped onto the whiteboard as an image element. Costs a small flat credit charge (refunded automatically if generation fails on our side); an identical prompt reuses a cached image at no charge. Returns the durable image URL and confirms it was placed.",
5003
+ "operationId": "generateInWhiteboard",
5004
+ "tags": [
5005
+ "whiteboards"
5006
+ ],
5007
+ "requestBody": {
5008
+ "required": false,
5009
+ "content": {
5010
+ "application/json": {
5011
+ "schema": {
5012
+ "type": "object",
5013
+ "properties": {
5014
+ "documentId": {
5015
+ "type": "string",
5016
+ "description": "The whiteboard to generate the asset into (the asset is placed on this board)."
5017
+ },
5018
+ "prompt": {
5019
+ "type": "string",
5020
+ "description": "Plain-language description of the asset to generate (e.g. 'a friendly robot assistant helping a small team')."
5021
+ },
5022
+ "kind": {
5023
+ "type": "string",
5024
+ "enum": [
5025
+ "illustration"
5026
+ ],
5027
+ "description": "What to make. 'illustration' (default)."
5028
+ },
5029
+ "width": {
5030
+ "type": "number",
5031
+ "description": "Optional output width in px (rounded to a multiple of 64, 512 to 2048). Default 1024."
5032
+ },
5033
+ "height": {
5034
+ "type": "number",
5035
+ "description": "Optional output height in px (rounded to a multiple of 64, 512 to 2048). Default 1024."
5036
+ },
5037
+ "style": {
5038
+ "type": "string",
5039
+ "description": "Optional extra style hint appended to the prompt (e.g. 'isometric', 'soft gradients, pastel')."
5040
+ },
5041
+ "brandKitId": {
5042
+ "type": "string",
5043
+ "description": "Optional brand kit id to colour-condition the asset. Defaults to the organisation's effective brand."
5044
+ },
5045
+ "x": {
5046
+ "type": "number",
5047
+ "description": "Optional x position on the board. Omit to auto-place."
5048
+ },
5049
+ "y": {
5050
+ "type": "number",
5051
+ "description": "Optional y position on the board. Omit to auto-place."
5052
+ }
5053
+ },
5054
+ "required": [
5055
+ "documentId",
5056
+ "prompt"
5057
+ ]
5058
+ }
5059
+ }
5060
+ }
5061
+ },
5062
+ "responses": {
5063
+ "200": {
5064
+ "description": "Tool result (shape varies per tool — refer to the tool's docs for the exact return value).",
5065
+ "content": {
5066
+ "application/json": {
5067
+ "schema": {
5068
+ "type": "object",
5069
+ "additionalProperties": true
5070
+ }
5071
+ }
5072
+ }
5073
+ },
5074
+ "400": {
5075
+ "description": "Validation error.",
5076
+ "content": {
5077
+ "application/json": {
5078
+ "schema": {
5079
+ "$ref": "#/components/schemas/ErrorResponse"
5080
+ }
5081
+ }
5082
+ }
5083
+ },
5084
+ "401": {
5085
+ "description": "Missing or invalid credentials.",
5086
+ "content": {
5087
+ "application/json": {
5088
+ "schema": {
5089
+ "$ref": "#/components/schemas/ErrorResponse"
5090
+ }
5091
+ }
5092
+ }
5093
+ },
5094
+ "403": {
5095
+ "description": "Authenticated but lacking the required permission or feature flag.",
5096
+ "content": {
5097
+ "application/json": {
5098
+ "schema": {
5099
+ "$ref": "#/components/schemas/ErrorResponse"
5100
+ }
5101
+ }
5102
+ }
5103
+ },
5104
+ "404": {
5105
+ "description": "Resource not found.",
5106
+ "content": {
5107
+ "application/json": {
5108
+ "schema": {
5109
+ "$ref": "#/components/schemas/ErrorResponse"
5110
+ }
5111
+ }
5112
+ }
5113
+ },
5114
+ "422": {
5115
+ "description": "Body did not match the tool's input schema.",
5116
+ "content": {
5117
+ "application/json": {
5118
+ "schema": {
5119
+ "$ref": "#/components/schemas/ErrorResponse"
5120
+ }
5121
+ }
5122
+ }
5123
+ },
5124
+ "500": {
5125
+ "description": "Server error.",
5126
+ "content": {
5127
+ "application/json": {
5128
+ "schema": {
5129
+ "$ref": "#/components/schemas/ErrorResponse"
5130
+ }
5131
+ }
5132
+ }
5133
+ }
5134
+ }
5135
+ }
5136
+ },
4284
5137
  "/tools/createWhiteboard": {
4285
5138
  "post": {
4286
5139
  "summary": "createWhiteboard",
@@ -4956,11 +5809,13 @@
4956
5809
  ]
4957
5810
  }
4958
5811
  }
5812
+ },
5813
+ "customData": {
5814
+ "type": "object",
5815
+ "description": "Arbitrary Excalidraw customData stored on the element (e.g. a slide frame's { deckId } so a board frame resolves back to its source deck). Merged with any builder-set customData.",
5816
+ "additionalProperties": true
4959
5817
  }
4960
5818
  },
4961
- "required": [
4962
- "type"
4963
- ],
4964
5819
  "additionalProperties": true
4965
5820
  },
4966
5821
  "minItems": 1
@@ -6380,7 +7235,7 @@
6380
7235
  "/tools/rebuildPlatformCatalogEmbeddings": {
6381
7236
  "post": {
6382
7237
  "summary": "rebuildPlatformCatalogEmbeddings",
6383
- "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.",
7238
+ "description": "Internal maintenance (requires write). Syncs gte-small (384-dim) vector embeddings for every platform catalog (MCP tools, whiteboard stencils, architecture icons, infographic templates, whiteboard design components, and open-design skills) into platform_catalog_embeddings, so the semantic search behind searchTools, listWhiteboardStencils, listArchitectureIcons, and the design-skill / component browsers stays current. 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 any catalog. Embeds up to ~120 changed rows per call; if more changed, call again until allDone is true. Not part of normal authoring flows.",
6384
7239
  "operationId": "rebuildPlatformCatalogEmbeddings",
6385
7240
  "tags": [
6386
7241
  "settings"
@@ -6399,10 +7254,13 @@
6399
7254
  "enum": [
6400
7255
  "tool",
6401
7256
  "stencil",
6402
- "icon"
7257
+ "icon",
7258
+ "infographic_template",
7259
+ "whiteboard_component",
7260
+ "skill"
6403
7261
  ]
6404
7262
  },
6405
- "description": "Which catalogs to sync. Defaults to all three (tool, stencil, icon)."
7263
+ "description": "Which catalogs to sync. Defaults to all six (tool, stencil, icon, infographic_template, whiteboard_component, skill)."
6406
7264
  }
6407
7265
  }
6408
7266
  }
@@ -22041,7 +22899,7 @@
22041
22899
  "/tools/createBrandKit": {
22042
22900
  "post": {
22043
22901
  "summary": "createBrandKit",
22044
- "description": "Create a per-org BRAND KIT (palette/fonts/logo) that themes branded-executive slides and document exports. Build it from one of: a `logoUrl` (AUTO-EXTRACT palette/fonts via the vision model), an `officeUrl` (an existing .pptx/.docx extracts theme colours, fonts, logo, watermark + embedded font files), or explicit `tokens`. Auth: can_admin_org. Tiered: free 0, pro 1, enterprise unlimited. Optionally set it as the default at a scope in one call.",
22902
+ "description": "Create a per-org BRAND KIT so Stable Baseline outputs come out fully on-brand. Upload your branding and it is auto-applied: pass a `logoUrl` (as little as your logo, and the vision model AUTO-EXTRACTS your palette and fonts), or an `officeUrl` (an existing .pptx/.docx, from which it extracts theme colours, fonts, logo, watermark and the embedded font files), or explicit `tokens`. The kit themes branded-executive slides AND document exports (PDF, Word, PowerPoint). Auth: can_admin_org. Tiered: free 0, pro 1, enterprise unlimited. Optionally set it as the default at a scope in one call.",
22045
22903
  "operationId": "createBrandKit",
22046
22904
  "tags": [
22047
22905
  "uncategorized"