@firedrill-tools/salesforce 0.1.1

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.
Files changed (41) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +156 -0
  3. package/firedrill/agent.target.json +17 -0
  4. package/firedrill/api-limit-exceeded.scenario.json +11 -0
  5. package/firedrill/baseline.scenario.json +2213 -0
  6. package/firedrill/conformance.suite.json +23 -0
  7. package/firedrill/row-locked.scenario.json +11 -0
  8. package/firedrill/salesforce-api-limit-exceeded.drill.json +336 -0
  9. package/firedrill/salesforce-collections-composite.drill.json +277 -0
  10. package/firedrill/salesforce-denied.drill.json +74 -0
  11. package/firedrill/salesforce-fresh-install.drill.json +86 -0
  12. package/firedrill/salesforce-inactive-user.drill.json +43 -0
  13. package/firedrill/salesforce-invalid-session.drill.json +336 -0
  14. package/firedrill/salesforce-large-responses.drill.json +138 -0
  15. package/firedrill/salesforce-mcp-aliases.drill.json +156 -0
  16. package/firedrill/salesforce-profile-permissions.drill.json +241 -0
  17. package/firedrill/salesforce-read-only.drill.json +154 -0
  18. package/firedrill/salesforce-rest-flow.drill.json +714 -0
  19. package/firedrill/salesforce-row-locked.drill.json +227 -0
  20. package/firedrill/salesforce-sharing.drill.json +201 -0
  21. package/firedrill/salesforce-soql.drill.json +139 -0
  22. package/firedrill/salesforce-tight-limits.drill.json +336 -0
  23. package/firedrill/salesforce-write-committed-lost.drill.json +176 -0
  24. package/firedrill/tight-limits.scenario.json +41 -0
  25. package/firedrill/tools/salesforce/behavior.mjs +637 -0
  26. package/firedrill/tools/salesforce/lib/bytes.mjs +56 -0
  27. package/firedrill/tools/salesforce/lib/ids.mjs +68 -0
  28. package/firedrill/tools/salesforce/lib/match.mjs +352 -0
  29. package/firedrill/tools/salesforce/lib/records.mjs +506 -0
  30. package/firedrill/tools/salesforce/lib/schema.mjs +429 -0
  31. package/firedrill/tools/salesforce/lib/search.mjs +92 -0
  32. package/firedrill/tools/salesforce/lib/soql.mjs +1119 -0
  33. package/firedrill/tools/salesforce/lib/state.mjs +378 -0
  34. package/firedrill/tools/salesforce/lib/wire.mjs +109 -0
  35. package/firedrill/tools/salesforce/salesforce.tool.json +3939 -0
  36. package/firedrill/world.json +2705 -0
  37. package/firedrill/write-committed-lost.scenario.json +11 -0
  38. package/firedrill.json +5 -0
  39. package/package.json +64 -0
  40. package/starter.json +2212 -0
  41. package/test/conformance.mjs +1122 -0
@@ -0,0 +1,3939 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "module": "./behavior.mjs",
4
+ "manifest": {
5
+ "schemaVersion": 1,
6
+ "id": "salesforce",
7
+ "version": "0.1.1",
8
+ "engine": ">=0.1.0 <0.2.0",
9
+ "capabilities": [
10
+ "clock.read",
11
+ "event.emit",
12
+ "state.read",
13
+ "state.write"
14
+ ],
15
+ "state": [
16
+ {
17
+ "namespace": "accounts",
18
+ "schema": {
19
+ "type": "object",
20
+ "properties": {
21
+ "Id": {
22
+ "type": "string"
23
+ },
24
+ "fields": {
25
+ "type": "object",
26
+ "additionalProperties": {
27
+ "anyOf": [
28
+ {
29
+ "type": "string"
30
+ },
31
+ {
32
+ "type": "number"
33
+ },
34
+ {
35
+ "type": "boolean"
36
+ },
37
+ {
38
+ "type": "null"
39
+ }
40
+ ]
41
+ }
42
+ },
43
+ "IsDeleted": {
44
+ "type": "boolean"
45
+ },
46
+ "DeletedDate": {
47
+ "anyOf": [
48
+ {
49
+ "type": "string"
50
+ },
51
+ {
52
+ "type": "null"
53
+ }
54
+ ]
55
+ },
56
+ "CreatedDate": {
57
+ "type": "string"
58
+ },
59
+ "CreatedById": {
60
+ "type": "string"
61
+ },
62
+ "LastModifiedDate": {
63
+ "type": "string"
64
+ },
65
+ "LastModifiedById": {
66
+ "type": "string"
67
+ },
68
+ "SystemModstamp": {
69
+ "type": "string"
70
+ }
71
+ },
72
+ "required": [
73
+ "Id",
74
+ "fields",
75
+ "IsDeleted",
76
+ "DeletedDate",
77
+ "CreatedDate",
78
+ "CreatedById",
79
+ "LastModifiedDate",
80
+ "LastModifiedById",
81
+ "SystemModstamp"
82
+ ],
83
+ "additionalProperties": false
84
+ },
85
+ "description": "Account records keyed by id (001…): `fields` holds every non-system field (including OwnerId and custom fields) by API name."
86
+ },
87
+ {
88
+ "namespace": "contacts",
89
+ "schema": {
90
+ "type": "object",
91
+ "properties": {
92
+ "Id": {
93
+ "type": "string"
94
+ },
95
+ "fields": {
96
+ "type": "object",
97
+ "additionalProperties": {
98
+ "anyOf": [
99
+ {
100
+ "type": "string"
101
+ },
102
+ {
103
+ "type": "number"
104
+ },
105
+ {
106
+ "type": "boolean"
107
+ },
108
+ {
109
+ "type": "null"
110
+ }
111
+ ]
112
+ }
113
+ },
114
+ "IsDeleted": {
115
+ "type": "boolean"
116
+ },
117
+ "DeletedDate": {
118
+ "anyOf": [
119
+ {
120
+ "type": "string"
121
+ },
122
+ {
123
+ "type": "null"
124
+ }
125
+ ]
126
+ },
127
+ "CreatedDate": {
128
+ "type": "string"
129
+ },
130
+ "CreatedById": {
131
+ "type": "string"
132
+ },
133
+ "LastModifiedDate": {
134
+ "type": "string"
135
+ },
136
+ "LastModifiedById": {
137
+ "type": "string"
138
+ },
139
+ "SystemModstamp": {
140
+ "type": "string"
141
+ }
142
+ },
143
+ "required": [
144
+ "Id",
145
+ "fields",
146
+ "IsDeleted",
147
+ "DeletedDate",
148
+ "CreatedDate",
149
+ "CreatedById",
150
+ "LastModifiedDate",
151
+ "LastModifiedById",
152
+ "SystemModstamp"
153
+ ],
154
+ "additionalProperties": false
155
+ },
156
+ "description": "Contact records keyed by id (003…); fields.AccountId references a non-deleted Account or is null; Name is derived."
157
+ },
158
+ {
159
+ "namespace": "custom-fields",
160
+ "schema": {
161
+ "type": "object",
162
+ "properties": {
163
+ "sobjectType": {
164
+ "type": "string"
165
+ },
166
+ "fields": {
167
+ "type": "array",
168
+ "items": {
169
+ "type": "object",
170
+ "properties": {
171
+ "name": {
172
+ "type": "string"
173
+ },
174
+ "label": {
175
+ "type": "string"
176
+ },
177
+ "type": {
178
+ "type": "string",
179
+ "enum": [
180
+ "text",
181
+ "textarea",
182
+ "number",
183
+ "currency",
184
+ "percent",
185
+ "checkbox",
186
+ "date",
187
+ "datetime",
188
+ "email",
189
+ "url",
190
+ "phone",
191
+ "picklist"
192
+ ]
193
+ },
194
+ "length": {
195
+ "anyOf": [
196
+ {
197
+ "type": "integer"
198
+ },
199
+ {
200
+ "type": "null"
201
+ }
202
+ ]
203
+ },
204
+ "precision": {
205
+ "anyOf": [
206
+ {
207
+ "type": "integer"
208
+ },
209
+ {
210
+ "type": "null"
211
+ }
212
+ ]
213
+ },
214
+ "scale": {
215
+ "anyOf": [
216
+ {
217
+ "type": "integer"
218
+ },
219
+ {
220
+ "type": "null"
221
+ }
222
+ ]
223
+ },
224
+ "picklistValues": {
225
+ "type": "array",
226
+ "items": {
227
+ "type": "object",
228
+ "properties": {
229
+ "label": {
230
+ "type": "string"
231
+ },
232
+ "value": {
233
+ "type": "string"
234
+ },
235
+ "default": {
236
+ "type": "boolean"
237
+ }
238
+ },
239
+ "required": [
240
+ "label",
241
+ "value",
242
+ "default"
243
+ ],
244
+ "additionalProperties": false
245
+ }
246
+ },
247
+ "externalId": {
248
+ "type": "boolean"
249
+ },
250
+ "unique": {
251
+ "type": "boolean"
252
+ },
253
+ "required": {
254
+ "type": "boolean"
255
+ },
256
+ "defaultValue": {
257
+ "anyOf": [
258
+ {
259
+ "anyOf": [
260
+ {
261
+ "type": "string"
262
+ },
263
+ {
264
+ "type": "number"
265
+ },
266
+ {
267
+ "type": "boolean"
268
+ }
269
+ ]
270
+ },
271
+ {
272
+ "type": "null"
273
+ }
274
+ ]
275
+ }
276
+ },
277
+ "required": [
278
+ "name",
279
+ "label",
280
+ "type",
281
+ "externalId",
282
+ "unique",
283
+ "required"
284
+ ],
285
+ "additionalProperties": false
286
+ }
287
+ }
288
+ },
289
+ "required": [
290
+ "sobjectType",
291
+ "fields"
292
+ ],
293
+ "additionalProperties": false
294
+ },
295
+ "description": "One row per sObject type (`Account`, `Contact`, …) listing its custom (__c) field definitions: type, length, picklist values, externalId, unique, required, default. Merged into describe, FIELDS(CUSTOM), validation and upsert."
296
+ },
297
+ {
298
+ "namespace": "leads",
299
+ "schema": {
300
+ "type": "object",
301
+ "properties": {
302
+ "Id": {
303
+ "type": "string"
304
+ },
305
+ "fields": {
306
+ "type": "object",
307
+ "additionalProperties": {
308
+ "anyOf": [
309
+ {
310
+ "type": "string"
311
+ },
312
+ {
313
+ "type": "number"
314
+ },
315
+ {
316
+ "type": "boolean"
317
+ },
318
+ {
319
+ "type": "null"
320
+ }
321
+ ]
322
+ }
323
+ },
324
+ "IsDeleted": {
325
+ "type": "boolean"
326
+ },
327
+ "DeletedDate": {
328
+ "anyOf": [
329
+ {
330
+ "type": "string"
331
+ },
332
+ {
333
+ "type": "null"
334
+ }
335
+ ]
336
+ },
337
+ "CreatedDate": {
338
+ "type": "string"
339
+ },
340
+ "CreatedById": {
341
+ "type": "string"
342
+ },
343
+ "LastModifiedDate": {
344
+ "type": "string"
345
+ },
346
+ "LastModifiedById": {
347
+ "type": "string"
348
+ },
349
+ "SystemModstamp": {
350
+ "type": "string"
351
+ }
352
+ },
353
+ "required": [
354
+ "Id",
355
+ "fields",
356
+ "IsDeleted",
357
+ "DeletedDate",
358
+ "CreatedDate",
359
+ "CreatedById",
360
+ "LastModifiedDate",
361
+ "LastModifiedById",
362
+ "SystemModstamp"
363
+ ],
364
+ "additionalProperties": false
365
+ },
366
+ "description": "Lead records keyed by id (00Q…); converted leads (fields.IsConverted) reject every update."
367
+ },
368
+ {
369
+ "namespace": "meta",
370
+ "schema": {
371
+ "type": "object",
372
+ "properties": {
373
+ "nextRecordNumber": {
374
+ "type": "integer",
375
+ "minimum": 1
376
+ }
377
+ },
378
+ "required": [
379
+ "nextRecordNumber"
380
+ ],
381
+ "additionalProperties": false
382
+ },
383
+ "description": "Row `counters`: the single record-number sequence behind every minted id (created on first write when absent)."
384
+ },
385
+ {
386
+ "namespace": "opportunities",
387
+ "schema": {
388
+ "type": "object",
389
+ "properties": {
390
+ "Id": {
391
+ "type": "string"
392
+ },
393
+ "fields": {
394
+ "type": "object",
395
+ "additionalProperties": {
396
+ "anyOf": [
397
+ {
398
+ "type": "string"
399
+ },
400
+ {
401
+ "type": "number"
402
+ },
403
+ {
404
+ "type": "boolean"
405
+ },
406
+ {
407
+ "type": "null"
408
+ }
409
+ ]
410
+ }
411
+ },
412
+ "IsDeleted": {
413
+ "type": "boolean"
414
+ },
415
+ "DeletedDate": {
416
+ "anyOf": [
417
+ {
418
+ "type": "string"
419
+ },
420
+ {
421
+ "type": "null"
422
+ }
423
+ ]
424
+ },
425
+ "CreatedDate": {
426
+ "type": "string"
427
+ },
428
+ "CreatedById": {
429
+ "type": "string"
430
+ },
431
+ "LastModifiedDate": {
432
+ "type": "string"
433
+ },
434
+ "LastModifiedById": {
435
+ "type": "string"
436
+ },
437
+ "SystemModstamp": {
438
+ "type": "string"
439
+ }
440
+ },
441
+ "required": [
442
+ "Id",
443
+ "fields",
444
+ "IsDeleted",
445
+ "DeletedDate",
446
+ "CreatedDate",
447
+ "CreatedById",
448
+ "LastModifiedDate",
449
+ "LastModifiedById",
450
+ "SystemModstamp"
451
+ ],
452
+ "additionalProperties": false
453
+ },
454
+ "description": "Opportunity records keyed by id (006…); IsClosed, IsWon, ForecastCategory and the default Probability derive from StageName."
455
+ },
456
+ {
457
+ "namespace": "org",
458
+ "schema": {
459
+ "type": "object",
460
+ "properties": {
461
+ "organizationId": {
462
+ "type": "string"
463
+ },
464
+ "name": {
465
+ "type": "string"
466
+ },
467
+ "instanceUrl": {
468
+ "type": "string"
469
+ },
470
+ "myDomain": {
471
+ "type": "string"
472
+ },
473
+ "timeZoneSidKey": {
474
+ "type": "string"
475
+ },
476
+ "defaultCurrencyIsoCode": {
477
+ "type": "string"
478
+ },
479
+ "defaultLocaleSidKey": {
480
+ "type": "string"
481
+ },
482
+ "orgWideDefaults": {
483
+ "type": "object",
484
+ "additionalProperties": {
485
+ "type": "string",
486
+ "enum": [
487
+ "Private",
488
+ "ReadOnly",
489
+ "ReadWrite",
490
+ "ControlledByParent"
491
+ ]
492
+ }
493
+ },
494
+ "dailyApiRequests": {
495
+ "type": "object",
496
+ "properties": {
497
+ "max": {
498
+ "type": "integer",
499
+ "minimum": 0
500
+ },
501
+ "used": {
502
+ "type": "integer",
503
+ "minimum": 0
504
+ }
505
+ },
506
+ "required": [
507
+ "max",
508
+ "used"
509
+ ],
510
+ "additionalProperties": false
511
+ },
512
+ "dataStorageMB": {
513
+ "type": "object",
514
+ "properties": {
515
+ "max": {
516
+ "type": "integer",
517
+ "minimum": 0
518
+ },
519
+ "used": {
520
+ "type": "integer",
521
+ "minimum": 0
522
+ }
523
+ },
524
+ "required": [
525
+ "max",
526
+ "used"
527
+ ],
528
+ "additionalProperties": false
529
+ },
530
+ "defaultUserId": {
531
+ "type": "string"
532
+ },
533
+ "limits": {
534
+ "type": "object",
535
+ "properties": {
536
+ "maxRowsPerNamespace": {
537
+ "type": "integer",
538
+ "minimum": 1,
539
+ "maximum": 10000
540
+ }
541
+ },
542
+ "required": [
543
+ "maxRowsPerNamespace"
544
+ ],
545
+ "additionalProperties": false
546
+ }
547
+ },
548
+ "required": [
549
+ "organizationId",
550
+ "name",
551
+ "instanceUrl",
552
+ "myDomain",
553
+ "timeZoneSidKey",
554
+ "defaultCurrencyIsoCode",
555
+ "defaultLocaleSidKey",
556
+ "orgWideDefaults",
557
+ "dailyApiRequests",
558
+ "dataStorageMB",
559
+ "defaultUserId",
560
+ "limits"
561
+ ],
562
+ "additionalProperties": false
563
+ },
564
+ "description": "Row `org`: the one Salesforce org — identity, instance URL, org-wide sharing defaults per sObject, limit decorations, the fresh-install default user and the scan bound."
565
+ },
566
+ {
567
+ "namespace": "profiles",
568
+ "schema": {
569
+ "type": "object",
570
+ "properties": {
571
+ "Id": {
572
+ "type": "string"
573
+ },
574
+ "Name": {
575
+ "type": "string"
576
+ },
577
+ "UserLicense": {
578
+ "type": "string"
579
+ },
580
+ "objectPermissions": {
581
+ "type": "object",
582
+ "additionalProperties": {
583
+ "type": "object",
584
+ "properties": {
585
+ "create": {
586
+ "type": "boolean"
587
+ },
588
+ "read": {
589
+ "type": "boolean"
590
+ },
591
+ "edit": {
592
+ "type": "boolean"
593
+ },
594
+ "delete": {
595
+ "type": "boolean"
596
+ },
597
+ "viewAll": {
598
+ "type": "boolean"
599
+ },
600
+ "modifyAll": {
601
+ "type": "boolean"
602
+ }
603
+ },
604
+ "required": [
605
+ "create",
606
+ "read",
607
+ "edit",
608
+ "delete",
609
+ "viewAll",
610
+ "modifyAll"
611
+ ],
612
+ "additionalProperties": false
613
+ }
614
+ },
615
+ "CreatedDate": {
616
+ "type": "string"
617
+ },
618
+ "LastModifiedDate": {
619
+ "type": "string"
620
+ },
621
+ "SystemModstamp": {
622
+ "type": "string"
623
+ }
624
+ },
625
+ "required": [
626
+ "Id",
627
+ "Name",
628
+ "UserLicense",
629
+ "objectPermissions",
630
+ "CreatedDate",
631
+ "LastModifiedDate",
632
+ "SystemModstamp"
633
+ ],
634
+ "additionalProperties": false
635
+ },
636
+ "description": "Profiles keyed by id (00e…): name, licence and object permissions per sObject. Queryable as Profile; never writable."
637
+ },
638
+ {
639
+ "namespace": "tasks",
640
+ "schema": {
641
+ "type": "object",
642
+ "properties": {
643
+ "Id": {
644
+ "type": "string"
645
+ },
646
+ "fields": {
647
+ "type": "object",
648
+ "additionalProperties": {
649
+ "anyOf": [
650
+ {
651
+ "type": "string"
652
+ },
653
+ {
654
+ "type": "number"
655
+ },
656
+ {
657
+ "type": "boolean"
658
+ },
659
+ {
660
+ "type": "null"
661
+ }
662
+ ]
663
+ }
664
+ },
665
+ "IsDeleted": {
666
+ "type": "boolean"
667
+ },
668
+ "DeletedDate": {
669
+ "anyOf": [
670
+ {
671
+ "type": "string"
672
+ },
673
+ {
674
+ "type": "null"
675
+ }
676
+ ]
677
+ },
678
+ "CreatedDate": {
679
+ "type": "string"
680
+ },
681
+ "CreatedById": {
682
+ "type": "string"
683
+ },
684
+ "LastModifiedDate": {
685
+ "type": "string"
686
+ },
687
+ "LastModifiedById": {
688
+ "type": "string"
689
+ },
690
+ "SystemModstamp": {
691
+ "type": "string"
692
+ }
693
+ },
694
+ "required": [
695
+ "Id",
696
+ "fields",
697
+ "IsDeleted",
698
+ "DeletedDate",
699
+ "CreatedDate",
700
+ "CreatedById",
701
+ "LastModifiedDate",
702
+ "LastModifiedById",
703
+ "SystemModstamp"
704
+ ],
705
+ "additionalProperties": false
706
+ },
707
+ "description": "Task records keyed by id (00T…); WhoId references a Contact or Lead, WhatId an Account or Opportunity; IsClosed derives from Status."
708
+ },
709
+ {
710
+ "namespace": "users",
711
+ "schema": {
712
+ "type": "object",
713
+ "properties": {
714
+ "Id": {
715
+ "type": "string"
716
+ },
717
+ "Username": {
718
+ "type": "string"
719
+ },
720
+ "Email": {
721
+ "type": "string"
722
+ },
723
+ "FirstName": {
724
+ "anyOf": [
725
+ {
726
+ "type": "string"
727
+ },
728
+ {
729
+ "type": "null"
730
+ }
731
+ ]
732
+ },
733
+ "LastName": {
734
+ "type": "string"
735
+ },
736
+ "Name": {
737
+ "type": "string"
738
+ },
739
+ "Alias": {
740
+ "type": "string"
741
+ },
742
+ "Title": {
743
+ "anyOf": [
744
+ {
745
+ "type": "string"
746
+ },
747
+ {
748
+ "type": "null"
749
+ }
750
+ ]
751
+ },
752
+ "IsActive": {
753
+ "type": "boolean"
754
+ },
755
+ "ProfileId": {
756
+ "type": "string"
757
+ },
758
+ "UserType": {
759
+ "type": "string"
760
+ },
761
+ "TimeZoneSidKey": {
762
+ "type": "string"
763
+ },
764
+ "LocaleSidKey": {
765
+ "type": "string"
766
+ },
767
+ "LanguageLocaleKey": {
768
+ "type": "string"
769
+ },
770
+ "EmailEncodingKey": {
771
+ "type": "string"
772
+ },
773
+ "CreatedDate": {
774
+ "type": "string"
775
+ },
776
+ "LastModifiedDate": {
777
+ "type": "string"
778
+ },
779
+ "SystemModstamp": {
780
+ "type": "string"
781
+ }
782
+ },
783
+ "required": [
784
+ "Id",
785
+ "Username",
786
+ "Email",
787
+ "FirstName",
788
+ "LastName",
789
+ "Name",
790
+ "Alias",
791
+ "Title",
792
+ "IsActive",
793
+ "ProfileId",
794
+ "UserType",
795
+ "TimeZoneSidKey",
796
+ "LocaleSidKey",
797
+ "LanguageLocaleKey",
798
+ "EmailEncodingKey",
799
+ "CreatedDate",
800
+ "LastModifiedDate",
801
+ "SystemModstamp"
802
+ ],
803
+ "additionalProperties": false
804
+ },
805
+ "description": "Users keyed by id (005…). Username is unique and lower-case; an inactive user still owns records but cannot authenticate or receive ownership. Queryable as User; never writable."
806
+ }
807
+ ],
808
+ "operations": [
809
+ {
810
+ "id": "collections.create",
811
+ "description": "sObject Collections create (POST …/composite/sobjects): up to 200 records of mixed types, each with attributes.type; per-item results in order, allOrNone rolls every write back.",
812
+ "inputSchema": {
813
+ "type": "object",
814
+ "properties": {
815
+ "version": {
816
+ "type": "string",
817
+ "minLength": 1,
818
+ "maxLength": 16,
819
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
820
+ },
821
+ "allOrNone": {
822
+ "type": "boolean"
823
+ },
824
+ "records": {
825
+ "type": "array",
826
+ "items": {
827
+ "type": "object"
828
+ }
829
+ }
830
+ },
831
+ "required": [
832
+ "records"
833
+ ],
834
+ "additionalProperties": false
835
+ },
836
+ "outputSchema": {
837
+ "type": "array",
838
+ "items": {
839
+ "type": "object",
840
+ "properties": {
841
+ "id": {
842
+ "anyOf": [
843
+ {
844
+ "type": "string"
845
+ },
846
+ {
847
+ "type": "null"
848
+ }
849
+ ]
850
+ },
851
+ "success": {
852
+ "type": "boolean"
853
+ },
854
+ "errors": {
855
+ "type": "array",
856
+ "items": {
857
+ "type": "object",
858
+ "properties": {
859
+ "statusCode": {
860
+ "type": "string"
861
+ },
862
+ "message": {
863
+ "type": "string"
864
+ },
865
+ "fields": {
866
+ "type": "array",
867
+ "items": {
868
+ "type": "string",
869
+ "minLength": 1,
870
+ "maxLength": 255
871
+ }
872
+ }
873
+ },
874
+ "required": [
875
+ "statusCode",
876
+ "message"
877
+ ]
878
+ }
879
+ },
880
+ "created": {
881
+ "type": "boolean"
882
+ }
883
+ },
884
+ "required": [
885
+ "id",
886
+ "success",
887
+ "errors"
888
+ ]
889
+ }
890
+ },
891
+ "declaredErrors": [
892
+ "INVALID_SESSION_ID",
893
+ "JSON_PARSER_ERROR",
894
+ "LIMIT_EXCEEDED",
895
+ "NOT_FOUND",
896
+ "REQUEST_LIMIT_EXCEEDED",
897
+ "SERVER_UNAVAILABLE",
898
+ "UNABLE_TO_LOCK_ROW"
899
+ ],
900
+ "idempotency": "optional",
901
+ "fidelity": "behavioral"
902
+ },
903
+ {
904
+ "id": "collections.delete",
905
+ "description": "sObject Collections delete (DELETE …/composite/sobjects?ids=…): up to 200 ids of any writable type; cascades as records.delete; per-item results, allOrNone rollback.",
906
+ "inputSchema": {
907
+ "type": "object",
908
+ "properties": {
909
+ "version": {
910
+ "type": "string",
911
+ "minLength": 1,
912
+ "maxLength": 16,
913
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
914
+ },
915
+ "ids": {
916
+ "type": "array",
917
+ "items": {
918
+ "type": "string",
919
+ "minLength": 1,
920
+ "maxLength": 18
921
+ }
922
+ },
923
+ "allOrNone": {
924
+ "type": "boolean"
925
+ }
926
+ },
927
+ "required": [
928
+ "ids"
929
+ ],
930
+ "additionalProperties": false
931
+ },
932
+ "outputSchema": {
933
+ "type": "array",
934
+ "items": {
935
+ "type": "object",
936
+ "properties": {
937
+ "id": {
938
+ "anyOf": [
939
+ {
940
+ "type": "string"
941
+ },
942
+ {
943
+ "type": "null"
944
+ }
945
+ ]
946
+ },
947
+ "success": {
948
+ "type": "boolean"
949
+ },
950
+ "errors": {
951
+ "type": "array",
952
+ "items": {
953
+ "type": "object",
954
+ "properties": {
955
+ "statusCode": {
956
+ "type": "string"
957
+ },
958
+ "message": {
959
+ "type": "string"
960
+ },
961
+ "fields": {
962
+ "type": "array",
963
+ "items": {
964
+ "type": "string",
965
+ "minLength": 1,
966
+ "maxLength": 255
967
+ }
968
+ }
969
+ },
970
+ "required": [
971
+ "statusCode",
972
+ "message"
973
+ ]
974
+ }
975
+ },
976
+ "created": {
977
+ "type": "boolean"
978
+ }
979
+ },
980
+ "required": [
981
+ "id",
982
+ "success",
983
+ "errors"
984
+ ]
985
+ }
986
+ },
987
+ "declaredErrors": [
988
+ "INVALID_SESSION_ID",
989
+ "JSON_PARSER_ERROR",
990
+ "LIMIT_EXCEEDED",
991
+ "NOT_FOUND",
992
+ "REQUEST_LIMIT_EXCEEDED",
993
+ "UNABLE_TO_LOCK_ROW"
994
+ ],
995
+ "idempotency": "optional",
996
+ "fidelity": "behavioral"
997
+ },
998
+ {
999
+ "id": "collections.retrieve",
1000
+ "description": "sObject Collections retrieve (POST/GET …/composite/sobjects/{sobjectType}): up to 2,000 ids with a field list; null for missing, deleted, hidden or wrong-type ids.",
1001
+ "inputSchema": {
1002
+ "type": "object",
1003
+ "properties": {
1004
+ "sobjectType": {
1005
+ "type": "string",
1006
+ "minLength": 1,
1007
+ "maxLength": 64
1008
+ },
1009
+ "version": {
1010
+ "type": "string",
1011
+ "minLength": 1,
1012
+ "maxLength": 16,
1013
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1014
+ },
1015
+ "ids": {
1016
+ "type": "array",
1017
+ "items": {
1018
+ "type": "string",
1019
+ "minLength": 1,
1020
+ "maxLength": 18
1021
+ }
1022
+ },
1023
+ "fields": {
1024
+ "type": "array",
1025
+ "items": {
1026
+ "type": "string",
1027
+ "minLength": 1,
1028
+ "maxLength": 255
1029
+ }
1030
+ }
1031
+ },
1032
+ "required": [
1033
+ "sobjectType",
1034
+ "ids",
1035
+ "fields"
1036
+ ],
1037
+ "additionalProperties": false
1038
+ },
1039
+ "outputSchema": {
1040
+ "type": "array",
1041
+ "items": {
1042
+ "anyOf": [
1043
+ {
1044
+ "type": "object",
1045
+ "properties": {
1046
+ "attributes": {
1047
+ "type": "object",
1048
+ "properties": {
1049
+ "type": {
1050
+ "type": "string"
1051
+ },
1052
+ "url": {
1053
+ "type": "string"
1054
+ }
1055
+ },
1056
+ "required": [
1057
+ "type",
1058
+ "url"
1059
+ ],
1060
+ "additionalProperties": false
1061
+ },
1062
+ "Id": {
1063
+ "type": "string"
1064
+ }
1065
+ },
1066
+ "required": [
1067
+ "attributes"
1068
+ ]
1069
+ },
1070
+ {
1071
+ "type": "null"
1072
+ }
1073
+ ]
1074
+ }
1075
+ },
1076
+ "declaredErrors": [
1077
+ "INVALID_FIELD",
1078
+ "INVALID_SESSION_ID",
1079
+ "INVALID_TYPE",
1080
+ "JSON_PARSER_ERROR",
1081
+ "LIMIT_EXCEEDED",
1082
+ "MALFORMED_ID",
1083
+ "NOT_FOUND",
1084
+ "REQUEST_LIMIT_EXCEEDED"
1085
+ ],
1086
+ "idempotency": "none",
1087
+ "fidelity": "stateful"
1088
+ },
1089
+ {
1090
+ "id": "collections.update",
1091
+ "description": "sObject Collections update (PATCH …/composite/sobjects): up to 200 records carrying Id; per-item results, allOrNone rollback.",
1092
+ "inputSchema": {
1093
+ "type": "object",
1094
+ "properties": {
1095
+ "version": {
1096
+ "type": "string",
1097
+ "minLength": 1,
1098
+ "maxLength": 16,
1099
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1100
+ },
1101
+ "allOrNone": {
1102
+ "type": "boolean"
1103
+ },
1104
+ "records": {
1105
+ "type": "array",
1106
+ "items": {
1107
+ "type": "object"
1108
+ }
1109
+ }
1110
+ },
1111
+ "required": [
1112
+ "records"
1113
+ ],
1114
+ "additionalProperties": false
1115
+ },
1116
+ "outputSchema": {
1117
+ "type": "array",
1118
+ "items": {
1119
+ "type": "object",
1120
+ "properties": {
1121
+ "id": {
1122
+ "anyOf": [
1123
+ {
1124
+ "type": "string"
1125
+ },
1126
+ {
1127
+ "type": "null"
1128
+ }
1129
+ ]
1130
+ },
1131
+ "success": {
1132
+ "type": "boolean"
1133
+ },
1134
+ "errors": {
1135
+ "type": "array",
1136
+ "items": {
1137
+ "type": "object",
1138
+ "properties": {
1139
+ "statusCode": {
1140
+ "type": "string"
1141
+ },
1142
+ "message": {
1143
+ "type": "string"
1144
+ },
1145
+ "fields": {
1146
+ "type": "array",
1147
+ "items": {
1148
+ "type": "string",
1149
+ "minLength": 1,
1150
+ "maxLength": 255
1151
+ }
1152
+ }
1153
+ },
1154
+ "required": [
1155
+ "statusCode",
1156
+ "message"
1157
+ ]
1158
+ }
1159
+ },
1160
+ "created": {
1161
+ "type": "boolean"
1162
+ }
1163
+ },
1164
+ "required": [
1165
+ "id",
1166
+ "success",
1167
+ "errors"
1168
+ ]
1169
+ }
1170
+ },
1171
+ "declaredErrors": [
1172
+ "INVALID_SESSION_ID",
1173
+ "JSON_PARSER_ERROR",
1174
+ "LIMIT_EXCEEDED",
1175
+ "NOT_FOUND",
1176
+ "REQUEST_LIMIT_EXCEEDED",
1177
+ "UNABLE_TO_LOCK_ROW"
1178
+ ],
1179
+ "idempotency": "optional",
1180
+ "fidelity": "behavioral"
1181
+ },
1182
+ {
1183
+ "id": "collections.upsert",
1184
+ "description": "sObject Collections upsert (PATCH …/composite/sobjects/{sobjectType}/{externalIdField}): up to 200 records carrying the external id value; per-item results with created, allOrNone rollback.",
1185
+ "inputSchema": {
1186
+ "type": "object",
1187
+ "properties": {
1188
+ "sobjectType": {
1189
+ "type": "string",
1190
+ "minLength": 1,
1191
+ "maxLength": 64
1192
+ },
1193
+ "version": {
1194
+ "type": "string",
1195
+ "minLength": 1,
1196
+ "maxLength": 16,
1197
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1198
+ },
1199
+ "externalIdField": {
1200
+ "type": "string",
1201
+ "minLength": 1,
1202
+ "maxLength": 255
1203
+ },
1204
+ "allOrNone": {
1205
+ "type": "boolean"
1206
+ },
1207
+ "records": {
1208
+ "type": "array",
1209
+ "items": {
1210
+ "type": "object"
1211
+ }
1212
+ }
1213
+ },
1214
+ "required": [
1215
+ "sobjectType",
1216
+ "externalIdField",
1217
+ "records"
1218
+ ],
1219
+ "additionalProperties": false
1220
+ },
1221
+ "outputSchema": {
1222
+ "type": "array",
1223
+ "items": {
1224
+ "type": "object",
1225
+ "properties": {
1226
+ "id": {
1227
+ "anyOf": [
1228
+ {
1229
+ "type": "string"
1230
+ },
1231
+ {
1232
+ "type": "null"
1233
+ }
1234
+ ]
1235
+ },
1236
+ "success": {
1237
+ "type": "boolean"
1238
+ },
1239
+ "errors": {
1240
+ "type": "array",
1241
+ "items": {
1242
+ "type": "object",
1243
+ "properties": {
1244
+ "statusCode": {
1245
+ "type": "string"
1246
+ },
1247
+ "message": {
1248
+ "type": "string"
1249
+ },
1250
+ "fields": {
1251
+ "type": "array",
1252
+ "items": {
1253
+ "type": "string",
1254
+ "minLength": 1,
1255
+ "maxLength": 255
1256
+ }
1257
+ }
1258
+ },
1259
+ "required": [
1260
+ "statusCode",
1261
+ "message"
1262
+ ]
1263
+ }
1264
+ },
1265
+ "created": {
1266
+ "type": "boolean"
1267
+ }
1268
+ },
1269
+ "required": [
1270
+ "id",
1271
+ "success",
1272
+ "errors"
1273
+ ]
1274
+ }
1275
+ },
1276
+ "declaredErrors": [
1277
+ "INVALID_FIELD",
1278
+ "INVALID_SESSION_ID",
1279
+ "INVALID_TYPE",
1280
+ "INVALID_TYPE_FOR_OPERATION",
1281
+ "JSON_PARSER_ERROR",
1282
+ "LIMIT_EXCEEDED",
1283
+ "NOT_FOUND",
1284
+ "REQUEST_LIMIT_EXCEEDED",
1285
+ "SERVER_UNAVAILABLE",
1286
+ "UNABLE_TO_LOCK_ROW"
1287
+ ],
1288
+ "idempotency": "optional",
1289
+ "fidelity": "behavioral"
1290
+ },
1291
+ {
1292
+ "id": "composite.execute",
1293
+ "description": "Composite request (POST …/composite): up to 25 subrequests (at most 5 queries) over the sObject row resources, describe, basic info, query/queryAll and limits, with @{referenceId.path} substitution; allOrNone rolls back and marks siblings PROCESSING_HALTED. Per-subrequest failures are body-level, not Tool errors.",
1294
+ "inputSchema": {
1295
+ "type": "object",
1296
+ "properties": {
1297
+ "version": {
1298
+ "type": "string",
1299
+ "minLength": 1,
1300
+ "maxLength": 16,
1301
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1302
+ },
1303
+ "allOrNone": {
1304
+ "type": "boolean"
1305
+ },
1306
+ "collateSubrequests": {
1307
+ "type": "boolean"
1308
+ },
1309
+ "compositeRequest": {
1310
+ "type": "array",
1311
+ "items": {
1312
+ "type": "object"
1313
+ }
1314
+ }
1315
+ },
1316
+ "required": [
1317
+ "compositeRequest"
1318
+ ],
1319
+ "additionalProperties": false
1320
+ },
1321
+ "outputSchema": {
1322
+ "type": "object",
1323
+ "properties": {
1324
+ "compositeResponse": {
1325
+ "type": "array",
1326
+ "items": {
1327
+ "type": "object",
1328
+ "properties": {
1329
+ "body": {},
1330
+ "httpHeaders": {
1331
+ "type": "object"
1332
+ },
1333
+ "httpStatusCode": {
1334
+ "type": "integer"
1335
+ },
1336
+ "referenceId": {
1337
+ "type": "string"
1338
+ }
1339
+ },
1340
+ "required": [
1341
+ "body",
1342
+ "httpHeaders",
1343
+ "httpStatusCode",
1344
+ "referenceId"
1345
+ ]
1346
+ }
1347
+ },
1348
+ "_limitInfo": {
1349
+ "type": "string",
1350
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1351
+ }
1352
+ },
1353
+ "required": [
1354
+ "compositeResponse",
1355
+ "_limitInfo"
1356
+ ]
1357
+ },
1358
+ "declaredErrors": [
1359
+ "INVALID_SESSION_ID",
1360
+ "JSON_PARSER_ERROR",
1361
+ "LIMIT_EXCEEDED",
1362
+ "NOT_FOUND",
1363
+ "REQUEST_LIMIT_EXCEEDED",
1364
+ "UNABLE_TO_LOCK_ROW"
1365
+ ],
1366
+ "idempotency": "optional",
1367
+ "fidelity": "behavioral"
1368
+ },
1369
+ {
1370
+ "id": "limits.get",
1371
+ "description": "Org limits (GET /services/data/{version}/limits): DailyApiRequests and DataStorageMB come from the org row, the other entries are constant decorations.",
1372
+ "inputSchema": {
1373
+ "type": "object",
1374
+ "properties": {
1375
+ "version": {
1376
+ "type": "string",
1377
+ "minLength": 1,
1378
+ "maxLength": 16,
1379
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1380
+ }
1381
+ },
1382
+ "required": [],
1383
+ "additionalProperties": false
1384
+ },
1385
+ "outputSchema": {
1386
+ "type": "object",
1387
+ "properties": {
1388
+ "DailyApiRequests": {
1389
+ "type": "object",
1390
+ "properties": {
1391
+ "Max": {
1392
+ "type": "integer"
1393
+ },
1394
+ "Remaining": {
1395
+ "type": "integer"
1396
+ }
1397
+ },
1398
+ "required": [
1399
+ "Max",
1400
+ "Remaining"
1401
+ ]
1402
+ },
1403
+ "DataStorageMB": {
1404
+ "type": "object",
1405
+ "properties": {
1406
+ "Max": {
1407
+ "type": "integer"
1408
+ },
1409
+ "Remaining": {
1410
+ "type": "integer"
1411
+ }
1412
+ },
1413
+ "required": [
1414
+ "Max",
1415
+ "Remaining"
1416
+ ]
1417
+ },
1418
+ "_limitInfo": {
1419
+ "type": "string",
1420
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1421
+ }
1422
+ },
1423
+ "required": [
1424
+ "DailyApiRequests",
1425
+ "DataStorageMB",
1426
+ "_limitInfo"
1427
+ ]
1428
+ },
1429
+ "declaredErrors": [
1430
+ "INVALID_SESSION_ID",
1431
+ "LIMIT_EXCEEDED",
1432
+ "NOT_FOUND",
1433
+ "REQUEST_LIMIT_EXCEEDED"
1434
+ ],
1435
+ "idempotency": "none",
1436
+ "fidelity": "stateful"
1437
+ },
1438
+ {
1439
+ "id": "query.execute",
1440
+ "description": "SOQL query (GET …/query?q= and …/queryAll?q=; MCP alias run_soql_query with `query`). Supported grammar: SELECT fields / one-level relationship fields / child subqueries / FIELDS() / COUNT(), WHERE with comparison, LIKE, IN, NOT, AND/OR, date literals, ORDER BY, LIMIT, OFFSET. Pages by Sforce-Query-Options batchSize with a self-contained locator.",
1441
+ "inputSchema": {
1442
+ "type": "object",
1443
+ "properties": {
1444
+ "q": {
1445
+ "type": "string",
1446
+ "maxLength": 20000
1447
+ },
1448
+ "query": {
1449
+ "type": "string",
1450
+ "maxLength": 20000
1451
+ },
1452
+ "version": {
1453
+ "type": "string",
1454
+ "minLength": 1,
1455
+ "maxLength": 16,
1456
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1457
+ },
1458
+ "includeDeleted": {
1459
+ "type": "boolean"
1460
+ },
1461
+ "batchSize": {
1462
+ "type": "integer",
1463
+ "minimum": 1,
1464
+ "maximum": 100000
1465
+ },
1466
+ "usernameOrAlias": {
1467
+ "type": "string",
1468
+ "maxLength": 255
1469
+ },
1470
+ "directory": {
1471
+ "type": "string",
1472
+ "maxLength": 1024
1473
+ },
1474
+ "useToolingApi": {
1475
+ "type": "boolean"
1476
+ }
1477
+ },
1478
+ "required": [],
1479
+ "additionalProperties": false
1480
+ },
1481
+ "outputSchema": {
1482
+ "type": "object",
1483
+ "properties": {
1484
+ "totalSize": {
1485
+ "type": "integer",
1486
+ "minimum": 0
1487
+ },
1488
+ "done": {
1489
+ "type": "boolean"
1490
+ },
1491
+ "records": {
1492
+ "type": "array",
1493
+ "items": {
1494
+ "type": "object",
1495
+ "properties": {
1496
+ "attributes": {
1497
+ "type": "object",
1498
+ "properties": {
1499
+ "type": {
1500
+ "type": "string"
1501
+ },
1502
+ "url": {
1503
+ "type": "string"
1504
+ }
1505
+ },
1506
+ "required": [
1507
+ "type",
1508
+ "url"
1509
+ ],
1510
+ "additionalProperties": false
1511
+ },
1512
+ "Id": {
1513
+ "type": "string"
1514
+ }
1515
+ },
1516
+ "required": [
1517
+ "attributes"
1518
+ ]
1519
+ }
1520
+ },
1521
+ "nextRecordsUrl": {
1522
+ "type": "string"
1523
+ },
1524
+ "_limitInfo": {
1525
+ "type": "string",
1526
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1527
+ }
1528
+ },
1529
+ "required": [
1530
+ "totalSize",
1531
+ "done",
1532
+ "records",
1533
+ "_limitInfo"
1534
+ ]
1535
+ },
1536
+ "declaredErrors": [
1537
+ "INVALID_FIELD",
1538
+ "INVALID_SESSION_ID",
1539
+ "INVALID_TYPE",
1540
+ "LIMIT_EXCEEDED",
1541
+ "MALFORMED_QUERY",
1542
+ "NOT_FOUND",
1543
+ "REQUEST_LIMIT_EXCEEDED"
1544
+ ],
1545
+ "idempotency": "none",
1546
+ "fidelity": "stateful",
1547
+ "mcp": {
1548
+ "name": "run_soql_query",
1549
+ "description": "Run a SOQL query against the org and return { totalSize, done, records }. Pass the statement as `query` (or `q`). usernameOrAlias must name an active user; useToolingApi is not supported."
1550
+ }
1551
+ },
1552
+ {
1553
+ "id": "query.more",
1554
+ "description": "Next page of a query (GET …/query/{locator} and …/queryAll/{locator}). The locator re-runs the query at its offset, so it is deterministic; a foreign or exhausted locator fails INVALID_QUERY_LOCATOR.",
1555
+ "inputSchema": {
1556
+ "type": "object",
1557
+ "properties": {
1558
+ "locator": {
1559
+ "type": "string",
1560
+ "minLength": 1,
1561
+ "maxLength": 4096
1562
+ },
1563
+ "version": {
1564
+ "type": "string",
1565
+ "minLength": 1,
1566
+ "maxLength": 16,
1567
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1568
+ },
1569
+ "includeDeleted": {
1570
+ "type": "boolean"
1571
+ }
1572
+ },
1573
+ "required": [
1574
+ "locator"
1575
+ ],
1576
+ "additionalProperties": false
1577
+ },
1578
+ "outputSchema": {
1579
+ "type": "object",
1580
+ "properties": {
1581
+ "totalSize": {
1582
+ "type": "integer",
1583
+ "minimum": 0
1584
+ },
1585
+ "done": {
1586
+ "type": "boolean"
1587
+ },
1588
+ "records": {
1589
+ "type": "array",
1590
+ "items": {
1591
+ "type": "object",
1592
+ "properties": {
1593
+ "attributes": {
1594
+ "type": "object",
1595
+ "properties": {
1596
+ "type": {
1597
+ "type": "string"
1598
+ },
1599
+ "url": {
1600
+ "type": "string"
1601
+ }
1602
+ },
1603
+ "required": [
1604
+ "type",
1605
+ "url"
1606
+ ],
1607
+ "additionalProperties": false
1608
+ },
1609
+ "Id": {
1610
+ "type": "string"
1611
+ }
1612
+ },
1613
+ "required": [
1614
+ "attributes"
1615
+ ]
1616
+ }
1617
+ },
1618
+ "nextRecordsUrl": {
1619
+ "type": "string"
1620
+ },
1621
+ "_limitInfo": {
1622
+ "type": "string",
1623
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1624
+ }
1625
+ },
1626
+ "required": [
1627
+ "totalSize",
1628
+ "done",
1629
+ "records",
1630
+ "_limitInfo"
1631
+ ]
1632
+ },
1633
+ "declaredErrors": [
1634
+ "INVALID_FIELD",
1635
+ "INVALID_QUERY_LOCATOR",
1636
+ "INVALID_SESSION_ID",
1637
+ "INVALID_TYPE",
1638
+ "LIMIT_EXCEEDED",
1639
+ "MALFORMED_QUERY",
1640
+ "NOT_FOUND",
1641
+ "REQUEST_LIMIT_EXCEEDED"
1642
+ ],
1643
+ "idempotency": "none",
1644
+ "fidelity": "stateful"
1645
+ },
1646
+ {
1647
+ "id": "records.create",
1648
+ "description": "Create one record (POST /services/data/{version}/sobjects/{sobjectType}); the REST body is the record. OwnerId defaults to the caller, picklist defaults and derived fields are applied; emits record.created.",
1649
+ "inputSchema": {
1650
+ "type": "object",
1651
+ "properties": {
1652
+ "sobjectType": {
1653
+ "type": "string",
1654
+ "minLength": 1,
1655
+ "maxLength": 64
1656
+ },
1657
+ "version": {
1658
+ "type": "string",
1659
+ "minLength": 1,
1660
+ "maxLength": 16,
1661
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1662
+ },
1663
+ "record": {
1664
+ "type": "object",
1665
+ "description": "Salesforce record fields keyed by API name (PascalCase); attributes is ignored."
1666
+ }
1667
+ },
1668
+ "required": [
1669
+ "sobjectType",
1670
+ "record"
1671
+ ],
1672
+ "additionalProperties": false
1673
+ },
1674
+ "outputSchema": {
1675
+ "type": "object",
1676
+ "properties": {
1677
+ "id": {
1678
+ "type": "string"
1679
+ },
1680
+ "success": {
1681
+ "type": "boolean"
1682
+ },
1683
+ "errors": {
1684
+ "type": "array",
1685
+ "items": {
1686
+ "type": "object",
1687
+ "properties": {
1688
+ "statusCode": {
1689
+ "type": "string"
1690
+ },
1691
+ "message": {
1692
+ "type": "string"
1693
+ },
1694
+ "fields": {
1695
+ "type": "array",
1696
+ "items": {
1697
+ "type": "string",
1698
+ "minLength": 1,
1699
+ "maxLength": 255
1700
+ }
1701
+ }
1702
+ },
1703
+ "required": [
1704
+ "statusCode",
1705
+ "message"
1706
+ ]
1707
+ }
1708
+ },
1709
+ "_limitInfo": {
1710
+ "type": "string",
1711
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1712
+ }
1713
+ },
1714
+ "required": [
1715
+ "id",
1716
+ "success",
1717
+ "errors",
1718
+ "_limitInfo"
1719
+ ]
1720
+ },
1721
+ "declaredErrors": [
1722
+ "DUPLICATE_VALUE",
1723
+ "FIELD_CUSTOM_VALIDATION_EXCEPTION",
1724
+ "FIELD_INTEGRITY_EXCEPTION",
1725
+ "INSUFFICIENT_ACCESS_OR_READONLY",
1726
+ "INVALID_CROSS_REFERENCE_KEY",
1727
+ "INVALID_FIELD",
1728
+ "INVALID_FIELD_FOR_INSERT_UPDATE",
1729
+ "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST",
1730
+ "INVALID_SESSION_ID",
1731
+ "INVALID_TYPE",
1732
+ "INVALID_TYPE_FOR_OPERATION",
1733
+ "JSON_PARSER_ERROR",
1734
+ "LIMIT_EXCEEDED",
1735
+ "MALFORMED_ID",
1736
+ "NOT_FOUND",
1737
+ "REQUEST_LIMIT_EXCEEDED",
1738
+ "REQUIRED_FIELD_MISSING",
1739
+ "SERVER_UNAVAILABLE",
1740
+ "UNABLE_TO_LOCK_ROW"
1741
+ ],
1742
+ "idempotency": "optional",
1743
+ "fidelity": "behavioral"
1744
+ },
1745
+ {
1746
+ "id": "records.delete",
1747
+ "description": "Soft delete into the recycle bin (DELETE …/sobjects/{sobjectType}/{id}) with Salesforce's cascade: Account → Contacts, Opportunities, Tasks; Contact/Lead → Tasks (WhoId); Opportunity → Tasks (WhatId). Emits record.deleted per row.",
1748
+ "inputSchema": {
1749
+ "type": "object",
1750
+ "properties": {
1751
+ "sobjectType": {
1752
+ "type": "string",
1753
+ "minLength": 1,
1754
+ "maxLength": 64
1755
+ },
1756
+ "version": {
1757
+ "type": "string",
1758
+ "minLength": 1,
1759
+ "maxLength": 16,
1760
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1761
+ },
1762
+ "id": {
1763
+ "type": "string",
1764
+ "minLength": 1,
1765
+ "maxLength": 18
1766
+ }
1767
+ },
1768
+ "required": [
1769
+ "sobjectType",
1770
+ "id"
1771
+ ],
1772
+ "additionalProperties": false
1773
+ },
1774
+ "outputSchema": {
1775
+ "type": "object",
1776
+ "properties": {
1777
+ "_limitInfo": {
1778
+ "type": "string",
1779
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1780
+ }
1781
+ },
1782
+ "required": [
1783
+ "_limitInfo"
1784
+ ]
1785
+ },
1786
+ "declaredErrors": [
1787
+ "ENTITY_IS_DELETED",
1788
+ "INSUFFICIENT_ACCESS_OR_READONLY",
1789
+ "INVALID_SESSION_ID",
1790
+ "INVALID_TYPE",
1791
+ "INVALID_TYPE_FOR_OPERATION",
1792
+ "LIMIT_EXCEEDED",
1793
+ "MALFORMED_ID",
1794
+ "NOT_FOUND",
1795
+ "REQUEST_LIMIT_EXCEEDED",
1796
+ "UNABLE_TO_LOCK_ROW"
1797
+ ],
1798
+ "idempotency": "optional",
1799
+ "fidelity": "behavioral"
1800
+ },
1801
+ {
1802
+ "id": "records.retrieve",
1803
+ "description": "Retrieve one record by id or by external id (GET …/sobjects/{sobjectType}/{id} and …/{externalIdField}/{value}); `fields` projects fields including one-level relationship paths such as Owner.Name. Records outside the caller's sharing are NOT_FOUND.",
1804
+ "inputSchema": {
1805
+ "type": "object",
1806
+ "properties": {
1807
+ "sobjectType": {
1808
+ "type": "string",
1809
+ "minLength": 1,
1810
+ "maxLength": 64
1811
+ },
1812
+ "version": {
1813
+ "type": "string",
1814
+ "minLength": 1,
1815
+ "maxLength": 16,
1816
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1817
+ },
1818
+ "id": {
1819
+ "type": "string",
1820
+ "minLength": 1,
1821
+ "maxLength": 18
1822
+ },
1823
+ "externalIdField": {
1824
+ "type": "string",
1825
+ "minLength": 1,
1826
+ "maxLength": 255
1827
+ },
1828
+ "value": {
1829
+ "type": "string",
1830
+ "maxLength": 255
1831
+ },
1832
+ "fields": {
1833
+ "type": "array",
1834
+ "items": {
1835
+ "type": "string",
1836
+ "minLength": 1,
1837
+ "maxLength": 255
1838
+ },
1839
+ "minItems": 1
1840
+ }
1841
+ },
1842
+ "required": [
1843
+ "sobjectType"
1844
+ ],
1845
+ "additionalProperties": false
1846
+ },
1847
+ "outputSchema": {
1848
+ "type": "object",
1849
+ "properties": {
1850
+ "attributes": {
1851
+ "type": "object",
1852
+ "properties": {
1853
+ "type": {
1854
+ "type": "string"
1855
+ },
1856
+ "url": {
1857
+ "type": "string"
1858
+ }
1859
+ },
1860
+ "required": [
1861
+ "type",
1862
+ "url"
1863
+ ],
1864
+ "additionalProperties": false
1865
+ },
1866
+ "Id": {
1867
+ "type": "string"
1868
+ }
1869
+ },
1870
+ "required": [
1871
+ "attributes"
1872
+ ]
1873
+ },
1874
+ "declaredErrors": [
1875
+ "ENTITY_IS_DELETED",
1876
+ "INVALID_FIELD",
1877
+ "INVALID_SESSION_ID",
1878
+ "INVALID_TYPE",
1879
+ "LIMIT_EXCEEDED",
1880
+ "MALFORMED_ID",
1881
+ "NOT_FOUND",
1882
+ "REQUEST_LIMIT_EXCEEDED"
1883
+ ],
1884
+ "idempotency": "none",
1885
+ "fidelity": "stateful"
1886
+ },
1887
+ {
1888
+ "id": "records.update",
1889
+ "description": "Partial update (PATCH …/sobjects/{sobjectType}/{id}): only sent fields change, null clears, read-only fields are rejected, converted leads are immutable, stage/status derivations re-run; emits record.updated when something changed.",
1890
+ "inputSchema": {
1891
+ "type": "object",
1892
+ "properties": {
1893
+ "sobjectType": {
1894
+ "type": "string",
1895
+ "minLength": 1,
1896
+ "maxLength": 64
1897
+ },
1898
+ "version": {
1899
+ "type": "string",
1900
+ "minLength": 1,
1901
+ "maxLength": 16,
1902
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1903
+ },
1904
+ "id": {
1905
+ "type": "string",
1906
+ "minLength": 1,
1907
+ "maxLength": 18
1908
+ },
1909
+ "record": {
1910
+ "type": "object",
1911
+ "description": "Salesforce record fields keyed by API name (PascalCase); attributes is ignored."
1912
+ }
1913
+ },
1914
+ "required": [
1915
+ "sobjectType",
1916
+ "id",
1917
+ "record"
1918
+ ],
1919
+ "additionalProperties": false
1920
+ },
1921
+ "outputSchema": {
1922
+ "type": "object",
1923
+ "properties": {
1924
+ "_limitInfo": {
1925
+ "type": "string",
1926
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
1927
+ }
1928
+ },
1929
+ "required": [
1930
+ "_limitInfo"
1931
+ ]
1932
+ },
1933
+ "declaredErrors": [
1934
+ "CANNOT_UPDATE_CONVERTED_LEAD",
1935
+ "DUPLICATE_VALUE",
1936
+ "ENTITY_IS_DELETED",
1937
+ "FIELD_CUSTOM_VALIDATION_EXCEPTION",
1938
+ "FIELD_INTEGRITY_EXCEPTION",
1939
+ "INSUFFICIENT_ACCESS_OR_READONLY",
1940
+ "INVALID_CROSS_REFERENCE_KEY",
1941
+ "INVALID_FIELD",
1942
+ "INVALID_FIELD_FOR_INSERT_UPDATE",
1943
+ "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST",
1944
+ "INVALID_SESSION_ID",
1945
+ "INVALID_TYPE",
1946
+ "INVALID_TYPE_FOR_OPERATION",
1947
+ "JSON_PARSER_ERROR",
1948
+ "LIMIT_EXCEEDED",
1949
+ "MALFORMED_ID",
1950
+ "NOT_FOUND",
1951
+ "REQUEST_LIMIT_EXCEEDED",
1952
+ "REQUIRED_FIELD_MISSING",
1953
+ "UNABLE_TO_LOCK_ROW"
1954
+ ],
1955
+ "idempotency": "optional",
1956
+ "fidelity": "behavioral"
1957
+ },
1958
+ {
1959
+ "id": "records.upsert",
1960
+ "description": "Upsert by external id (PATCH …/sobjects/{sobjectType}/{externalIdField}/{value}): one non-deleted match updates, none creates; `Id` is accepted as the field (update only). Returns created=true|false.",
1961
+ "inputSchema": {
1962
+ "type": "object",
1963
+ "properties": {
1964
+ "sobjectType": {
1965
+ "type": "string",
1966
+ "minLength": 1,
1967
+ "maxLength": 64
1968
+ },
1969
+ "version": {
1970
+ "type": "string",
1971
+ "minLength": 1,
1972
+ "maxLength": 16,
1973
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
1974
+ },
1975
+ "externalIdField": {
1976
+ "type": "string",
1977
+ "minLength": 1,
1978
+ "maxLength": 255
1979
+ },
1980
+ "value": {
1981
+ "type": "string",
1982
+ "minLength": 1,
1983
+ "maxLength": 255
1984
+ },
1985
+ "record": {
1986
+ "type": "object",
1987
+ "description": "Salesforce record fields keyed by API name (PascalCase); attributes is ignored."
1988
+ }
1989
+ },
1990
+ "required": [
1991
+ "sobjectType",
1992
+ "externalIdField",
1993
+ "value",
1994
+ "record"
1995
+ ],
1996
+ "additionalProperties": false
1997
+ },
1998
+ "outputSchema": {
1999
+ "type": "object",
2000
+ "properties": {
2001
+ "id": {
2002
+ "type": "string"
2003
+ },
2004
+ "success": {
2005
+ "type": "boolean"
2006
+ },
2007
+ "errors": {
2008
+ "type": "array",
2009
+ "items": {
2010
+ "type": "object",
2011
+ "properties": {
2012
+ "statusCode": {
2013
+ "type": "string"
2014
+ },
2015
+ "message": {
2016
+ "type": "string"
2017
+ },
2018
+ "fields": {
2019
+ "type": "array",
2020
+ "items": {
2021
+ "type": "string",
2022
+ "minLength": 1,
2023
+ "maxLength": 255
2024
+ }
2025
+ }
2026
+ },
2027
+ "required": [
2028
+ "statusCode",
2029
+ "message"
2030
+ ]
2031
+ }
2032
+ },
2033
+ "created": {
2034
+ "type": "boolean"
2035
+ },
2036
+ "_limitInfo": {
2037
+ "type": "string",
2038
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
2039
+ }
2040
+ },
2041
+ "required": [
2042
+ "id",
2043
+ "success",
2044
+ "errors",
2045
+ "created",
2046
+ "_limitInfo"
2047
+ ]
2048
+ },
2049
+ "declaredErrors": [
2050
+ "CANNOT_UPDATE_CONVERTED_LEAD",
2051
+ "DUPLICATE_VALUE",
2052
+ "ENTITY_IS_DELETED",
2053
+ "FIELD_CUSTOM_VALIDATION_EXCEPTION",
2054
+ "FIELD_INTEGRITY_EXCEPTION",
2055
+ "INSUFFICIENT_ACCESS_OR_READONLY",
2056
+ "INVALID_CROSS_REFERENCE_KEY",
2057
+ "INVALID_FIELD",
2058
+ "INVALID_FIELD_FOR_INSERT_UPDATE",
2059
+ "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST",
2060
+ "INVALID_SESSION_ID",
2061
+ "INVALID_TYPE",
2062
+ "INVALID_TYPE_FOR_OPERATION",
2063
+ "JSON_PARSER_ERROR",
2064
+ "LIMIT_EXCEEDED",
2065
+ "MALFORMED_ID",
2066
+ "NOT_FOUND",
2067
+ "REQUEST_LIMIT_EXCEEDED",
2068
+ "REQUIRED_FIELD_MISSING",
2069
+ "SERVER_UNAVAILABLE",
2070
+ "UNABLE_TO_LOCK_ROW"
2071
+ ],
2072
+ "idempotency": "optional",
2073
+ "fidelity": "behavioral"
2074
+ },
2075
+ {
2076
+ "id": "search.parameterized",
2077
+ "description": "Parameterized SOSL-style search (POST …/parameterizedSearch): whitespace-separated terms matched as case-insensitive prefixes (with * and ? wildcards) over name/e-mail/phone fields per `in` scope, with per-sObject fields, where, orderBy and limit. Results respect sharing.",
2078
+ "inputSchema": {
2079
+ "type": "object",
2080
+ "properties": {
2081
+ "q": {
2082
+ "type": "string",
2083
+ "minLength": 1,
2084
+ "maxLength": 1000
2085
+ },
2086
+ "version": {
2087
+ "type": "string",
2088
+ "minLength": 1,
2089
+ "maxLength": 16,
2090
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
2091
+ },
2092
+ "sobjects": {
2093
+ "type": "array",
2094
+ "items": {
2095
+ "type": "object",
2096
+ "description": "{ name, fields?, where?, orderBy?, limit? } per sObject; validated by the handler (JSON_PARSER_ERROR)."
2097
+ }
2098
+ },
2099
+ "in": {
2100
+ "type": "string",
2101
+ "maxLength": 16
2102
+ },
2103
+ "fields": {
2104
+ "type": "array",
2105
+ "items": {
2106
+ "type": "string",
2107
+ "minLength": 1,
2108
+ "maxLength": 255
2109
+ }
2110
+ },
2111
+ "overallLimit": {
2112
+ "type": "integer",
2113
+ "minimum": 1,
2114
+ "maximum": 2000
2115
+ },
2116
+ "defaultLimit": {
2117
+ "type": "integer",
2118
+ "minimum": 0,
2119
+ "maximum": 2000
2120
+ }
2121
+ },
2122
+ "required": [
2123
+ "q"
2124
+ ],
2125
+ "additionalProperties": false
2126
+ },
2127
+ "outputSchema": {
2128
+ "type": "object",
2129
+ "properties": {
2130
+ "searchRecords": {
2131
+ "type": "array",
2132
+ "items": {
2133
+ "type": "object",
2134
+ "properties": {
2135
+ "attributes": {
2136
+ "type": "object",
2137
+ "properties": {
2138
+ "type": {
2139
+ "type": "string"
2140
+ },
2141
+ "url": {
2142
+ "type": "string"
2143
+ }
2144
+ },
2145
+ "required": [
2146
+ "type",
2147
+ "url"
2148
+ ],
2149
+ "additionalProperties": false
2150
+ },
2151
+ "Id": {
2152
+ "type": "string"
2153
+ }
2154
+ },
2155
+ "required": [
2156
+ "attributes"
2157
+ ]
2158
+ }
2159
+ },
2160
+ "_limitInfo": {
2161
+ "type": "string",
2162
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
2163
+ }
2164
+ },
2165
+ "required": [
2166
+ "searchRecords",
2167
+ "_limitInfo"
2168
+ ]
2169
+ },
2170
+ "declaredErrors": [
2171
+ "INVALID_FIELD",
2172
+ "INVALID_SESSION_ID",
2173
+ "INVALID_TYPE",
2174
+ "JSON_PARSER_ERROR",
2175
+ "LIMIT_EXCEEDED",
2176
+ "MALFORMED_QUERY",
2177
+ "NOT_FOUND",
2178
+ "REQUEST_LIMIT_EXCEEDED"
2179
+ ],
2180
+ "idempotency": "none",
2181
+ "fidelity": "stateful"
2182
+ },
2183
+ {
2184
+ "id": "sobjects.basic-info",
2185
+ "description": "Basic sObject metadata (GET /services/data/{version}/sobjects/{sobjectType}): objectDescribe without fields plus the five most recently modified visible records as recentItems.",
2186
+ "inputSchema": {
2187
+ "type": "object",
2188
+ "properties": {
2189
+ "sobjectType": {
2190
+ "type": "string",
2191
+ "minLength": 1,
2192
+ "maxLength": 64
2193
+ },
2194
+ "version": {
2195
+ "type": "string",
2196
+ "minLength": 1,
2197
+ "maxLength": 16,
2198
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
2199
+ }
2200
+ },
2201
+ "required": [
2202
+ "sobjectType"
2203
+ ],
2204
+ "additionalProperties": false
2205
+ },
2206
+ "outputSchema": {
2207
+ "type": "object",
2208
+ "properties": {
2209
+ "objectDescribe": {
2210
+ "type": "object"
2211
+ },
2212
+ "recentItems": {
2213
+ "type": "array",
2214
+ "items": {
2215
+ "type": "object",
2216
+ "properties": {
2217
+ "attributes": {
2218
+ "type": "object",
2219
+ "properties": {
2220
+ "type": {
2221
+ "type": "string"
2222
+ },
2223
+ "url": {
2224
+ "type": "string"
2225
+ }
2226
+ },
2227
+ "required": [
2228
+ "type",
2229
+ "url"
2230
+ ],
2231
+ "additionalProperties": false
2232
+ },
2233
+ "Id": {
2234
+ "type": "string"
2235
+ }
2236
+ },
2237
+ "required": [
2238
+ "attributes"
2239
+ ]
2240
+ }
2241
+ },
2242
+ "_limitInfo": {
2243
+ "type": "string",
2244
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
2245
+ }
2246
+ },
2247
+ "required": [
2248
+ "objectDescribe",
2249
+ "recentItems",
2250
+ "_limitInfo"
2251
+ ]
2252
+ },
2253
+ "declaredErrors": [
2254
+ "INVALID_SESSION_ID",
2255
+ "LIMIT_EXCEEDED",
2256
+ "NOT_FOUND",
2257
+ "REQUEST_LIMIT_EXCEEDED"
2258
+ ],
2259
+ "idempotency": "none",
2260
+ "fidelity": "stateful"
2261
+ },
2262
+ {
2263
+ "id": "sobjects.describe",
2264
+ "description": "Full describe of one sObject (fields with picklist values and references, child relationships, record type infos). No direct HTTP route (the framework's route-overlap rule); reachable canonically, over MCP and as a composite subrequest GET …/sobjects/{sobjectType}/describe.",
2265
+ "inputSchema": {
2266
+ "type": "object",
2267
+ "properties": {
2268
+ "sobjectType": {
2269
+ "type": "string",
2270
+ "minLength": 1,
2271
+ "maxLength": 64
2272
+ },
2273
+ "version": {
2274
+ "type": "string",
2275
+ "minLength": 1,
2276
+ "maxLength": 16,
2277
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
2278
+ }
2279
+ },
2280
+ "required": [
2281
+ "sobjectType"
2282
+ ],
2283
+ "additionalProperties": false
2284
+ },
2285
+ "outputSchema": {
2286
+ "type": "object",
2287
+ "properties": {
2288
+ "name": {
2289
+ "type": "string"
2290
+ },
2291
+ "label": {
2292
+ "type": "string"
2293
+ },
2294
+ "keyPrefix": {
2295
+ "type": "string"
2296
+ },
2297
+ "fields": {
2298
+ "type": "array",
2299
+ "items": {
2300
+ "type": "object"
2301
+ }
2302
+ },
2303
+ "childRelationships": {
2304
+ "type": "array",
2305
+ "items": {
2306
+ "type": "object"
2307
+ }
2308
+ },
2309
+ "recordTypeInfos": {
2310
+ "type": "array",
2311
+ "items": {
2312
+ "type": "object"
2313
+ }
2314
+ },
2315
+ "_limitInfo": {
2316
+ "type": "string",
2317
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
2318
+ }
2319
+ },
2320
+ "required": [
2321
+ "name",
2322
+ "label",
2323
+ "keyPrefix",
2324
+ "fields",
2325
+ "childRelationships",
2326
+ "_limitInfo"
2327
+ ]
2328
+ },
2329
+ "declaredErrors": [
2330
+ "INVALID_SESSION_ID",
2331
+ "LIMIT_EXCEEDED",
2332
+ "NOT_FOUND",
2333
+ "REQUEST_LIMIT_EXCEEDED"
2334
+ ],
2335
+ "idempotency": "none",
2336
+ "fidelity": "stateful"
2337
+ },
2338
+ {
2339
+ "id": "sobjects.list",
2340
+ "description": "Global describe (GET /services/data/{version}/sobjects): one summary per sObject the caller's profile can read, alphabetical; createable/updateable/deletable reflect the profile.",
2341
+ "inputSchema": {
2342
+ "type": "object",
2343
+ "properties": {
2344
+ "version": {
2345
+ "type": "string",
2346
+ "minLength": 1,
2347
+ "maxLength": 16,
2348
+ "description": "API version tag such as v62.0 (default). Unsupported versions fail NOT_FOUND."
2349
+ }
2350
+ },
2351
+ "required": [],
2352
+ "additionalProperties": false
2353
+ },
2354
+ "outputSchema": {
2355
+ "type": "object",
2356
+ "properties": {
2357
+ "encoding": {
2358
+ "type": "string"
2359
+ },
2360
+ "maxBatchSize": {
2361
+ "type": "integer"
2362
+ },
2363
+ "sobjects": {
2364
+ "type": "array",
2365
+ "items": {
2366
+ "type": "object"
2367
+ }
2368
+ },
2369
+ "_limitInfo": {
2370
+ "type": "string",
2371
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
2372
+ }
2373
+ },
2374
+ "required": [
2375
+ "encoding",
2376
+ "maxBatchSize",
2377
+ "sobjects",
2378
+ "_limitInfo"
2379
+ ]
2380
+ },
2381
+ "declaredErrors": [
2382
+ "INVALID_SESSION_ID",
2383
+ "LIMIT_EXCEEDED",
2384
+ "NOT_FOUND",
2385
+ "REQUEST_LIMIT_EXCEEDED"
2386
+ ],
2387
+ "idempotency": "none",
2388
+ "fidelity": "stateful"
2389
+ },
2390
+ {
2391
+ "id": "userinfo.get",
2392
+ "description": "OpenID Connect userinfo for the calling user (GET /services/oauth2/userinfo). Also exposed as the @salesforce/mcp tool name get_username; its directory/defaultTargetOrg/defaultDevHub arguments are accepted (a Dev Hub request fails NOT_FOUND).",
2393
+ "inputSchema": {
2394
+ "type": "object",
2395
+ "properties": {
2396
+ "directory": {
2397
+ "type": "string",
2398
+ "maxLength": 1024
2399
+ },
2400
+ "defaultTargetOrg": {
2401
+ "type": "boolean"
2402
+ },
2403
+ "defaultDevHub": {
2404
+ "type": "boolean"
2405
+ }
2406
+ },
2407
+ "required": [],
2408
+ "additionalProperties": false
2409
+ },
2410
+ "outputSchema": {
2411
+ "type": "object",
2412
+ "properties": {
2413
+ "sub": {
2414
+ "type": "string"
2415
+ },
2416
+ "user_id": {
2417
+ "type": "string"
2418
+ },
2419
+ "organization_id": {
2420
+ "type": "string"
2421
+ },
2422
+ "preferred_username": {
2423
+ "type": "string"
2424
+ },
2425
+ "nickname": {
2426
+ "type": "string"
2427
+ },
2428
+ "name": {
2429
+ "type": "string"
2430
+ },
2431
+ "email": {
2432
+ "type": "string"
2433
+ },
2434
+ "email_verified": {
2435
+ "type": "boolean"
2436
+ },
2437
+ "given_name": {
2438
+ "type": "string"
2439
+ },
2440
+ "family_name": {
2441
+ "type": "string"
2442
+ },
2443
+ "zoneinfo": {
2444
+ "type": "string"
2445
+ },
2446
+ "photos": {
2447
+ "type": "object"
2448
+ },
2449
+ "profile": {
2450
+ "type": "string"
2451
+ },
2452
+ "picture": {
2453
+ "type": "string"
2454
+ },
2455
+ "address": {
2456
+ "type": "object"
2457
+ },
2458
+ "urls": {
2459
+ "type": "object"
2460
+ },
2461
+ "active": {
2462
+ "type": "boolean"
2463
+ },
2464
+ "user_type": {
2465
+ "type": "string"
2466
+ },
2467
+ "language": {
2468
+ "type": "string"
2469
+ },
2470
+ "locale": {
2471
+ "type": "string"
2472
+ },
2473
+ "utcOffset": {
2474
+ "type": "integer"
2475
+ },
2476
+ "updated_at": {
2477
+ "type": "string"
2478
+ },
2479
+ "is_app_installed": {
2480
+ "type": "boolean"
2481
+ },
2482
+ "_limitInfo": {
2483
+ "type": "string",
2484
+ "description": "Sforce-Limit-Info value (api-usage=U/M); the REST codec lifts it into the header."
2485
+ }
2486
+ },
2487
+ "required": [
2488
+ "sub",
2489
+ "user_id",
2490
+ "organization_id",
2491
+ "preferred_username",
2492
+ "name",
2493
+ "email",
2494
+ "urls",
2495
+ "active",
2496
+ "_limitInfo"
2497
+ ]
2498
+ },
2499
+ "declaredErrors": [
2500
+ "INVALID_SESSION_ID",
2501
+ "LIMIT_EXCEEDED",
2502
+ "NOT_FOUND",
2503
+ "REQUEST_LIMIT_EXCEEDED"
2504
+ ],
2505
+ "idempotency": "none",
2506
+ "fidelity": "stateful",
2507
+ "mcp": {
2508
+ "name": "get_username",
2509
+ "description": "Return the username (preferred_username), user id and organization id of the org the Tool is connected to. Arguments of the Salesforce DX MCP server are accepted; no Dev Hub exists."
2510
+ }
2511
+ },
2512
+ {
2513
+ "id": "versions.list",
2514
+ "description": "Supported REST API versions (GET /services/data): one entry per version from 46.0 to 66.0 with its release label.",
2515
+ "inputSchema": {
2516
+ "type": "object",
2517
+ "properties": {},
2518
+ "required": [],
2519
+ "additionalProperties": false
2520
+ },
2521
+ "outputSchema": {
2522
+ "type": "array",
2523
+ "items": {
2524
+ "type": "object",
2525
+ "properties": {
2526
+ "label": {
2527
+ "type": "string"
2528
+ },
2529
+ "url": {
2530
+ "type": "string"
2531
+ },
2532
+ "version": {
2533
+ "type": "string"
2534
+ }
2535
+ },
2536
+ "required": [
2537
+ "label",
2538
+ "url",
2539
+ "version"
2540
+ ],
2541
+ "additionalProperties": false
2542
+ }
2543
+ },
2544
+ "declaredErrors": [
2545
+ "INVALID_SESSION_ID",
2546
+ "LIMIT_EXCEEDED",
2547
+ "REQUEST_LIMIT_EXCEEDED"
2548
+ ],
2549
+ "idempotency": "none",
2550
+ "fidelity": "contract"
2551
+ }
2552
+ ],
2553
+ "events": [
2554
+ {
2555
+ "id": "record.created",
2556
+ "payloadSchema": {
2557
+ "type": "object",
2558
+ "properties": {
2559
+ "sobjectType": {
2560
+ "type": "string"
2561
+ },
2562
+ "id": {
2563
+ "type": "string"
2564
+ },
2565
+ "ownerId": {
2566
+ "type": "string"
2567
+ },
2568
+ "createdById": {
2569
+ "type": "string"
2570
+ }
2571
+ },
2572
+ "required": [
2573
+ "sobjectType",
2574
+ "id",
2575
+ "ownerId",
2576
+ "createdById"
2577
+ ],
2578
+ "additionalProperties": false
2579
+ }
2580
+ },
2581
+ {
2582
+ "id": "record.deleted",
2583
+ "payloadSchema": {
2584
+ "type": "object",
2585
+ "properties": {
2586
+ "sobjectType": {
2587
+ "type": "string"
2588
+ },
2589
+ "id": {
2590
+ "type": "string"
2591
+ },
2592
+ "cascadedFrom": {
2593
+ "anyOf": [
2594
+ {
2595
+ "type": "string"
2596
+ },
2597
+ {
2598
+ "type": "null"
2599
+ }
2600
+ ]
2601
+ }
2602
+ },
2603
+ "required": [
2604
+ "sobjectType",
2605
+ "id",
2606
+ "cascadedFrom"
2607
+ ],
2608
+ "additionalProperties": false
2609
+ }
2610
+ },
2611
+ {
2612
+ "id": "record.updated",
2613
+ "payloadSchema": {
2614
+ "type": "object",
2615
+ "properties": {
2616
+ "sobjectType": {
2617
+ "type": "string"
2618
+ },
2619
+ "id": {
2620
+ "type": "string"
2621
+ },
2622
+ "changedFields": {
2623
+ "type": "array",
2624
+ "items": {
2625
+ "type": "string",
2626
+ "minLength": 1,
2627
+ "maxLength": 255
2628
+ }
2629
+ }
2630
+ },
2631
+ "required": [
2632
+ "sobjectType",
2633
+ "id",
2634
+ "changedFields"
2635
+ ],
2636
+ "additionalProperties": false
2637
+ }
2638
+ }
2639
+ ],
2640
+ "faults": [
2641
+ {
2642
+ "id": "api-limit-exceeded",
2643
+ "appliesTo": [
2644
+ "collections.create",
2645
+ "collections.delete",
2646
+ "collections.retrieve",
2647
+ "collections.update",
2648
+ "collections.upsert",
2649
+ "composite.execute",
2650
+ "limits.get",
2651
+ "query.execute",
2652
+ "query.more",
2653
+ "records.create",
2654
+ "records.delete",
2655
+ "records.retrieve",
2656
+ "records.update",
2657
+ "records.upsert",
2658
+ "search.parameterized",
2659
+ "sobjects.basic-info",
2660
+ "sobjects.describe",
2661
+ "sobjects.list",
2662
+ "userinfo.get",
2663
+ "versions.list"
2664
+ ],
2665
+ "timing": "before",
2666
+ "error": {
2667
+ "code": "REQUEST_LIMIT_EXCEEDED",
2668
+ "message": "TotalRequests Limit exceeded.",
2669
+ "retryable": true
2670
+ }
2671
+ },
2672
+ {
2673
+ "id": "row-locked",
2674
+ "appliesTo": [
2675
+ "collections.create",
2676
+ "collections.delete",
2677
+ "collections.update",
2678
+ "collections.upsert",
2679
+ "composite.execute",
2680
+ "records.create",
2681
+ "records.delete",
2682
+ "records.update",
2683
+ "records.upsert"
2684
+ ],
2685
+ "timing": "before",
2686
+ "error": {
2687
+ "code": "UNABLE_TO_LOCK_ROW",
2688
+ "message": "unable to obtain exclusive access to this record or 1 records",
2689
+ "retryable": true
2690
+ }
2691
+ },
2692
+ {
2693
+ "id": "write-committed-lost",
2694
+ "appliesTo": [
2695
+ "collections.create",
2696
+ "collections.upsert",
2697
+ "records.create",
2698
+ "records.upsert"
2699
+ ],
2700
+ "timing": "after_commit",
2701
+ "error": {
2702
+ "code": "SERVER_UNAVAILABLE",
2703
+ "message": "Server is currently unavailable",
2704
+ "retryable": true
2705
+ }
2706
+ }
2707
+ ],
2708
+ "subscriptions": [],
2709
+ "http": [
2710
+ {
2711
+ "id": "collections-create",
2712
+ "operationId": "collections.create",
2713
+ "method": "POST",
2714
+ "path": "/services/data/{version}/composite/sobjects",
2715
+ "auth": {
2716
+ "kind": "bearer",
2717
+ "schemes": [
2718
+ "Bearer",
2719
+ "OAuth"
2720
+ ]
2721
+ },
2722
+ "requestBody": "json",
2723
+ "response": {
2724
+ "successStatus": 200,
2725
+ "errors": [
2726
+ {
2727
+ "code": "INVALID_SESSION_ID",
2728
+ "status": 401
2729
+ },
2730
+ {
2731
+ "code": "JSON_PARSER_ERROR",
2732
+ "status": 400
2733
+ },
2734
+ {
2735
+ "code": "LIMIT_EXCEEDED",
2736
+ "status": 400
2737
+ },
2738
+ {
2739
+ "code": "NOT_FOUND",
2740
+ "status": 404
2741
+ },
2742
+ {
2743
+ "code": "REQUEST_LIMIT_EXCEEDED",
2744
+ "status": 403
2745
+ },
2746
+ {
2747
+ "code": "SERVER_UNAVAILABLE",
2748
+ "status": 503
2749
+ },
2750
+ {
2751
+ "code": "UNABLE_TO_LOCK_ROW",
2752
+ "status": 400
2753
+ }
2754
+ ]
2755
+ }
2756
+ },
2757
+ {
2758
+ "id": "collections-delete",
2759
+ "operationId": "collections.delete",
2760
+ "method": "DELETE",
2761
+ "path": "/services/data/{version}/composite/sobjects",
2762
+ "auth": {
2763
+ "kind": "bearer",
2764
+ "schemes": [
2765
+ "Bearer",
2766
+ "OAuth"
2767
+ ]
2768
+ },
2769
+ "requestBody": "none",
2770
+ "response": {
2771
+ "successStatus": 200,
2772
+ "errors": [
2773
+ {
2774
+ "code": "INVALID_SESSION_ID",
2775
+ "status": 401
2776
+ },
2777
+ {
2778
+ "code": "JSON_PARSER_ERROR",
2779
+ "status": 400
2780
+ },
2781
+ {
2782
+ "code": "LIMIT_EXCEEDED",
2783
+ "status": 400
2784
+ },
2785
+ {
2786
+ "code": "NOT_FOUND",
2787
+ "status": 404
2788
+ },
2789
+ {
2790
+ "code": "REQUEST_LIMIT_EXCEEDED",
2791
+ "status": 403
2792
+ },
2793
+ {
2794
+ "code": "UNABLE_TO_LOCK_ROW",
2795
+ "status": 400
2796
+ }
2797
+ ]
2798
+ }
2799
+ },
2800
+ {
2801
+ "id": "collections-retrieve",
2802
+ "operationId": "collections.retrieve",
2803
+ "method": "POST",
2804
+ "path": "/services/data/{version}/composite/sobjects/{sobjectType}",
2805
+ "auth": {
2806
+ "kind": "bearer",
2807
+ "schemes": [
2808
+ "Bearer",
2809
+ "OAuth"
2810
+ ]
2811
+ },
2812
+ "requestBody": "json",
2813
+ "response": {
2814
+ "successStatus": 200,
2815
+ "errors": [
2816
+ {
2817
+ "code": "INVALID_FIELD",
2818
+ "status": 400
2819
+ },
2820
+ {
2821
+ "code": "INVALID_SESSION_ID",
2822
+ "status": 401
2823
+ },
2824
+ {
2825
+ "code": "INVALID_TYPE",
2826
+ "status": 400
2827
+ },
2828
+ {
2829
+ "code": "JSON_PARSER_ERROR",
2830
+ "status": 400
2831
+ },
2832
+ {
2833
+ "code": "LIMIT_EXCEEDED",
2834
+ "status": 400
2835
+ },
2836
+ {
2837
+ "code": "MALFORMED_ID",
2838
+ "status": 400
2839
+ },
2840
+ {
2841
+ "code": "NOT_FOUND",
2842
+ "status": 404
2843
+ },
2844
+ {
2845
+ "code": "REQUEST_LIMIT_EXCEEDED",
2846
+ "status": 403
2847
+ }
2848
+ ]
2849
+ }
2850
+ },
2851
+ {
2852
+ "id": "collections-retrieve-get",
2853
+ "operationId": "collections.retrieve",
2854
+ "method": "GET",
2855
+ "path": "/services/data/{version}/composite/sobjects/{sobjectType}",
2856
+ "auth": {
2857
+ "kind": "bearer",
2858
+ "schemes": [
2859
+ "Bearer",
2860
+ "OAuth"
2861
+ ]
2862
+ },
2863
+ "requestBody": "none",
2864
+ "response": {
2865
+ "successStatus": 200,
2866
+ "errors": [
2867
+ {
2868
+ "code": "INVALID_FIELD",
2869
+ "status": 400
2870
+ },
2871
+ {
2872
+ "code": "INVALID_SESSION_ID",
2873
+ "status": 401
2874
+ },
2875
+ {
2876
+ "code": "INVALID_TYPE",
2877
+ "status": 400
2878
+ },
2879
+ {
2880
+ "code": "JSON_PARSER_ERROR",
2881
+ "status": 400
2882
+ },
2883
+ {
2884
+ "code": "LIMIT_EXCEEDED",
2885
+ "status": 400
2886
+ },
2887
+ {
2888
+ "code": "MALFORMED_ID",
2889
+ "status": 400
2890
+ },
2891
+ {
2892
+ "code": "NOT_FOUND",
2893
+ "status": 404
2894
+ },
2895
+ {
2896
+ "code": "REQUEST_LIMIT_EXCEEDED",
2897
+ "status": 403
2898
+ }
2899
+ ]
2900
+ }
2901
+ },
2902
+ {
2903
+ "id": "collections-update",
2904
+ "operationId": "collections.update",
2905
+ "method": "PATCH",
2906
+ "path": "/services/data/{version}/composite/sobjects",
2907
+ "auth": {
2908
+ "kind": "bearer",
2909
+ "schemes": [
2910
+ "Bearer",
2911
+ "OAuth"
2912
+ ]
2913
+ },
2914
+ "requestBody": "json",
2915
+ "response": {
2916
+ "successStatus": 200,
2917
+ "errors": [
2918
+ {
2919
+ "code": "INVALID_SESSION_ID",
2920
+ "status": 401
2921
+ },
2922
+ {
2923
+ "code": "JSON_PARSER_ERROR",
2924
+ "status": 400
2925
+ },
2926
+ {
2927
+ "code": "LIMIT_EXCEEDED",
2928
+ "status": 400
2929
+ },
2930
+ {
2931
+ "code": "NOT_FOUND",
2932
+ "status": 404
2933
+ },
2934
+ {
2935
+ "code": "REQUEST_LIMIT_EXCEEDED",
2936
+ "status": 403
2937
+ },
2938
+ {
2939
+ "code": "UNABLE_TO_LOCK_ROW",
2940
+ "status": 400
2941
+ }
2942
+ ]
2943
+ }
2944
+ },
2945
+ {
2946
+ "id": "collections-upsert",
2947
+ "operationId": "collections.upsert",
2948
+ "method": "PATCH",
2949
+ "path": "/services/data/{version}/composite/sobjects/{sobjectType}/{externalIdField}",
2950
+ "auth": {
2951
+ "kind": "bearer",
2952
+ "schemes": [
2953
+ "Bearer",
2954
+ "OAuth"
2955
+ ]
2956
+ },
2957
+ "requestBody": "json",
2958
+ "response": {
2959
+ "successStatus": 200,
2960
+ "errors": [
2961
+ {
2962
+ "code": "INVALID_FIELD",
2963
+ "status": 400
2964
+ },
2965
+ {
2966
+ "code": "INVALID_SESSION_ID",
2967
+ "status": 401
2968
+ },
2969
+ {
2970
+ "code": "INVALID_TYPE",
2971
+ "status": 400
2972
+ },
2973
+ {
2974
+ "code": "INVALID_TYPE_FOR_OPERATION",
2975
+ "status": 400
2976
+ },
2977
+ {
2978
+ "code": "JSON_PARSER_ERROR",
2979
+ "status": 400
2980
+ },
2981
+ {
2982
+ "code": "LIMIT_EXCEEDED",
2983
+ "status": 400
2984
+ },
2985
+ {
2986
+ "code": "NOT_FOUND",
2987
+ "status": 404
2988
+ },
2989
+ {
2990
+ "code": "REQUEST_LIMIT_EXCEEDED",
2991
+ "status": 403
2992
+ },
2993
+ {
2994
+ "code": "SERVER_UNAVAILABLE",
2995
+ "status": 503
2996
+ },
2997
+ {
2998
+ "code": "UNABLE_TO_LOCK_ROW",
2999
+ "status": 400
3000
+ }
3001
+ ]
3002
+ }
3003
+ },
3004
+ {
3005
+ "id": "composite",
3006
+ "operationId": "composite.execute",
3007
+ "method": "POST",
3008
+ "path": "/services/data/{version}/composite",
3009
+ "auth": {
3010
+ "kind": "bearer",
3011
+ "schemes": [
3012
+ "Bearer",
3013
+ "OAuth"
3014
+ ]
3015
+ },
3016
+ "requestBody": "json",
3017
+ "response": {
3018
+ "successStatus": 200,
3019
+ "errors": [
3020
+ {
3021
+ "code": "INVALID_SESSION_ID",
3022
+ "status": 401
3023
+ },
3024
+ {
3025
+ "code": "JSON_PARSER_ERROR",
3026
+ "status": 400
3027
+ },
3028
+ {
3029
+ "code": "LIMIT_EXCEEDED",
3030
+ "status": 400
3031
+ },
3032
+ {
3033
+ "code": "NOT_FOUND",
3034
+ "status": 404
3035
+ },
3036
+ {
3037
+ "code": "REQUEST_LIMIT_EXCEEDED",
3038
+ "status": 403
3039
+ },
3040
+ {
3041
+ "code": "UNABLE_TO_LOCK_ROW",
3042
+ "status": 400
3043
+ }
3044
+ ]
3045
+ }
3046
+ },
3047
+ {
3048
+ "id": "create-record",
3049
+ "operationId": "records.create",
3050
+ "method": "POST",
3051
+ "path": "/services/data/{version}/sobjects/{sobjectType}",
3052
+ "auth": {
3053
+ "kind": "bearer",
3054
+ "schemes": [
3055
+ "Bearer",
3056
+ "OAuth"
3057
+ ]
3058
+ },
3059
+ "requestBody": "json",
3060
+ "response": {
3061
+ "successStatus": 201,
3062
+ "errors": [
3063
+ {
3064
+ "code": "DUPLICATE_VALUE",
3065
+ "status": 400
3066
+ },
3067
+ {
3068
+ "code": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
3069
+ "status": 400
3070
+ },
3071
+ {
3072
+ "code": "FIELD_INTEGRITY_EXCEPTION",
3073
+ "status": 400
3074
+ },
3075
+ {
3076
+ "code": "INSUFFICIENT_ACCESS_OR_READONLY",
3077
+ "status": 403
3078
+ },
3079
+ {
3080
+ "code": "INVALID_CROSS_REFERENCE_KEY",
3081
+ "status": 400
3082
+ },
3083
+ {
3084
+ "code": "INVALID_FIELD",
3085
+ "status": 400
3086
+ },
3087
+ {
3088
+ "code": "INVALID_FIELD_FOR_INSERT_UPDATE",
3089
+ "status": 400
3090
+ },
3091
+ {
3092
+ "code": "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST",
3093
+ "status": 400
3094
+ },
3095
+ {
3096
+ "code": "INVALID_SESSION_ID",
3097
+ "status": 401
3098
+ },
3099
+ {
3100
+ "code": "INVALID_TYPE",
3101
+ "status": 404
3102
+ },
3103
+ {
3104
+ "code": "INVALID_TYPE_FOR_OPERATION",
3105
+ "status": 400
3106
+ },
3107
+ {
3108
+ "code": "JSON_PARSER_ERROR",
3109
+ "status": 400
3110
+ },
3111
+ {
3112
+ "code": "LIMIT_EXCEEDED",
3113
+ "status": 400
3114
+ },
3115
+ {
3116
+ "code": "MALFORMED_ID",
3117
+ "status": 400
3118
+ },
3119
+ {
3120
+ "code": "NOT_FOUND",
3121
+ "status": 404
3122
+ },
3123
+ {
3124
+ "code": "REQUEST_LIMIT_EXCEEDED",
3125
+ "status": 403
3126
+ },
3127
+ {
3128
+ "code": "REQUIRED_FIELD_MISSING",
3129
+ "status": 400
3130
+ },
3131
+ {
3132
+ "code": "SERVER_UNAVAILABLE",
3133
+ "status": 503
3134
+ },
3135
+ {
3136
+ "code": "UNABLE_TO_LOCK_ROW",
3137
+ "status": 400
3138
+ }
3139
+ ]
3140
+ }
3141
+ },
3142
+ {
3143
+ "id": "delete-record",
3144
+ "operationId": "records.delete",
3145
+ "method": "DELETE",
3146
+ "path": "/services/data/{version}/sobjects/{sobjectType}/{id}",
3147
+ "auth": {
3148
+ "kind": "bearer",
3149
+ "schemes": [
3150
+ "Bearer",
3151
+ "OAuth"
3152
+ ]
3153
+ },
3154
+ "requestBody": "none",
3155
+ "response": {
3156
+ "successStatus": 204,
3157
+ "errors": [
3158
+ {
3159
+ "code": "ENTITY_IS_DELETED",
3160
+ "status": 404
3161
+ },
3162
+ {
3163
+ "code": "INSUFFICIENT_ACCESS_OR_READONLY",
3164
+ "status": 403
3165
+ },
3166
+ {
3167
+ "code": "INVALID_SESSION_ID",
3168
+ "status": 401
3169
+ },
3170
+ {
3171
+ "code": "INVALID_TYPE",
3172
+ "status": 404
3173
+ },
3174
+ {
3175
+ "code": "INVALID_TYPE_FOR_OPERATION",
3176
+ "status": 400
3177
+ },
3178
+ {
3179
+ "code": "LIMIT_EXCEEDED",
3180
+ "status": 400
3181
+ },
3182
+ {
3183
+ "code": "MALFORMED_ID",
3184
+ "status": 400
3185
+ },
3186
+ {
3187
+ "code": "NOT_FOUND",
3188
+ "status": 404
3189
+ },
3190
+ {
3191
+ "code": "REQUEST_LIMIT_EXCEEDED",
3192
+ "status": 403
3193
+ },
3194
+ {
3195
+ "code": "UNABLE_TO_LOCK_ROW",
3196
+ "status": 400
3197
+ }
3198
+ ]
3199
+ }
3200
+ },
3201
+ {
3202
+ "id": "get-limits",
3203
+ "operationId": "limits.get",
3204
+ "method": "GET",
3205
+ "path": "/services/data/{version}/limits",
3206
+ "auth": {
3207
+ "kind": "bearer",
3208
+ "schemes": [
3209
+ "Bearer",
3210
+ "OAuth"
3211
+ ]
3212
+ },
3213
+ "requestBody": "none",
3214
+ "response": {
3215
+ "successStatus": 200,
3216
+ "errors": [
3217
+ {
3218
+ "code": "INVALID_SESSION_ID",
3219
+ "status": 401
3220
+ },
3221
+ {
3222
+ "code": "LIMIT_EXCEEDED",
3223
+ "status": 400
3224
+ },
3225
+ {
3226
+ "code": "NOT_FOUND",
3227
+ "status": 404
3228
+ },
3229
+ {
3230
+ "code": "REQUEST_LIMIT_EXCEEDED",
3231
+ "status": 403
3232
+ }
3233
+ ]
3234
+ }
3235
+ },
3236
+ {
3237
+ "id": "get-sobject-basic-info",
3238
+ "operationId": "sobjects.basic-info",
3239
+ "method": "GET",
3240
+ "path": "/services/data/{version}/sobjects/{sobjectType}",
3241
+ "auth": {
3242
+ "kind": "bearer",
3243
+ "schemes": [
3244
+ "Bearer",
3245
+ "OAuth"
3246
+ ]
3247
+ },
3248
+ "requestBody": "none",
3249
+ "response": {
3250
+ "successStatus": 200,
3251
+ "errors": [
3252
+ {
3253
+ "code": "INVALID_SESSION_ID",
3254
+ "status": 401
3255
+ },
3256
+ {
3257
+ "code": "LIMIT_EXCEEDED",
3258
+ "status": 400
3259
+ },
3260
+ {
3261
+ "code": "NOT_FOUND",
3262
+ "status": 404
3263
+ },
3264
+ {
3265
+ "code": "REQUEST_LIMIT_EXCEEDED",
3266
+ "status": 403
3267
+ }
3268
+ ]
3269
+ }
3270
+ },
3271
+ {
3272
+ "id": "get-userinfo",
3273
+ "operationId": "userinfo.get",
3274
+ "method": "GET",
3275
+ "path": "/services/oauth2/userinfo",
3276
+ "auth": {
3277
+ "kind": "bearer",
3278
+ "schemes": [
3279
+ "Bearer",
3280
+ "OAuth"
3281
+ ]
3282
+ },
3283
+ "requestBody": "none",
3284
+ "response": {
3285
+ "successStatus": 200,
3286
+ "errors": [
3287
+ {
3288
+ "code": "INVALID_SESSION_ID",
3289
+ "status": 401
3290
+ },
3291
+ {
3292
+ "code": "LIMIT_EXCEEDED",
3293
+ "status": 400
3294
+ },
3295
+ {
3296
+ "code": "NOT_FOUND",
3297
+ "status": 404
3298
+ },
3299
+ {
3300
+ "code": "REQUEST_LIMIT_EXCEEDED",
3301
+ "status": 403
3302
+ }
3303
+ ]
3304
+ }
3305
+ },
3306
+ {
3307
+ "id": "list-sobjects",
3308
+ "operationId": "sobjects.list",
3309
+ "method": "GET",
3310
+ "path": "/services/data/{version}/sobjects",
3311
+ "auth": {
3312
+ "kind": "bearer",
3313
+ "schemes": [
3314
+ "Bearer",
3315
+ "OAuth"
3316
+ ]
3317
+ },
3318
+ "requestBody": "none",
3319
+ "response": {
3320
+ "successStatus": 200,
3321
+ "errors": [
3322
+ {
3323
+ "code": "INVALID_SESSION_ID",
3324
+ "status": 401
3325
+ },
3326
+ {
3327
+ "code": "LIMIT_EXCEEDED",
3328
+ "status": 400
3329
+ },
3330
+ {
3331
+ "code": "NOT_FOUND",
3332
+ "status": 404
3333
+ },
3334
+ {
3335
+ "code": "REQUEST_LIMIT_EXCEEDED",
3336
+ "status": 403
3337
+ }
3338
+ ]
3339
+ }
3340
+ },
3341
+ {
3342
+ "id": "list-versions",
3343
+ "operationId": "versions.list",
3344
+ "method": "GET",
3345
+ "path": "/services/data",
3346
+ "auth": {
3347
+ "kind": "bearer",
3348
+ "schemes": [
3349
+ "Bearer",
3350
+ "OAuth"
3351
+ ]
3352
+ },
3353
+ "requestBody": "none",
3354
+ "response": {
3355
+ "successStatus": 200,
3356
+ "errors": [
3357
+ {
3358
+ "code": "INVALID_SESSION_ID",
3359
+ "status": 401
3360
+ },
3361
+ {
3362
+ "code": "LIMIT_EXCEEDED",
3363
+ "status": 400
3364
+ },
3365
+ {
3366
+ "code": "REQUEST_LIMIT_EXCEEDED",
3367
+ "status": 403
3368
+ }
3369
+ ]
3370
+ }
3371
+ },
3372
+ {
3373
+ "id": "parameterized-search",
3374
+ "operationId": "search.parameterized",
3375
+ "method": "POST",
3376
+ "path": "/services/data/{version}/parameterizedSearch",
3377
+ "auth": {
3378
+ "kind": "bearer",
3379
+ "schemes": [
3380
+ "Bearer",
3381
+ "OAuth"
3382
+ ]
3383
+ },
3384
+ "requestBody": "json",
3385
+ "response": {
3386
+ "successStatus": 200,
3387
+ "errors": [
3388
+ {
3389
+ "code": "INVALID_FIELD",
3390
+ "status": 400
3391
+ },
3392
+ {
3393
+ "code": "INVALID_SESSION_ID",
3394
+ "status": 401
3395
+ },
3396
+ {
3397
+ "code": "INVALID_TYPE",
3398
+ "status": 400
3399
+ },
3400
+ {
3401
+ "code": "JSON_PARSER_ERROR",
3402
+ "status": 400
3403
+ },
3404
+ {
3405
+ "code": "LIMIT_EXCEEDED",
3406
+ "status": 400
3407
+ },
3408
+ {
3409
+ "code": "MALFORMED_QUERY",
3410
+ "status": 400
3411
+ },
3412
+ {
3413
+ "code": "NOT_FOUND",
3414
+ "status": 404
3415
+ },
3416
+ {
3417
+ "code": "REQUEST_LIMIT_EXCEEDED",
3418
+ "status": 403
3419
+ }
3420
+ ]
3421
+ }
3422
+ },
3423
+ {
3424
+ "id": "query",
3425
+ "operationId": "query.execute",
3426
+ "method": "GET",
3427
+ "path": "/services/data/{version}/query",
3428
+ "auth": {
3429
+ "kind": "bearer",
3430
+ "schemes": [
3431
+ "Bearer",
3432
+ "OAuth"
3433
+ ]
3434
+ },
3435
+ "requestBody": "none",
3436
+ "response": {
3437
+ "successStatus": 200,
3438
+ "errors": [
3439
+ {
3440
+ "code": "INVALID_FIELD",
3441
+ "status": 400
3442
+ },
3443
+ {
3444
+ "code": "INVALID_SESSION_ID",
3445
+ "status": 401
3446
+ },
3447
+ {
3448
+ "code": "INVALID_TYPE",
3449
+ "status": 400
3450
+ },
3451
+ {
3452
+ "code": "LIMIT_EXCEEDED",
3453
+ "status": 400
3454
+ },
3455
+ {
3456
+ "code": "MALFORMED_QUERY",
3457
+ "status": 400
3458
+ },
3459
+ {
3460
+ "code": "NOT_FOUND",
3461
+ "status": 404
3462
+ },
3463
+ {
3464
+ "code": "REQUEST_LIMIT_EXCEEDED",
3465
+ "status": 403
3466
+ }
3467
+ ]
3468
+ }
3469
+ },
3470
+ {
3471
+ "id": "query-all",
3472
+ "operationId": "query.execute",
3473
+ "method": "GET",
3474
+ "path": "/services/data/{version}/queryAll",
3475
+ "auth": {
3476
+ "kind": "bearer",
3477
+ "schemes": [
3478
+ "Bearer",
3479
+ "OAuth"
3480
+ ]
3481
+ },
3482
+ "requestBody": "none",
3483
+ "response": {
3484
+ "successStatus": 200,
3485
+ "errors": [
3486
+ {
3487
+ "code": "INVALID_FIELD",
3488
+ "status": 400
3489
+ },
3490
+ {
3491
+ "code": "INVALID_SESSION_ID",
3492
+ "status": 401
3493
+ },
3494
+ {
3495
+ "code": "INVALID_TYPE",
3496
+ "status": 400
3497
+ },
3498
+ {
3499
+ "code": "LIMIT_EXCEEDED",
3500
+ "status": 400
3501
+ },
3502
+ {
3503
+ "code": "MALFORMED_QUERY",
3504
+ "status": 400
3505
+ },
3506
+ {
3507
+ "code": "NOT_FOUND",
3508
+ "status": 404
3509
+ },
3510
+ {
3511
+ "code": "REQUEST_LIMIT_EXCEEDED",
3512
+ "status": 403
3513
+ }
3514
+ ]
3515
+ }
3516
+ },
3517
+ {
3518
+ "id": "query-all-more",
3519
+ "operationId": "query.more",
3520
+ "method": "GET",
3521
+ "path": "/services/data/{version}/queryAll/{locator}",
3522
+ "auth": {
3523
+ "kind": "bearer",
3524
+ "schemes": [
3525
+ "Bearer",
3526
+ "OAuth"
3527
+ ]
3528
+ },
3529
+ "requestBody": "none",
3530
+ "response": {
3531
+ "successStatus": 200,
3532
+ "errors": [
3533
+ {
3534
+ "code": "INVALID_FIELD",
3535
+ "status": 400
3536
+ },
3537
+ {
3538
+ "code": "INVALID_QUERY_LOCATOR",
3539
+ "status": 400
3540
+ },
3541
+ {
3542
+ "code": "INVALID_SESSION_ID",
3543
+ "status": 401
3544
+ },
3545
+ {
3546
+ "code": "INVALID_TYPE",
3547
+ "status": 400
3548
+ },
3549
+ {
3550
+ "code": "LIMIT_EXCEEDED",
3551
+ "status": 400
3552
+ },
3553
+ {
3554
+ "code": "MALFORMED_QUERY",
3555
+ "status": 400
3556
+ },
3557
+ {
3558
+ "code": "NOT_FOUND",
3559
+ "status": 404
3560
+ },
3561
+ {
3562
+ "code": "REQUEST_LIMIT_EXCEEDED",
3563
+ "status": 403
3564
+ }
3565
+ ]
3566
+ }
3567
+ },
3568
+ {
3569
+ "id": "query-more",
3570
+ "operationId": "query.more",
3571
+ "method": "GET",
3572
+ "path": "/services/data/{version}/query/{locator}",
3573
+ "auth": {
3574
+ "kind": "bearer",
3575
+ "schemes": [
3576
+ "Bearer",
3577
+ "OAuth"
3578
+ ]
3579
+ },
3580
+ "requestBody": "none",
3581
+ "response": {
3582
+ "successStatus": 200,
3583
+ "errors": [
3584
+ {
3585
+ "code": "INVALID_FIELD",
3586
+ "status": 400
3587
+ },
3588
+ {
3589
+ "code": "INVALID_QUERY_LOCATOR",
3590
+ "status": 400
3591
+ },
3592
+ {
3593
+ "code": "INVALID_SESSION_ID",
3594
+ "status": 401
3595
+ },
3596
+ {
3597
+ "code": "INVALID_TYPE",
3598
+ "status": 400
3599
+ },
3600
+ {
3601
+ "code": "LIMIT_EXCEEDED",
3602
+ "status": 400
3603
+ },
3604
+ {
3605
+ "code": "MALFORMED_QUERY",
3606
+ "status": 400
3607
+ },
3608
+ {
3609
+ "code": "NOT_FOUND",
3610
+ "status": 404
3611
+ },
3612
+ {
3613
+ "code": "REQUEST_LIMIT_EXCEEDED",
3614
+ "status": 403
3615
+ }
3616
+ ]
3617
+ }
3618
+ },
3619
+ {
3620
+ "id": "retrieve-record",
3621
+ "operationId": "records.retrieve",
3622
+ "method": "GET",
3623
+ "path": "/services/data/{version}/sobjects/{sobjectType}/{id}",
3624
+ "auth": {
3625
+ "kind": "bearer",
3626
+ "schemes": [
3627
+ "Bearer",
3628
+ "OAuth"
3629
+ ]
3630
+ },
3631
+ "requestBody": "none",
3632
+ "response": {
3633
+ "successStatus": 200,
3634
+ "errors": [
3635
+ {
3636
+ "code": "ENTITY_IS_DELETED",
3637
+ "status": 404
3638
+ },
3639
+ {
3640
+ "code": "INVALID_FIELD",
3641
+ "status": 400
3642
+ },
3643
+ {
3644
+ "code": "INVALID_SESSION_ID",
3645
+ "status": 401
3646
+ },
3647
+ {
3648
+ "code": "INVALID_TYPE",
3649
+ "status": 404
3650
+ },
3651
+ {
3652
+ "code": "LIMIT_EXCEEDED",
3653
+ "status": 400
3654
+ },
3655
+ {
3656
+ "code": "MALFORMED_ID",
3657
+ "status": 400
3658
+ },
3659
+ {
3660
+ "code": "NOT_FOUND",
3661
+ "status": 404
3662
+ },
3663
+ {
3664
+ "code": "REQUEST_LIMIT_EXCEEDED",
3665
+ "status": 403
3666
+ }
3667
+ ]
3668
+ }
3669
+ },
3670
+ {
3671
+ "id": "retrieve-record-by-external-id",
3672
+ "operationId": "records.retrieve",
3673
+ "method": "GET",
3674
+ "path": "/services/data/{version}/sobjects/{sobjectType}/{externalIdField}/{value}",
3675
+ "auth": {
3676
+ "kind": "bearer",
3677
+ "schemes": [
3678
+ "Bearer",
3679
+ "OAuth"
3680
+ ]
3681
+ },
3682
+ "requestBody": "none",
3683
+ "response": {
3684
+ "successStatus": 200,
3685
+ "errors": [
3686
+ {
3687
+ "code": "ENTITY_IS_DELETED",
3688
+ "status": 404
3689
+ },
3690
+ {
3691
+ "code": "INVALID_FIELD",
3692
+ "status": 400
3693
+ },
3694
+ {
3695
+ "code": "INVALID_SESSION_ID",
3696
+ "status": 401
3697
+ },
3698
+ {
3699
+ "code": "INVALID_TYPE",
3700
+ "status": 404
3701
+ },
3702
+ {
3703
+ "code": "LIMIT_EXCEEDED",
3704
+ "status": 400
3705
+ },
3706
+ {
3707
+ "code": "MALFORMED_ID",
3708
+ "status": 400
3709
+ },
3710
+ {
3711
+ "code": "NOT_FOUND",
3712
+ "status": 404
3713
+ },
3714
+ {
3715
+ "code": "REQUEST_LIMIT_EXCEEDED",
3716
+ "status": 403
3717
+ }
3718
+ ]
3719
+ }
3720
+ },
3721
+ {
3722
+ "id": "update-record",
3723
+ "operationId": "records.update",
3724
+ "method": "PATCH",
3725
+ "path": "/services/data/{version}/sobjects/{sobjectType}/{id}",
3726
+ "auth": {
3727
+ "kind": "bearer",
3728
+ "schemes": [
3729
+ "Bearer",
3730
+ "OAuth"
3731
+ ]
3732
+ },
3733
+ "requestBody": "json",
3734
+ "response": {
3735
+ "successStatus": 204,
3736
+ "errors": [
3737
+ {
3738
+ "code": "CANNOT_UPDATE_CONVERTED_LEAD",
3739
+ "status": 400
3740
+ },
3741
+ {
3742
+ "code": "DUPLICATE_VALUE",
3743
+ "status": 400
3744
+ },
3745
+ {
3746
+ "code": "ENTITY_IS_DELETED",
3747
+ "status": 404
3748
+ },
3749
+ {
3750
+ "code": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
3751
+ "status": 400
3752
+ },
3753
+ {
3754
+ "code": "FIELD_INTEGRITY_EXCEPTION",
3755
+ "status": 400
3756
+ },
3757
+ {
3758
+ "code": "INSUFFICIENT_ACCESS_OR_READONLY",
3759
+ "status": 403
3760
+ },
3761
+ {
3762
+ "code": "INVALID_CROSS_REFERENCE_KEY",
3763
+ "status": 400
3764
+ },
3765
+ {
3766
+ "code": "INVALID_FIELD",
3767
+ "status": 400
3768
+ },
3769
+ {
3770
+ "code": "INVALID_FIELD_FOR_INSERT_UPDATE",
3771
+ "status": 400
3772
+ },
3773
+ {
3774
+ "code": "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST",
3775
+ "status": 400
3776
+ },
3777
+ {
3778
+ "code": "INVALID_SESSION_ID",
3779
+ "status": 401
3780
+ },
3781
+ {
3782
+ "code": "INVALID_TYPE",
3783
+ "status": 404
3784
+ },
3785
+ {
3786
+ "code": "INVALID_TYPE_FOR_OPERATION",
3787
+ "status": 400
3788
+ },
3789
+ {
3790
+ "code": "JSON_PARSER_ERROR",
3791
+ "status": 400
3792
+ },
3793
+ {
3794
+ "code": "LIMIT_EXCEEDED",
3795
+ "status": 400
3796
+ },
3797
+ {
3798
+ "code": "MALFORMED_ID",
3799
+ "status": 400
3800
+ },
3801
+ {
3802
+ "code": "NOT_FOUND",
3803
+ "status": 404
3804
+ },
3805
+ {
3806
+ "code": "REQUEST_LIMIT_EXCEEDED",
3807
+ "status": 403
3808
+ },
3809
+ {
3810
+ "code": "REQUIRED_FIELD_MISSING",
3811
+ "status": 400
3812
+ },
3813
+ {
3814
+ "code": "UNABLE_TO_LOCK_ROW",
3815
+ "status": 400
3816
+ }
3817
+ ]
3818
+ }
3819
+ },
3820
+ {
3821
+ "id": "upsert-record",
3822
+ "operationId": "records.upsert",
3823
+ "method": "PATCH",
3824
+ "path": "/services/data/{version}/sobjects/{sobjectType}/{externalIdField}/{value}",
3825
+ "auth": {
3826
+ "kind": "bearer",
3827
+ "schemes": [
3828
+ "Bearer",
3829
+ "OAuth"
3830
+ ]
3831
+ },
3832
+ "requestBody": "json",
3833
+ "response": {
3834
+ "successStatus": 200,
3835
+ "errors": [
3836
+ {
3837
+ "code": "CANNOT_UPDATE_CONVERTED_LEAD",
3838
+ "status": 400
3839
+ },
3840
+ {
3841
+ "code": "DUPLICATE_VALUE",
3842
+ "status": 400
3843
+ },
3844
+ {
3845
+ "code": "ENTITY_IS_DELETED",
3846
+ "status": 404
3847
+ },
3848
+ {
3849
+ "code": "FIELD_CUSTOM_VALIDATION_EXCEPTION",
3850
+ "status": 400
3851
+ },
3852
+ {
3853
+ "code": "FIELD_INTEGRITY_EXCEPTION",
3854
+ "status": 400
3855
+ },
3856
+ {
3857
+ "code": "INSUFFICIENT_ACCESS_OR_READONLY",
3858
+ "status": 403
3859
+ },
3860
+ {
3861
+ "code": "INVALID_CROSS_REFERENCE_KEY",
3862
+ "status": 400
3863
+ },
3864
+ {
3865
+ "code": "INVALID_FIELD",
3866
+ "status": 400
3867
+ },
3868
+ {
3869
+ "code": "INVALID_FIELD_FOR_INSERT_UPDATE",
3870
+ "status": 400
3871
+ },
3872
+ {
3873
+ "code": "INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST",
3874
+ "status": 400
3875
+ },
3876
+ {
3877
+ "code": "INVALID_SESSION_ID",
3878
+ "status": 401
3879
+ },
3880
+ {
3881
+ "code": "INVALID_TYPE",
3882
+ "status": 404
3883
+ },
3884
+ {
3885
+ "code": "INVALID_TYPE_FOR_OPERATION",
3886
+ "status": 400
3887
+ },
3888
+ {
3889
+ "code": "JSON_PARSER_ERROR",
3890
+ "status": 400
3891
+ },
3892
+ {
3893
+ "code": "LIMIT_EXCEEDED",
3894
+ "status": 400
3895
+ },
3896
+ {
3897
+ "code": "MALFORMED_ID",
3898
+ "status": 400
3899
+ },
3900
+ {
3901
+ "code": "NOT_FOUND",
3902
+ "status": 404
3903
+ },
3904
+ {
3905
+ "code": "REQUEST_LIMIT_EXCEEDED",
3906
+ "status": 403
3907
+ },
3908
+ {
3909
+ "code": "REQUIRED_FIELD_MISSING",
3910
+ "status": 400
3911
+ },
3912
+ {
3913
+ "code": "SERVER_UNAVAILABLE",
3914
+ "status": 503
3915
+ },
3916
+ {
3917
+ "code": "UNABLE_TO_LOCK_ROW",
3918
+ "status": 400
3919
+ }
3920
+ ]
3921
+ }
3922
+ }
3923
+ ],
3924
+ "callbacks": [],
3925
+ "compatibility": [],
3926
+ "connections": [
3927
+ {
3928
+ "id": "salesforce-rest-client",
3929
+ "title": "Salesforce REST client (instance URL + access token)",
3930
+ "protocol": "http",
3931
+ "environment": {
3932
+ "SALESFORCE_INSTANCE_URL": "FIREDRILL_HTTP_URL",
3933
+ "SALESFORCE_ACCESS_TOKEN": "FIREDRILL_HTTP_TOKEN"
3934
+ },
3935
+ "instructions": "Use SALESFORCE_INSTANCE_URL (no trailing slash) as the instance URL and SALESFORCE_ACCESS_TOKEN as the OAuth access token: jsforce `new Connection({ instanceUrl, accessToken, version: \"62.0\" })`, simple-salesforce `Salesforce(instance_url=…, session_id=…, version=\"62.0\")`. Only the documented route subset exists; the OAuth token endpoints are not served. No client has been verified against this Tool yet."
3936
+ }
3937
+ ]
3938
+ }
3939
+ }