@usestatemachines/sdk 0.11.0 → 0.12.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 (105) hide show
  1. package/README.md +126 -21
  2. package/agents/SKILL.md +33 -11
  3. package/agents/index.js +7 -7
  4. package/agents/llms.txt +14 -11
  5. package/agents/prompt.md +4 -4
  6. package/esm/extensions/client.d.ts +72 -8
  7. package/esm/extensions/client.js +89 -5
  8. package/esm/extensions/credentials.js +4 -0
  9. package/esm/extensions/environment.d.ts +18 -2
  10. package/esm/extensions/errors.d.ts +33 -0
  11. package/esm/extensions/errors.js +53 -0
  12. package/esm/extensions/import-data.d.ts +43 -0
  13. package/esm/extensions/import-data.js +88 -0
  14. package/esm/extensions/index.d.ts +4 -3
  15. package/esm/extensions/index.js +1 -1
  16. package/esm/extensions/packaging.d.ts +1 -0
  17. package/esm/extensions/packaging.js +1 -0
  18. package/esm/extensions/zip.d.ts +8 -0
  19. package/esm/extensions/zip.js +121 -0
  20. package/esm/funcs/environments-actors.d.ts +11 -0
  21. package/esm/funcs/environments-actors.js +102 -0
  22. package/esm/funcs/get-import-file.d.ts +12 -0
  23. package/esm/funcs/get-import-file.js +97 -0
  24. package/esm/funcs/list-import-files.d.ts +12 -0
  25. package/esm/funcs/list-import-files.js +98 -0
  26. package/esm/funcs/upload-import.d.ts +12 -0
  27. package/esm/funcs/upload-import.js +96 -0
  28. package/esm/lib/config.d.ts +2 -2
  29. package/esm/lib/config.js +2 -2
  30. package/esm/models/absent-record.d.ts +7 -3
  31. package/esm/models/absent-record.js +3 -2
  32. package/esm/models/actor.d.ts +3 -0
  33. package/esm/models/app-user.d.ts +17 -0
  34. package/esm/models/app-user.js +18 -0
  35. package/esm/models/credentials.d.ts +6 -1
  36. package/esm/models/credentials.js +2 -0
  37. package/esm/models/environment.d.ts +4 -4
  38. package/esm/models/environment.js +3 -4
  39. package/esm/models/error.d.ts +7 -0
  40. package/esm/models/error.js +4 -0
  41. package/esm/models/filled-field.d.ts +14 -0
  42. package/esm/models/filled-field.js +16 -0
  43. package/esm/models/import-actor.d.ts +16 -0
  44. package/esm/models/import-actor.js +15 -0
  45. package/esm/models/import-file.d.ts +56 -0
  46. package/esm/models/import-file.js +67 -0
  47. package/esm/models/import-folder.d.ts +56 -0
  48. package/esm/models/import-folder.js +75 -0
  49. package/esm/models/import-problem.d.ts +4 -4
  50. package/esm/models/import-problem.js +1 -1
  51. package/esm/models/index.d.ts +18 -1
  52. package/esm/models/index.js +18 -1
  53. package/esm/models/known-difference.d.ts +21 -0
  54. package/esm/models/known-difference.js +16 -0
  55. package/esm/models/launch-ui-session.d.ts +12 -2
  56. package/esm/models/launch-ui-session.js +2 -1
  57. package/esm/models/made-id.d.ts +22 -0
  58. package/esm/models/made-id.js +17 -0
  59. package/esm/models/matched-record.d.ts +22 -0
  60. package/esm/models/matched-record.js +17 -0
  61. package/esm/models/object-load.d.ts +21 -0
  62. package/esm/models/object-load.js +17 -0
  63. package/esm/models/operations/create-credentials.d.ts +10 -0
  64. package/esm/models/operations/create-credentials.js +1 -0
  65. package/esm/models/operations/get-import-file.d.ts +13 -0
  66. package/esm/models/operations/get-import-file.js +12 -0
  67. package/esm/models/operations/index.d.ts +4 -0
  68. package/esm/models/operations/index.js +4 -0
  69. package/esm/models/operations/list-actors.d.ts +32 -0
  70. package/esm/models/operations/list-actors.js +26 -0
  71. package/esm/models/operations/list-import-files.d.ts +15 -0
  72. package/esm/models/operations/list-import-files.js +13 -0
  73. package/esm/models/operations/list-snapshots.d.ts +2 -2
  74. package/esm/models/operations/list-snapshots.js +1 -1
  75. package/esm/models/operations/upload-import.d.ts +13 -0
  76. package/esm/models/operations/upload-import.js +17 -0
  77. package/esm/models/problem-counts.d.ts +17 -0
  78. package/esm/models/problem-counts.js +14 -0
  79. package/esm/models/received-import.d.ts +9 -0
  80. package/esm/models/received-import.js +13 -0
  81. package/esm/models/record-source.d.ts +13 -0
  82. package/esm/models/{absent-record-source.js → record-source.js} +3 -3
  83. package/esm/models/snapshot-app-full-load-counts.d.ts +57 -0
  84. package/esm/models/snapshot-app-full-load-counts.js +25 -0
  85. package/esm/models/snapshot-app-full-load.d.ts +101 -0
  86. package/esm/models/snapshot-app-full-load.js +42 -0
  87. package/esm/models/snapshot-app-limited-load-counts.d.ts +16 -0
  88. package/esm/models/snapshot-app-limited-load-counts.js +14 -0
  89. package/esm/models/snapshot-app-limited-load.d.ts +18 -0
  90. package/esm/models/snapshot-app-limited-load.js +16 -0
  91. package/esm/models/snapshot-app-load-counts.d.ts +13 -0
  92. package/esm/models/snapshot-app-load-counts.js +15 -0
  93. package/esm/models/snapshot-app-load.d.ts +5 -12
  94. package/esm/models/snapshot-app-load.js +6 -6
  95. package/esm/models/snapshot-list-item.d.ts +53 -0
  96. package/esm/models/snapshot-list-item.js +42 -0
  97. package/esm/models/snapshot.d.ts +1 -1
  98. package/esm/models/version.d.ts +3 -0
  99. package/esm/sdk/environments.d.ts +1 -0
  100. package/esm/sdk/environments.js +4 -0
  101. package/esm/sdk/sdk.d.ts +3 -0
  102. package/esm/sdk/sdk.js +12 -0
  103. package/openapi.json +1868 -510
  104. package/package.json +8 -4
  105. package/esm/models/absent-record-source.d.ts +0 -13
package/openapi.json CHANGED
@@ -70,27 +70,18 @@
70
70
  "$ref": "#/components/schemas/AbsentReason"
71
71
  },
72
72
  "source": {
73
- "$ref": "#/components/schemas/AbsentRecordSource"
74
- }
75
- },
76
- "required": ["object", "source", "nativeId", "reason"],
77
- "type": "object"
78
- },
79
- "AbsentRecordSource": {
80
- "description": "The file of the record in the import, such as `salesforce/records/Opportunity.jsonl`, and its line, counted from 1.",
81
- "properties": {
82
- "file": {
83
- "type": "string"
73
+ "$ref": "#/components/schemas/RecordSource"
84
74
  },
85
- "line": {
86
- "exclusiveMinimum": 0,
87
- "type": ["integer", "null"]
75
+ "text": {
76
+ "description": "The text that the record wrote as its ID, such as `acme`, when the text is no vendor ID.",
77
+ "type": "string"
88
78
  }
89
79
  },
90
- "required": ["file", "line"],
80
+ "required": ["object", "source", "nativeId", "reason"],
91
81
  "type": "object"
92
82
  },
93
83
  "Actor": {
84
+ "description": "A user of the app's seed, for display.",
94
85
  "properties": {
95
86
  "id": {
96
87
  "maxLength": 255,
@@ -158,6 +149,31 @@
158
149
  }
159
150
  ]
160
151
  },
152
+ "AppUser": {
153
+ "description": "A user of an app who can sign in, as the app answers it.",
154
+ "properties": {
155
+ "default": {
156
+ "type": "boolean"
157
+ },
158
+ "email": {
159
+ "type": ["string", "null"]
160
+ },
161
+ "id": {
162
+ "type": "string"
163
+ },
164
+ "name": {
165
+ "type": "string"
166
+ },
167
+ "role": {
168
+ "type": ["string", "null"]
169
+ },
170
+ "username": {
171
+ "type": ["string", "null"]
172
+ }
173
+ },
174
+ "required": ["id", "name", "email", "username", "role", "default"],
175
+ "type": "object"
176
+ },
161
177
  "AuditEvent": {
162
178
  "properties": {
163
179
  "data": {
@@ -525,6 +541,9 @@
525
541
  },
526
542
  "Credentials": {
527
543
  "properties": {
544
+ "actor": {
545
+ "$ref": "#/components/schemas/AppUser"
546
+ },
528
547
  "actorId": {
529
548
  "type": "string"
530
549
  },
@@ -584,7 +603,7 @@
584
603
  "type": "string"
585
604
  },
586
605
  "url": {
587
- "description": "The MCP server's URL. On an environment created with `tokenInUrl`, a request with no `Authorization` header acts as the actor that this call picks when you send no `actorId`. To act as `actorId`, send the service's headers.",
606
+ "description": "The MCP server's URL. On an environment created with `tokenInUrl`, a request with no `Authorization` header acts as the app's default user. To act as the user of these credentials, send the service's headers.",
588
607
  "type": "string"
589
608
  }
590
609
  },
@@ -803,8 +822,10 @@
803
822
  "workspace_archived",
804
823
  "version_in_use",
805
824
  "ui_disabled",
825
+ "actor_cannot_sign_in",
806
826
  "body_too_large",
807
827
  "version_unavailable",
828
+ "actor_not_found",
808
829
  "environment_limit_reached",
809
830
  "rate_limited",
810
831
  "internal_error",
@@ -824,6 +845,13 @@
824
845
  "message": {
825
846
  "type": "string"
826
847
  },
848
+ "nearest": {
849
+ "description": "On `actor_not_found`, the users who can act in the app that are nearest to `as`, nearest first.",
850
+ "items": {
851
+ "$ref": "#/components/schemas/AppUser"
852
+ },
853
+ "type": "array"
854
+ },
827
855
  "requestId": {
828
856
  "type": "string"
829
857
  },
@@ -838,6 +866,22 @@
838
866
  "required": ["error"],
839
867
  "type": "object"
840
868
  },
869
+ "FilledField": {
870
+ "properties": {
871
+ "field": {
872
+ "type": "string"
873
+ },
874
+ "object": {
875
+ "type": "string"
876
+ },
877
+ "records": {
878
+ "description": "How many loaded records of the object the app filled the field for.",
879
+ "type": "integer"
880
+ }
881
+ },
882
+ "required": ["object", "field", "records"],
883
+ "type": "object"
884
+ },
841
885
  "Import": {
842
886
  "properties": {
843
887
  "apps": {
@@ -918,6 +962,207 @@
918
962
  ],
919
963
  "type": "object"
920
964
  },
965
+ "ImportActor": {
966
+ "properties": {
967
+ "id": {
968
+ "description": "The ID of the user in the app's database.",
969
+ "type": "string"
970
+ },
971
+ "user": {
972
+ "description": "The entry of `actors` in the manifest: an email, a username or an ID.",
973
+ "type": "string"
974
+ }
975
+ },
976
+ "required": ["user", "id"],
977
+ "type": "object"
978
+ },
979
+ "ImportFile": {
980
+ "oneOf": [
981
+ {
982
+ "properties": {
983
+ "kind": {
984
+ "enum": ["unavailable"],
985
+ "type": "string"
986
+ },
987
+ "reason": {
988
+ "enum": [
989
+ "uploading",
990
+ "invalid",
991
+ "deleted",
992
+ "missing",
993
+ "unreadable",
994
+ "too_large"
995
+ ],
996
+ "type": "string"
997
+ }
998
+ },
999
+ "required": ["kind", "reason"],
1000
+ "type": "object"
1001
+ },
1002
+ {
1003
+ "properties": {
1004
+ "kind": {
1005
+ "enum": ["binary"],
1006
+ "type": "string"
1007
+ },
1008
+ "path": {
1009
+ "type": "string"
1010
+ },
1011
+ "sizeBytes": {
1012
+ "minimum": 0,
1013
+ "type": "integer"
1014
+ }
1015
+ },
1016
+ "required": ["kind", "path", "sizeBytes"],
1017
+ "type": "object"
1018
+ },
1019
+ {
1020
+ "properties": {
1021
+ "kind": {
1022
+ "enum": ["text"],
1023
+ "type": "string"
1024
+ },
1025
+ "path": {
1026
+ "type": "string"
1027
+ },
1028
+ "sizeBytes": {
1029
+ "minimum": 0,
1030
+ "type": "integer"
1031
+ },
1032
+ "tables": {
1033
+ "items": {
1034
+ "properties": {
1035
+ "columns": {
1036
+ "items": {
1037
+ "type": "string"
1038
+ },
1039
+ "type": "array"
1040
+ },
1041
+ "name": {
1042
+ "type": "string"
1043
+ },
1044
+ "rows": {
1045
+ "items": {
1046
+ "items": {
1047
+ "type": "string"
1048
+ },
1049
+ "type": "array"
1050
+ },
1051
+ "type": "array"
1052
+ },
1053
+ "truncated": {
1054
+ "type": "boolean"
1055
+ }
1056
+ },
1057
+ "required": ["name", "columns", "rows", "truncated"],
1058
+ "type": "object"
1059
+ },
1060
+ "type": "array"
1061
+ },
1062
+ "tablesTruncated": {
1063
+ "type": "boolean"
1064
+ },
1065
+ "text": {
1066
+ "type": "string"
1067
+ },
1068
+ "truncated": {
1069
+ "type": "boolean"
1070
+ }
1071
+ },
1072
+ "required": [
1073
+ "kind",
1074
+ "path",
1075
+ "sizeBytes",
1076
+ "text",
1077
+ "truncated",
1078
+ "tablesTruncated",
1079
+ "tables"
1080
+ ],
1081
+ "type": "object"
1082
+ }
1083
+ ]
1084
+ },
1085
+ "ImportFolder": {
1086
+ "oneOf": [
1087
+ {
1088
+ "properties": {
1089
+ "kind": {
1090
+ "enum": ["unavailable"],
1091
+ "type": "string"
1092
+ },
1093
+ "reason": {
1094
+ "enum": [
1095
+ "uploading",
1096
+ "invalid",
1097
+ "deleted",
1098
+ "missing",
1099
+ "unreadable",
1100
+ "too_large"
1101
+ ],
1102
+ "type": "string"
1103
+ }
1104
+ },
1105
+ "required": ["kind", "reason"],
1106
+ "type": "object"
1107
+ },
1108
+ {
1109
+ "properties": {
1110
+ "entries": {
1111
+ "items": {
1112
+ "oneOf": [
1113
+ {
1114
+ "properties": {
1115
+ "kind": {
1116
+ "enum": ["folder"],
1117
+ "type": "string"
1118
+ },
1119
+ "path": {
1120
+ "type": "string"
1121
+ }
1122
+ },
1123
+ "required": ["kind", "path"],
1124
+ "type": "object"
1125
+ },
1126
+ {
1127
+ "properties": {
1128
+ "kind": {
1129
+ "enum": ["file"],
1130
+ "type": "string"
1131
+ },
1132
+ "path": {
1133
+ "type": "string"
1134
+ },
1135
+ "sizeBytes": {
1136
+ "minimum": 0,
1137
+ "type": "integer"
1138
+ }
1139
+ },
1140
+ "required": ["kind", "path", "sizeBytes"],
1141
+ "type": "object"
1142
+ }
1143
+ ]
1144
+ },
1145
+ "type": "array"
1146
+ },
1147
+ "kind": {
1148
+ "enum": ["folder"],
1149
+ "type": "string"
1150
+ },
1151
+ "name": {
1152
+ "type": ["string", "null"]
1153
+ },
1154
+ "nextCursor": {
1155
+ "type": ["string", "null"]
1156
+ },
1157
+ "path": {
1158
+ "type": "string"
1159
+ }
1160
+ },
1161
+ "required": ["kind", "path", "name", "entries", "nextCursor"],
1162
+ "type": "object"
1163
+ }
1164
+ ]
1165
+ },
921
1166
  "ImportProblem": {
922
1167
  "properties": {
923
1168
  "code": {
@@ -936,11 +1181,11 @@
936
1181
  "type": "string"
937
1182
  },
938
1183
  "pointer": {
939
- "description": "The JSON pointer of the value, such as `/apps/0/name`. In a records file, it points into the record on `line`. Null when the problem names no value.",
1184
+ "description": "The JSON pointer of the value, such as `/apps/salesforce/appId`. In a records file, it points into the record on `line`. Null when the problem names no value.",
940
1185
  "type": ["string", "null"]
941
1186
  },
942
1187
  "severity": {
943
- "description": "An error refuses the import: the check of the zip file makes the import `invalid`, and the load of a snapshot from the import fails the snapshot. A warning refuses nothing.",
1188
+ "description": "An error refuses the import, and the check makes the import `invalid`. In `skipRecord` mode, an error in the values, the ID, or the references of a record leaves out only that record. A warning refuses nothing.",
944
1189
  "enum": ["error", "warning"],
945
1190
  "type": "string"
946
1191
  }
@@ -952,12 +1197,39 @@
952
1197
  "enum": ["uploading", "ready", "invalid", "deleted"],
953
1198
  "type": "string"
954
1199
  },
1200
+ "KnownDifference": {
1201
+ "properties": {
1202
+ "field": {
1203
+ "description": "The field, or null for the whole object.",
1204
+ "type": ["string", "null"]
1205
+ },
1206
+ "message": {
1207
+ "type": "string"
1208
+ },
1209
+ "object": {
1210
+ "description": "The object, or null for the whole app.",
1211
+ "type": ["string", "null"]
1212
+ },
1213
+ "values": {
1214
+ "description": "How many values of the import the difference affects, or null when the load did not count them.",
1215
+ "type": ["number", "null"]
1216
+ }
1217
+ },
1218
+ "required": ["object", "field", "message", "values"],
1219
+ "type": "object"
1220
+ },
955
1221
  "LaunchUiSession": {
956
1222
  "additionalProperties": false,
957
1223
  "properties": {
958
1224
  "actorId": {
959
- "maxLength": 255,
960
- "minLength": 1,
1225
+ "deprecated": true,
1226
+ "description": "The old name of `as`. It takes the same values.",
1227
+ "maxLength": 320,
1228
+ "type": "string"
1229
+ },
1230
+ "as": {
1231
+ "description": "The user to act as: an email, a username or an ID of a user of the app. Without it, the call acts as the app's default user.",
1232
+ "maxLength": 320,
961
1233
  "type": "string"
962
1234
  },
963
1235
  "entryPath": {
@@ -978,13 +1250,47 @@
978
1250
  "type": "string"
979
1251
  }
980
1252
  },
981
- "required": [
982
- "serviceId",
983
- "actorId",
984
- "mode",
985
- "launcherOrigin",
986
- "entryPath"
987
- ],
1253
+ "required": ["serviceId", "mode", "launcherOrigin", "entryPath"],
1254
+ "type": "object"
1255
+ },
1256
+ "MadeId": {
1257
+ "properties": {
1258
+ "id": {
1259
+ "description": "The ID that the app made.",
1260
+ "type": "string"
1261
+ },
1262
+ "object": {
1263
+ "type": "string"
1264
+ },
1265
+ "source": {
1266
+ "$ref": "#/components/schemas/RecordSource"
1267
+ },
1268
+ "text": {
1269
+ "description": "The text that the record wrote as its ID, such as `acme`, or null for a record that wrote no ID, whose ID the app made from its place.",
1270
+ "type": ["string", "null"]
1271
+ }
1272
+ },
1273
+ "required": ["object", "source", "text", "id"],
1274
+ "type": "object"
1275
+ },
1276
+ "MatchedRecord": {
1277
+ "properties": {
1278
+ "id": {
1279
+ "description": "The ID of the seed record that the record took over.",
1280
+ "type": "string"
1281
+ },
1282
+ "object": {
1283
+ "type": "string"
1284
+ },
1285
+ "source": {
1286
+ "$ref": "#/components/schemas/RecordSource"
1287
+ },
1288
+ "text": {
1289
+ "description": "The text that the record wrote as its ID, such as `standard`, when the text is no vendor ID.",
1290
+ "type": "string"
1291
+ }
1292
+ },
1293
+ "required": ["object", "source", "id"],
988
1294
  "type": "object"
989
1295
  },
990
1296
  "McpServer": {
@@ -1127,6 +1433,27 @@
1127
1433
  ],
1128
1434
  "type": "object"
1129
1435
  },
1436
+ "ObjectLoad": {
1437
+ "properties": {
1438
+ "absent": {
1439
+ "description": "How many records of the object did not load.",
1440
+ "type": "integer"
1441
+ },
1442
+ "matched": {
1443
+ "description": "How many records of the object took over a seed record.",
1444
+ "type": "integer"
1445
+ },
1446
+ "native": {
1447
+ "description": "How many records of the object loaded as records of their own, under their vendor IDs or IDs that the app made.",
1448
+ "type": "integer"
1449
+ },
1450
+ "object": {
1451
+ "type": "string"
1452
+ }
1453
+ },
1454
+ "required": ["object", "native", "matched", "absent"],
1455
+ "type": "object"
1456
+ },
1130
1457
  "Organization": {
1131
1458
  "properties": {
1132
1459
  "domain": {
@@ -1173,21 +1500,64 @@
1173
1500
  "required": ["type", "id", "name"],
1174
1501
  "type": "object"
1175
1502
  },
1176
- "Request": {
1503
+ "ProblemCounts": {
1504
+ "description": "For each severity, how many problems of the load have each code. The errors are those of the records that did not load in `skipRecord` mode.",
1177
1505
  "properties": {
1178
- "appName": {
1179
- "type": "string"
1180
- },
1181
- "completedAt": {
1182
- "format": "date-time",
1183
- "type": "string"
1184
- },
1185
- "durationMs": {
1186
- "minimum": 0,
1187
- "type": "integer"
1506
+ "error": {
1507
+ "additionalProperties": {
1508
+ "type": "integer"
1509
+ },
1510
+ "type": "object"
1188
1511
  },
1189
- "environmentId": {
1190
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1512
+ "warning": {
1513
+ "additionalProperties": {
1514
+ "type": "integer"
1515
+ },
1516
+ "type": "object"
1517
+ }
1518
+ },
1519
+ "required": ["error", "warning"],
1520
+ "type": "object"
1521
+ },
1522
+ "ReceivedImport": {
1523
+ "properties": {
1524
+ "received": {
1525
+ "enum": [true],
1526
+ "type": "boolean"
1527
+ }
1528
+ },
1529
+ "required": ["received"],
1530
+ "type": "object"
1531
+ },
1532
+ "RecordSource": {
1533
+ "description": "The file that holds the record in the import, such as `salesforce/records/Opportunity.jsonl` or the manifest `acme.yaml`, and the line where the record starts, counted from 1.",
1534
+ "properties": {
1535
+ "file": {
1536
+ "type": "string"
1537
+ },
1538
+ "line": {
1539
+ "exclusiveMinimum": 0,
1540
+ "type": ["integer", "null"]
1541
+ }
1542
+ },
1543
+ "required": ["file", "line"],
1544
+ "type": "object"
1545
+ },
1546
+ "Request": {
1547
+ "properties": {
1548
+ "appName": {
1549
+ "type": "string"
1550
+ },
1551
+ "completedAt": {
1552
+ "format": "date-time",
1553
+ "type": "string"
1554
+ },
1555
+ "durationMs": {
1556
+ "minimum": 0,
1557
+ "type": "integer"
1558
+ },
1559
+ "environmentId": {
1560
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1191
1561
  "type": "string"
1192
1562
  },
1193
1563
  "errorCode": {
@@ -1544,8 +1914,8 @@
1544
1914
  ],
1545
1915
  "type": "object"
1546
1916
  },
1547
- "SnapshotAppLoad": {
1548
- "description": "What the load of the snapshot's import left out of the app. Null for a snapshot of an environment, and until the app's load ends.",
1917
+ "SnapshotAppFullLoad": {
1918
+ "description": "The report of the load of the snapshot's import into the app. Each list holds its first items, which fit in the report's size, and the count beside it counts all of them. Null for a snapshot of an environment, and until the app's load ends.",
1549
1919
  "properties": {
1550
1920
  "absent": {
1551
1921
  "description": "The first records of the import that did not load, in the order of the import.",
@@ -1555,12 +1925,264 @@
1555
1925
  "type": "array"
1556
1926
  },
1557
1927
  "absentCount": {
1558
- "description": "How many records of the import did not load. It is larger than the length of `absent` when they did not all fit.",
1928
+ "description": "How many records of the import did not load.",
1929
+ "type": "integer"
1930
+ },
1931
+ "actorCount": {
1932
+ "description": "How many users the import names in `actors` for the app.",
1933
+ "type": "integer"
1934
+ },
1935
+ "actors": {
1936
+ "description": "The first users that the import names in `actors`, in that order. The first is the default user.",
1937
+ "items": {
1938
+ "$ref": "#/components/schemas/ImportActor"
1939
+ },
1940
+ "type": "array"
1941
+ },
1942
+ "deactivated": {
1943
+ "description": "The IDs of the first seed users that the load deactivated.",
1944
+ "items": {
1945
+ "type": "string"
1946
+ },
1947
+ "type": "array"
1948
+ },
1949
+ "deactivatedCount": {
1950
+ "description": "How many seed users the load deactivated, because the import brings users of its own.",
1951
+ "type": "integer"
1952
+ },
1953
+ "details": {
1954
+ "enum": ["full"],
1955
+ "type": "string"
1956
+ },
1957
+ "differenceCount": {
1958
+ "description": "How many differences from the vendor's app the load knows of.",
1959
+ "type": "integer"
1960
+ },
1961
+ "differences": {
1962
+ "description": "The first differences from the vendor's app.",
1963
+ "items": {
1964
+ "$ref": "#/components/schemas/KnownDifference"
1965
+ },
1966
+ "type": "array"
1967
+ },
1968
+ "filled": {
1969
+ "description": "The first fields that the app filled, by object and field.",
1970
+ "items": {
1971
+ "$ref": "#/components/schemas/FilledField"
1972
+ },
1973
+ "type": "array"
1974
+ },
1975
+ "filledCount": {
1976
+ "description": "How many fields the app filled for loaded records that did not write them.",
1977
+ "type": "integer"
1978
+ },
1979
+ "filledValueCount": {
1980
+ "description": "How many values the app filled in those fields.",
1981
+ "type": "integer"
1982
+ },
1983
+ "made": {
1984
+ "description": "The first IDs that the app made, in the order of the import.",
1985
+ "items": {
1986
+ "$ref": "#/components/schemas/MadeId"
1987
+ },
1988
+ "type": "array"
1989
+ },
1990
+ "madeCount": {
1991
+ "description": "How many IDs the app made for records, from the text that a record wrote as its ID or from the record's place.",
1992
+ "type": "integer"
1993
+ },
1994
+ "matched": {
1995
+ "description": "The first records that took over a seed record, in the order of the import.",
1996
+ "items": {
1997
+ "$ref": "#/components/schemas/MatchedRecord"
1998
+ },
1999
+ "type": "array"
2000
+ },
2001
+ "matchedCount": {
2002
+ "description": "How many records took over a seed record.",
2003
+ "type": "integer"
2004
+ },
2005
+ "objectCount": {
2006
+ "description": "How many objects of the app the import holds records of.",
2007
+ "type": "integer"
2008
+ },
2009
+ "objects": {
2010
+ "description": "For the first objects of the app that the import holds records of, by name, how many of its records loaded, took over a seed record, or did not load.",
2011
+ "items": {
2012
+ "$ref": "#/components/schemas/ObjectLoad"
2013
+ },
2014
+ "type": "array"
2015
+ },
2016
+ "problemCounts": {
2017
+ "$ref": "#/components/schemas/ProblemCounts"
2018
+ },
2019
+ "warningCount": {
2020
+ "description": "How many warnings the load found.",
1559
2021
  "type": "integer"
2022
+ },
2023
+ "warnings": {
2024
+ "description": "The first warnings of the load, in the order of file, line and pointer.",
2025
+ "items": {
2026
+ "$ref": "#/components/schemas/ImportProblem"
2027
+ },
2028
+ "type": "array"
1560
2029
  }
1561
2030
  },
1562
- "required": ["absentCount", "absent"],
1563
- "type": ["object", "null"]
2031
+ "required": [
2032
+ "details",
2033
+ "objectCount",
2034
+ "madeCount",
2035
+ "matchedCount",
2036
+ "filledCount",
2037
+ "filledValueCount",
2038
+ "actorCount",
2039
+ "deactivatedCount",
2040
+ "absentCount",
2041
+ "differenceCount",
2042
+ "problemCounts",
2043
+ "warningCount",
2044
+ "objects",
2045
+ "made",
2046
+ "matched",
2047
+ "filled",
2048
+ "actors",
2049
+ "deactivated",
2050
+ "absent",
2051
+ "differences",
2052
+ "warnings"
2053
+ ],
2054
+ "type": "object"
2055
+ },
2056
+ "SnapshotAppFullLoadCounts": {
2057
+ "description": "Every count of the report of the load of the snapshot's import into the app, as the list of snapshots answers it. Get the snapshot for the first items of each list. Null for a snapshot of an environment, and until the app's load ends.",
2058
+ "properties": {
2059
+ "absentCount": {
2060
+ "description": "How many records of the import did not load.",
2061
+ "type": "integer"
2062
+ },
2063
+ "actorCount": {
2064
+ "description": "How many users the import names in `actors` for the app.",
2065
+ "type": "integer"
2066
+ },
2067
+ "deactivatedCount": {
2068
+ "description": "How many seed users the load deactivated, because the import brings users of its own.",
2069
+ "type": "integer"
2070
+ },
2071
+ "details": {
2072
+ "enum": ["full"],
2073
+ "type": "string"
2074
+ },
2075
+ "differenceCount": {
2076
+ "description": "How many differences from the vendor's app the load knows of.",
2077
+ "type": "integer"
2078
+ },
2079
+ "filledCount": {
2080
+ "description": "How many fields the app filled for loaded records that did not write them.",
2081
+ "type": "integer"
2082
+ },
2083
+ "filledValueCount": {
2084
+ "description": "How many values the app filled in those fields.",
2085
+ "type": "integer"
2086
+ },
2087
+ "madeCount": {
2088
+ "description": "How many IDs the app made for records, from the text that a record wrote as its ID or from the record's place.",
2089
+ "type": "integer"
2090
+ },
2091
+ "matchedCount": {
2092
+ "description": "How many records took over a seed record.",
2093
+ "type": "integer"
2094
+ },
2095
+ "objectCount": {
2096
+ "description": "How many objects of the app the import holds records of.",
2097
+ "type": "integer"
2098
+ },
2099
+ "problemCounts": {
2100
+ "$ref": "#/components/schemas/ProblemCounts"
2101
+ },
2102
+ "warningCount": {
2103
+ "description": "How many warnings the load found.",
2104
+ "type": "integer"
2105
+ }
2106
+ },
2107
+ "required": [
2108
+ "details",
2109
+ "objectCount",
2110
+ "madeCount",
2111
+ "matchedCount",
2112
+ "filledCount",
2113
+ "filledValueCount",
2114
+ "actorCount",
2115
+ "deactivatedCount",
2116
+ "absentCount",
2117
+ "differenceCount",
2118
+ "problemCounts",
2119
+ "warningCount"
2120
+ ],
2121
+ "type": "object"
2122
+ },
2123
+ "SnapshotAppLimitedLoad": {
2124
+ "description": "The recorded count and first skipped records. Additional import diagnostics were not recorded for this snapshot.",
2125
+ "properties": {
2126
+ "absent": {
2127
+ "items": {
2128
+ "$ref": "#/components/schemas/AbsentRecord"
2129
+ },
2130
+ "type": "array"
2131
+ },
2132
+ "absentCount": {
2133
+ "description": "How many records of the import did not load.",
2134
+ "type": "integer"
2135
+ },
2136
+ "details": {
2137
+ "enum": ["limited"],
2138
+ "type": "string"
2139
+ }
2140
+ },
2141
+ "required": ["details", "absentCount", "absent"],
2142
+ "type": "object"
2143
+ },
2144
+ "SnapshotAppLimitedLoadCounts": {
2145
+ "description": "The recorded count of skipped records. Additional import diagnostics were not recorded for this snapshot.",
2146
+ "properties": {
2147
+ "absentCount": {
2148
+ "description": "How many records of the import did not load.",
2149
+ "type": "integer"
2150
+ },
2151
+ "details": {
2152
+ "enum": ["limited"],
2153
+ "type": "string"
2154
+ }
2155
+ },
2156
+ "required": ["details", "absentCount"],
2157
+ "type": "object"
2158
+ },
2159
+ "SnapshotAppLoad": {
2160
+ "description": "Recorded import diagnostics. Full reports contain every diagnostic category. Limited reports preserve skipped records when additional details were not recorded.",
2161
+ "oneOf": [
2162
+ {
2163
+ "$ref": "#/components/schemas/SnapshotAppFullLoad"
2164
+ },
2165
+ {
2166
+ "$ref": "#/components/schemas/SnapshotAppLimitedLoad"
2167
+ },
2168
+ {
2169
+ "type": "null"
2170
+ }
2171
+ ]
2172
+ },
2173
+ "SnapshotAppLoadCounts": {
2174
+ "description": "Recorded import counts. Full reports contain every diagnostic count. Limited reports contain only the skipped-record count.",
2175
+ "oneOf": [
2176
+ {
2177
+ "$ref": "#/components/schemas/SnapshotAppFullLoadCounts"
2178
+ },
2179
+ {
2180
+ "$ref": "#/components/schemas/SnapshotAppLimitedLoadCounts"
2181
+ },
2182
+ {
2183
+ "type": "null"
2184
+ }
2185
+ ]
1564
2186
  },
1565
2187
  "SnapshotFailure": {
1566
2188
  "anyOf": [
@@ -1605,41 +2227,147 @@
1605
2227
  }
1606
2228
  ]
1607
2229
  },
1608
- "SnapshotStatus": {
1609
- "enum": ["saving", "ready", "failed", "deleted"],
1610
- "type": "string"
1611
- },
1612
- "UiSessionLaunch": {
2230
+ "SnapshotListItem": {
2231
+ "description": "A snapshot as the list answers it: each app's load holds its counts only. Get the snapshot for the lists of each load.",
1613
2232
  "properties": {
1614
- "actorId": {
1615
- "type": "string"
2233
+ "apps": {
2234
+ "items": {
2235
+ "properties": {
2236
+ "appId": {
2237
+ "type": "string"
2238
+ },
2239
+ "load": {
2240
+ "$ref": "#/components/schemas/SnapshotAppLoadCounts"
2241
+ },
2242
+ "name": {
2243
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
2244
+ "type": "string"
2245
+ },
2246
+ "services": {
2247
+ "additionalProperties": {},
2248
+ "type": "object"
2249
+ },
2250
+ "setup": {
2251
+ "additionalProperties": {},
2252
+ "type": "object"
2253
+ },
2254
+ "version": {
2255
+ "type": "string"
2256
+ },
2257
+ "versionId": {
2258
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2259
+ "type": "string"
2260
+ }
2261
+ },
2262
+ "required": [
2263
+ "name",
2264
+ "appId",
2265
+ "versionId",
2266
+ "version",
2267
+ "setup",
2268
+ "services"
2269
+ ],
2270
+ "type": "object"
2271
+ },
2272
+ "type": "array"
1616
2273
  },
1617
- "appName": {
1618
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
2274
+ "createdAt": {
2275
+ "format": "date-time",
1619
2276
  "type": "string"
1620
2277
  },
1621
- "entryPath": {
1622
- "type": "string"
2278
+ "createdBy": {
2279
+ "$ref": "#/components/schemas/Principal"
2280
+ },
2281
+ "deletedAt": {
2282
+ "format": "date-time",
2283
+ "type": ["string", "null"]
1623
2284
  },
1624
2285
  "environmentId": {
2286
+ "description": "The environment that the snapshot copies, or null for a snapshot built from an import.",
1625
2287
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1626
- "type": "string"
1627
- },
1628
- "exchangeUrl": {
1629
- "type": "string"
2288
+ "type": ["string", "null"]
1630
2289
  },
1631
- "expiresAt": {
1632
- "format": "date-time",
1633
- "type": "string"
2290
+ "environmentName": {
2291
+ "type": ["string", "null"]
1634
2292
  },
1635
- "grant": {
1636
- "type": "string"
2293
+ "failure": {
2294
+ "$ref": "#/components/schemas/SnapshotFailure"
1637
2295
  },
1638
- "grantExpiresAt": {
1639
- "format": "date-time",
2296
+ "id": {
2297
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1640
2298
  "type": "string"
1641
2299
  },
1642
- "mode": {
2300
+ "importId": {
2301
+ "description": "The import that the snapshot was built from, or null for a snapshot of an environment.",
2302
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2303
+ "type": ["string", "null"]
2304
+ },
2305
+ "name": {
2306
+ "type": ["string", "null"]
2307
+ },
2308
+ "readyAt": {
2309
+ "format": "date-time",
2310
+ "type": ["string", "null"]
2311
+ },
2312
+ "status": {
2313
+ "$ref": "#/components/schemas/SnapshotStatus"
2314
+ },
2315
+ "workspaceId": {
2316
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2317
+ "type": "string"
2318
+ }
2319
+ },
2320
+ "required": [
2321
+ "id",
2322
+ "workspaceId",
2323
+ "environmentId",
2324
+ "environmentName",
2325
+ "name",
2326
+ "status",
2327
+ "failure",
2328
+ "apps",
2329
+ "createdBy",
2330
+ "createdAt",
2331
+ "readyAt",
2332
+ "deletedAt"
2333
+ ],
2334
+ "type": "object"
2335
+ },
2336
+ "SnapshotStatus": {
2337
+ "enum": ["saving", "ready", "failed", "deleted"],
2338
+ "type": "string"
2339
+ },
2340
+ "UiSessionLaunch": {
2341
+ "properties": {
2342
+ "actorId": {
2343
+ "type": "string"
2344
+ },
2345
+ "appName": {
2346
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
2347
+ "type": "string"
2348
+ },
2349
+ "entryPath": {
2350
+ "type": "string"
2351
+ },
2352
+ "environmentId": {
2353
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2354
+ "type": "string"
2355
+ },
2356
+ "exchangeUrl": {
2357
+ "type": "string"
2358
+ },
2359
+ "expiresAt": {
2360
+ "format": "date-time",
2361
+ "type": "string"
2362
+ },
2363
+ "grant": {
2364
+ "type": "string"
2365
+ },
2366
+ "grantExpiresAt": {
2367
+ "format": "date-time",
2368
+ "type": "string"
2369
+ },
2370
+ "mode": {
1643
2371
  "$ref": "#/components/schemas/UiSessionMode"
1644
2372
  },
1645
2373
  "origin": {
@@ -1699,6 +2427,7 @@
1699
2427
  "Version": {
1700
2428
  "properties": {
1701
2429
  "actors": {
2430
+ "description": "The seed's users, for display. Credentials can act as any user who can sign in to the running app. `GET /v1/environments/{environmentId}/apps/{appName}/actors` lists them.",
1702
2431
  "items": {
1703
2432
  "$ref": "#/components/schemas/Actor"
1704
2433
  },
@@ -1971,10 +2700,716 @@
1971
2700
  },
1972
2701
  {
1973
2702
  "in": "query",
1974
- "name": "cursor",
2703
+ "name": "cursor",
2704
+ "required": false,
2705
+ "schema": {
2706
+ "maxLength": 2048,
2707
+ "type": "string"
2708
+ }
2709
+ }
2710
+ ],
2711
+ "responses": {
2712
+ "200": {
2713
+ "content": {
2714
+ "application/json": {
2715
+ "schema": {
2716
+ "properties": {
2717
+ "data": {
2718
+ "items": {
2719
+ "$ref": "#/components/schemas/Version"
2720
+ },
2721
+ "type": "array"
2722
+ },
2723
+ "nextCursor": {
2724
+ "type": ["string", "null"]
2725
+ }
2726
+ },
2727
+ "required": ["data", "nextCursor"],
2728
+ "type": "object"
2729
+ }
2730
+ }
2731
+ },
2732
+ "description": "The app's published versions, newest first"
2733
+ },
2734
+ "400": {
2735
+ "content": {
2736
+ "application/json": {
2737
+ "schema": {
2738
+ "$ref": "#/components/schemas/Error"
2739
+ }
2740
+ }
2741
+ },
2742
+ "description": "Invalid request"
2743
+ },
2744
+ "401": {
2745
+ "content": {
2746
+ "application/json": {
2747
+ "schema": {
2748
+ "$ref": "#/components/schemas/Error"
2749
+ }
2750
+ }
2751
+ },
2752
+ "description": "Authentication required"
2753
+ },
2754
+ "403": {
2755
+ "content": {
2756
+ "application/json": {
2757
+ "schema": {
2758
+ "$ref": "#/components/schemas/Error"
2759
+ }
2760
+ }
2761
+ },
2762
+ "description": "Permission denied"
2763
+ },
2764
+ "404": {
2765
+ "content": {
2766
+ "application/json": {
2767
+ "schema": {
2768
+ "$ref": "#/components/schemas/Error"
2769
+ }
2770
+ }
2771
+ },
2772
+ "description": "Resource not found"
2773
+ },
2774
+ "409": {
2775
+ "content": {
2776
+ "application/json": {
2777
+ "schema": {
2778
+ "$ref": "#/components/schemas/Error"
2779
+ }
2780
+ }
2781
+ },
2782
+ "description": "Conflicting request"
2783
+ },
2784
+ "413": {
2785
+ "content": {
2786
+ "application/json": {
2787
+ "schema": {
2788
+ "$ref": "#/components/schemas/Error"
2789
+ }
2790
+ }
2791
+ },
2792
+ "description": "Request body too large"
2793
+ },
2794
+ "422": {
2795
+ "content": {
2796
+ "application/json": {
2797
+ "schema": {
2798
+ "$ref": "#/components/schemas/Error"
2799
+ }
2800
+ }
2801
+ },
2802
+ "description": "Version unavailable"
2803
+ },
2804
+ "429": {
2805
+ "content": {
2806
+ "application/json": {
2807
+ "schema": {
2808
+ "$ref": "#/components/schemas/Error"
2809
+ }
2810
+ }
2811
+ },
2812
+ "description": "Limit reached"
2813
+ },
2814
+ "500": {
2815
+ "content": {
2816
+ "application/json": {
2817
+ "schema": {
2818
+ "$ref": "#/components/schemas/Error"
2819
+ }
2820
+ }
2821
+ },
2822
+ "description": "Unexpected failure"
2823
+ },
2824
+ "503": {
2825
+ "content": {
2826
+ "application/json": {
2827
+ "schema": {
2828
+ "$ref": "#/components/schemas/Error"
2829
+ }
2830
+ }
2831
+ },
2832
+ "description": "Dependency unavailable"
2833
+ }
2834
+ },
2835
+ "security": [
2836
+ {
2837
+ "bearerAuth": []
2838
+ }
2839
+ ]
2840
+ }
2841
+ },
2842
+ "/v1/audit-events": {
2843
+ "get": {
2844
+ "operationId": "listAuditEvents",
2845
+ "parameters": [
2846
+ {
2847
+ "in": "query",
2848
+ "name": "limit",
2849
+ "required": false,
2850
+ "schema": {
2851
+ "default": 50,
2852
+ "maximum": 100,
2853
+ "minimum": 1,
2854
+ "type": "integer"
2855
+ }
2856
+ },
2857
+ {
2858
+ "in": "query",
2859
+ "name": "cursor",
2860
+ "required": false,
2861
+ "schema": {
2862
+ "maxLength": 2048,
2863
+ "type": "string"
2864
+ }
2865
+ },
2866
+ {
2867
+ "in": "query",
2868
+ "name": "workspaceId",
2869
+ "required": false,
2870
+ "schema": {
2871
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2872
+ "type": "string"
2873
+ }
2874
+ },
2875
+ {
2876
+ "in": "query",
2877
+ "name": "environmentId",
2878
+ "required": false,
2879
+ "schema": {
2880
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2881
+ "type": "string"
2882
+ }
2883
+ }
2884
+ ],
2885
+ "responses": {
2886
+ "200": {
2887
+ "content": {
2888
+ "application/json": {
2889
+ "schema": {
2890
+ "properties": {
2891
+ "data": {
2892
+ "items": {
2893
+ "$ref": "#/components/schemas/AuditEvent"
2894
+ },
2895
+ "type": "array"
2896
+ },
2897
+ "nextCursor": {
2898
+ "type": ["string", "null"]
2899
+ }
2900
+ },
2901
+ "required": ["data", "nextCursor"],
2902
+ "type": "object"
2903
+ }
2904
+ }
2905
+ },
2906
+ "description": "A workspace's or an environment's audit events, newest first"
2907
+ },
2908
+ "400": {
2909
+ "content": {
2910
+ "application/json": {
2911
+ "schema": {
2912
+ "$ref": "#/components/schemas/Error"
2913
+ }
2914
+ }
2915
+ },
2916
+ "description": "Invalid request"
2917
+ },
2918
+ "401": {
2919
+ "content": {
2920
+ "application/json": {
2921
+ "schema": {
2922
+ "$ref": "#/components/schemas/Error"
2923
+ }
2924
+ }
2925
+ },
2926
+ "description": "Authentication required"
2927
+ },
2928
+ "403": {
2929
+ "content": {
2930
+ "application/json": {
2931
+ "schema": {
2932
+ "$ref": "#/components/schemas/Error"
2933
+ }
2934
+ }
2935
+ },
2936
+ "description": "Permission denied"
2937
+ },
2938
+ "404": {
2939
+ "content": {
2940
+ "application/json": {
2941
+ "schema": {
2942
+ "$ref": "#/components/schemas/Error"
2943
+ }
2944
+ }
2945
+ },
2946
+ "description": "Resource not found"
2947
+ },
2948
+ "409": {
2949
+ "content": {
2950
+ "application/json": {
2951
+ "schema": {
2952
+ "$ref": "#/components/schemas/Error"
2953
+ }
2954
+ }
2955
+ },
2956
+ "description": "Conflicting request"
2957
+ },
2958
+ "413": {
2959
+ "content": {
2960
+ "application/json": {
2961
+ "schema": {
2962
+ "$ref": "#/components/schemas/Error"
2963
+ }
2964
+ }
2965
+ },
2966
+ "description": "Request body too large"
2967
+ },
2968
+ "422": {
2969
+ "content": {
2970
+ "application/json": {
2971
+ "schema": {
2972
+ "$ref": "#/components/schemas/Error"
2973
+ }
2974
+ }
2975
+ },
2976
+ "description": "Version unavailable"
2977
+ },
2978
+ "429": {
2979
+ "content": {
2980
+ "application/json": {
2981
+ "schema": {
2982
+ "$ref": "#/components/schemas/Error"
2983
+ }
2984
+ }
2985
+ },
2986
+ "description": "Limit reached"
2987
+ },
2988
+ "500": {
2989
+ "content": {
2990
+ "application/json": {
2991
+ "schema": {
2992
+ "$ref": "#/components/schemas/Error"
2993
+ }
2994
+ }
2995
+ },
2996
+ "description": "Unexpected failure"
2997
+ },
2998
+ "503": {
2999
+ "content": {
3000
+ "application/json": {
3001
+ "schema": {
3002
+ "$ref": "#/components/schemas/Error"
3003
+ }
3004
+ }
3005
+ },
3006
+ "description": "Dependency unavailable"
3007
+ }
3008
+ },
3009
+ "security": [
3010
+ {
3011
+ "bearerAuth": []
3012
+ }
3013
+ ]
3014
+ }
3015
+ },
3016
+ "/v1/environments": {
3017
+ "get": {
3018
+ "operationId": "listEnvironments",
3019
+ "parameters": [
3020
+ {
3021
+ "in": "query",
3022
+ "name": "limit",
3023
+ "required": false,
3024
+ "schema": {
3025
+ "default": 50,
3026
+ "maximum": 100,
3027
+ "minimum": 1,
3028
+ "type": "integer"
3029
+ }
3030
+ },
3031
+ {
3032
+ "in": "query",
3033
+ "name": "cursor",
3034
+ "required": false,
3035
+ "schema": {
3036
+ "maxLength": 2048,
3037
+ "type": "string"
3038
+ }
3039
+ },
3040
+ {
3041
+ "in": "query",
3042
+ "name": "workspaceId",
3043
+ "required": false,
3044
+ "schema": {
3045
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3046
+ "type": "string"
3047
+ }
3048
+ },
3049
+ {
3050
+ "in": "query",
3051
+ "name": "status",
3052
+ "required": false,
3053
+ "schema": {
3054
+ "items": {
3055
+ "$ref": "#/components/schemas/EnvironmentStatus"
3056
+ },
3057
+ "maxItems": 5,
3058
+ "type": "array"
3059
+ }
3060
+ },
3061
+ {
3062
+ "in": "query",
3063
+ "name": "appId",
3064
+ "required": false,
3065
+ "schema": {
3066
+ "items": {
3067
+ "pattern": "^[a-z][a-z0-9-]{1,39}$",
3068
+ "type": "string"
3069
+ },
3070
+ "maxItems": 20,
3071
+ "type": "array"
3072
+ }
3073
+ },
3074
+ {
3075
+ "in": "query",
3076
+ "name": "createdBy",
3077
+ "required": false,
3078
+ "schema": {
3079
+ "items": {
3080
+ "pattern": "^(user_[0-9A-Za-z]+|key_[0-9a-z]{16})$",
3081
+ "type": "string"
3082
+ },
3083
+ "maxItems": 50,
3084
+ "type": "array"
3085
+ }
3086
+ },
3087
+ {
3088
+ "in": "query",
3089
+ "name": "snapshotId",
3090
+ "required": false,
3091
+ "schema": {
3092
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3093
+ "type": "string"
3094
+ }
3095
+ },
3096
+ {
3097
+ "in": "query",
3098
+ "name": "search",
3099
+ "required": false,
3100
+ "schema": {
3101
+ "maxLength": 120,
3102
+ "type": "string"
3103
+ }
3104
+ },
3105
+ {
3106
+ "in": "query",
3107
+ "name": "label",
3108
+ "required": false,
3109
+ "schema": {
3110
+ "items": {
3111
+ "pattern": "^[^=]+=.*$",
3112
+ "type": "string"
3113
+ },
3114
+ "maxItems": 32,
3115
+ "type": "array"
3116
+ }
3117
+ }
3118
+ ],
3119
+ "responses": {
3120
+ "200": {
3121
+ "content": {
3122
+ "application/json": {
3123
+ "schema": {
3124
+ "properties": {
3125
+ "data": {
3126
+ "items": {
3127
+ "$ref": "#/components/schemas/Environment"
3128
+ },
3129
+ "type": "array"
3130
+ },
3131
+ "nextCursor": {
3132
+ "type": ["string", "null"]
3133
+ }
3134
+ },
3135
+ "required": ["data", "nextCursor"],
3136
+ "type": "object"
3137
+ }
3138
+ }
3139
+ },
3140
+ "description": "The workspace's environments, newest created first"
3141
+ },
3142
+ "400": {
3143
+ "content": {
3144
+ "application/json": {
3145
+ "schema": {
3146
+ "$ref": "#/components/schemas/Error"
3147
+ }
3148
+ }
3149
+ },
3150
+ "description": "Invalid request"
3151
+ },
3152
+ "401": {
3153
+ "content": {
3154
+ "application/json": {
3155
+ "schema": {
3156
+ "$ref": "#/components/schemas/Error"
3157
+ }
3158
+ }
3159
+ },
3160
+ "description": "Authentication required"
3161
+ },
3162
+ "403": {
3163
+ "content": {
3164
+ "application/json": {
3165
+ "schema": {
3166
+ "$ref": "#/components/schemas/Error"
3167
+ }
3168
+ }
3169
+ },
3170
+ "description": "Permission denied"
3171
+ },
3172
+ "404": {
3173
+ "content": {
3174
+ "application/json": {
3175
+ "schema": {
3176
+ "$ref": "#/components/schemas/Error"
3177
+ }
3178
+ }
3179
+ },
3180
+ "description": "Resource not found"
3181
+ },
3182
+ "409": {
3183
+ "content": {
3184
+ "application/json": {
3185
+ "schema": {
3186
+ "$ref": "#/components/schemas/Error"
3187
+ }
3188
+ }
3189
+ },
3190
+ "description": "Conflicting request"
3191
+ },
3192
+ "413": {
3193
+ "content": {
3194
+ "application/json": {
3195
+ "schema": {
3196
+ "$ref": "#/components/schemas/Error"
3197
+ }
3198
+ }
3199
+ },
3200
+ "description": "Request body too large"
3201
+ },
3202
+ "422": {
3203
+ "content": {
3204
+ "application/json": {
3205
+ "schema": {
3206
+ "$ref": "#/components/schemas/Error"
3207
+ }
3208
+ }
3209
+ },
3210
+ "description": "Version unavailable"
3211
+ },
3212
+ "429": {
3213
+ "content": {
3214
+ "application/json": {
3215
+ "schema": {
3216
+ "$ref": "#/components/schemas/Error"
3217
+ }
3218
+ }
3219
+ },
3220
+ "description": "Limit reached"
3221
+ },
3222
+ "500": {
3223
+ "content": {
3224
+ "application/json": {
3225
+ "schema": {
3226
+ "$ref": "#/components/schemas/Error"
3227
+ }
3228
+ }
3229
+ },
3230
+ "description": "Unexpected failure"
3231
+ },
3232
+ "503": {
3233
+ "content": {
3234
+ "application/json": {
3235
+ "schema": {
3236
+ "$ref": "#/components/schemas/Error"
3237
+ }
3238
+ }
3239
+ },
3240
+ "description": "Dependency unavailable"
3241
+ }
3242
+ },
3243
+ "security": [
3244
+ {
3245
+ "bearerAuth": []
3246
+ }
3247
+ ]
3248
+ },
3249
+ "post": {
3250
+ "operationId": "createEnvironment",
3251
+ "parameters": [
3252
+ {
3253
+ "in": "header",
3254
+ "name": "idempotency-key",
3255
+ "required": false,
3256
+ "schema": {
3257
+ "maxLength": 128,
3258
+ "minLength": 8,
3259
+ "pattern": "^[A-Za-z0-9._:-]+$",
3260
+ "type": "string"
3261
+ }
3262
+ }
3263
+ ],
3264
+ "requestBody": {
3265
+ "content": {
3266
+ "application/json": {
3267
+ "schema": {
3268
+ "$ref": "#/components/schemas/CreateEnvironment"
3269
+ }
3270
+ }
3271
+ },
3272
+ "required": true
3273
+ },
3274
+ "responses": {
3275
+ "200": {
3276
+ "content": {
3277
+ "application/json": {
3278
+ "schema": {
3279
+ "$ref": "#/components/schemas/Environment"
3280
+ }
3281
+ }
3282
+ },
3283
+ "description": "The environment an earlier request with this Idempotency-Key created, as it is now"
3284
+ },
3285
+ "202": {
3286
+ "content": {
3287
+ "application/json": {
3288
+ "schema": {
3289
+ "$ref": "#/components/schemas/Environment"
3290
+ }
3291
+ }
3292
+ },
3293
+ "description": "Environment starting"
3294
+ },
3295
+ "400": {
3296
+ "content": {
3297
+ "application/json": {
3298
+ "schema": {
3299
+ "$ref": "#/components/schemas/Error"
3300
+ }
3301
+ }
3302
+ },
3303
+ "description": "Invalid request"
3304
+ },
3305
+ "401": {
3306
+ "content": {
3307
+ "application/json": {
3308
+ "schema": {
3309
+ "$ref": "#/components/schemas/Error"
3310
+ }
3311
+ }
3312
+ },
3313
+ "description": "Authentication required"
3314
+ },
3315
+ "403": {
3316
+ "content": {
3317
+ "application/json": {
3318
+ "schema": {
3319
+ "$ref": "#/components/schemas/Error"
3320
+ }
3321
+ }
3322
+ },
3323
+ "description": "Permission denied"
3324
+ },
3325
+ "404": {
3326
+ "content": {
3327
+ "application/json": {
3328
+ "schema": {
3329
+ "$ref": "#/components/schemas/Error"
3330
+ }
3331
+ }
3332
+ },
3333
+ "description": "Resource not found"
3334
+ },
3335
+ "409": {
3336
+ "content": {
3337
+ "application/json": {
3338
+ "schema": {
3339
+ "$ref": "#/components/schemas/Error"
3340
+ }
3341
+ }
3342
+ },
3343
+ "description": "Conflicting request"
3344
+ },
3345
+ "413": {
3346
+ "content": {
3347
+ "application/json": {
3348
+ "schema": {
3349
+ "$ref": "#/components/schemas/Error"
3350
+ }
3351
+ }
3352
+ },
3353
+ "description": "Request body too large"
3354
+ },
3355
+ "422": {
3356
+ "content": {
3357
+ "application/json": {
3358
+ "schema": {
3359
+ "$ref": "#/components/schemas/Error"
3360
+ }
3361
+ }
3362
+ },
3363
+ "description": "Version unavailable"
3364
+ },
3365
+ "429": {
3366
+ "content": {
3367
+ "application/json": {
3368
+ "schema": {
3369
+ "$ref": "#/components/schemas/Error"
3370
+ }
3371
+ }
3372
+ },
3373
+ "description": "Limit reached"
3374
+ },
3375
+ "500": {
3376
+ "content": {
3377
+ "application/json": {
3378
+ "schema": {
3379
+ "$ref": "#/components/schemas/Error"
3380
+ }
3381
+ }
3382
+ },
3383
+ "description": "Unexpected failure"
3384
+ },
3385
+ "503": {
3386
+ "content": {
3387
+ "application/json": {
3388
+ "schema": {
3389
+ "$ref": "#/components/schemas/Error"
3390
+ }
3391
+ }
3392
+ },
3393
+ "description": "Dependency unavailable"
3394
+ }
3395
+ },
3396
+ "security": [
3397
+ {
3398
+ "bearerAuth": []
3399
+ }
3400
+ ]
3401
+ }
3402
+ },
3403
+ "/v1/environments/creators": {
3404
+ "get": {
3405
+ "operationId": "listEnvironmentCreators",
3406
+ "parameters": [
3407
+ {
3408
+ "in": "query",
3409
+ "name": "workspaceId",
1975
3410
  "required": false,
1976
3411
  "schema": {
1977
- "maxLength": 2048,
3412
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
1978
3413
  "type": "string"
1979
3414
  }
1980
3415
  }
@@ -1987,20 +3422,17 @@
1987
3422
  "properties": {
1988
3423
  "data": {
1989
3424
  "items": {
1990
- "$ref": "#/components/schemas/Version"
3425
+ "$ref": "#/components/schemas/Principal"
1991
3426
  },
1992
3427
  "type": "array"
1993
- },
1994
- "nextCursor": {
1995
- "type": ["string", "null"]
1996
3428
  }
1997
3429
  },
1998
- "required": ["data", "nextCursor"],
3430
+ "required": ["data"],
1999
3431
  "type": "object"
2000
3432
  }
2001
3433
  }
2002
3434
  },
2003
- "description": "The app's published versions, newest first"
3435
+ "description": "Each principal that created an environment in the workspace, by name"
2004
3436
  },
2005
3437
  "400": {
2006
3438
  "content": {
@@ -2110,45 +3542,27 @@
2110
3542
  ]
2111
3543
  }
2112
3544
  },
2113
- "/v1/audit-events": {
2114
- "get": {
2115
- "operationId": "listAuditEvents",
3545
+ "/v1/environments/{environmentId}": {
3546
+ "delete": {
3547
+ "operationId": "deleteEnvironment",
2116
3548
  "parameters": [
2117
3549
  {
2118
- "in": "query",
2119
- "name": "limit",
2120
- "required": false,
2121
- "schema": {
2122
- "default": 50,
2123
- "maximum": 100,
2124
- "minimum": 1,
2125
- "type": "integer"
2126
- }
2127
- },
2128
- {
2129
- "in": "query",
2130
- "name": "cursor",
2131
- "required": false,
2132
- "schema": {
2133
- "maxLength": 2048,
2134
- "type": "string"
2135
- }
2136
- },
2137
- {
2138
- "in": "query",
2139
- "name": "workspaceId",
2140
- "required": false,
3550
+ "in": "path",
3551
+ "name": "environmentId",
3552
+ "required": true,
2141
3553
  "schema": {
2142
3554
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2143
3555
  "type": "string"
2144
3556
  }
2145
3557
  },
2146
3558
  {
2147
- "in": "query",
2148
- "name": "environmentId",
3559
+ "in": "header",
3560
+ "name": "idempotency-key",
2149
3561
  "required": false,
2150
3562
  "schema": {
2151
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3563
+ "maxLength": 128,
3564
+ "minLength": 8,
3565
+ "pattern": "^[A-Za-z0-9._:-]+$",
2152
3566
  "type": "string"
2153
3567
  }
2154
3568
  }
@@ -2158,23 +3572,11 @@
2158
3572
  "content": {
2159
3573
  "application/json": {
2160
3574
  "schema": {
2161
- "properties": {
2162
- "data": {
2163
- "items": {
2164
- "$ref": "#/components/schemas/AuditEvent"
2165
- },
2166
- "type": "array"
2167
- },
2168
- "nextCursor": {
2169
- "type": ["string", "null"]
2170
- }
2171
- },
2172
- "required": ["data", "nextCursor"],
2173
- "type": "object"
3575
+ "$ref": "#/components/schemas/Environment"
2174
3576
  }
2175
3577
  }
2176
3578
  },
2177
- "description": "A workspace's or an environment's audit events, newest first"
3579
+ "description": "Environment deleted; compute and data are released after the response"
2178
3580
  },
2179
3581
  "400": {
2180
3582
  "content": {
@@ -2282,109 +3684,18 @@
2282
3684
  "bearerAuth": []
2283
3685
  }
2284
3686
  ]
2285
- }
2286
- },
2287
- "/v1/environments": {
3687
+ },
2288
3688
  "get": {
2289
- "operationId": "listEnvironments",
3689
+ "operationId": "getEnvironment",
2290
3690
  "parameters": [
2291
3691
  {
2292
- "in": "query",
2293
- "name": "limit",
2294
- "required": false,
2295
- "schema": {
2296
- "default": 50,
2297
- "maximum": 100,
2298
- "minimum": 1,
2299
- "type": "integer"
2300
- }
2301
- },
2302
- {
2303
- "in": "query",
2304
- "name": "cursor",
2305
- "required": false,
2306
- "schema": {
2307
- "maxLength": 2048,
2308
- "type": "string"
2309
- }
2310
- },
2311
- {
2312
- "in": "query",
2313
- "name": "workspaceId",
2314
- "required": false,
2315
- "schema": {
2316
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2317
- "type": "string"
2318
- }
2319
- },
2320
- {
2321
- "in": "query",
2322
- "name": "status",
2323
- "required": false,
2324
- "schema": {
2325
- "items": {
2326
- "$ref": "#/components/schemas/EnvironmentStatus"
2327
- },
2328
- "maxItems": 5,
2329
- "type": "array"
2330
- }
2331
- },
2332
- {
2333
- "in": "query",
2334
- "name": "appId",
2335
- "required": false,
2336
- "schema": {
2337
- "items": {
2338
- "pattern": "^[a-z][a-z0-9-]{1,39}$",
2339
- "type": "string"
2340
- },
2341
- "maxItems": 20,
2342
- "type": "array"
2343
- }
2344
- },
2345
- {
2346
- "in": "query",
2347
- "name": "createdBy",
2348
- "required": false,
2349
- "schema": {
2350
- "items": {
2351
- "pattern": "^(user_[0-9A-Za-z]+|key_[0-9a-z]{16})$",
2352
- "type": "string"
2353
- },
2354
- "maxItems": 50,
2355
- "type": "array"
2356
- }
2357
- },
2358
- {
2359
- "in": "query",
2360
- "name": "snapshotId",
2361
- "required": false,
3692
+ "in": "path",
3693
+ "name": "environmentId",
3694
+ "required": true,
2362
3695
  "schema": {
2363
3696
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2364
3697
  "type": "string"
2365
3698
  }
2366
- },
2367
- {
2368
- "in": "query",
2369
- "name": "search",
2370
- "required": false,
2371
- "schema": {
2372
- "maxLength": 120,
2373
- "type": "string"
2374
- }
2375
- },
2376
- {
2377
- "in": "query",
2378
- "name": "label",
2379
- "required": false,
2380
- "schema": {
2381
- "items": {
2382
- "pattern": "^[^=]+=.*$",
2383
- "type": "string"
2384
- },
2385
- "maxItems": 32,
2386
- "type": "array"
2387
- }
2388
3699
  }
2389
3700
  ],
2390
3701
  "responses": {
@@ -2392,23 +3703,11 @@
2392
3703
  "content": {
2393
3704
  "application/json": {
2394
3705
  "schema": {
2395
- "properties": {
2396
- "data": {
2397
- "items": {
2398
- "$ref": "#/components/schemas/Environment"
2399
- },
2400
- "type": "array"
2401
- },
2402
- "nextCursor": {
2403
- "type": ["string", "null"]
2404
- }
2405
- },
2406
- "required": ["data", "nextCursor"],
2407
- "type": "object"
3706
+ "$ref": "#/components/schemas/Environment"
2408
3707
  }
2409
3708
  }
2410
3709
  },
2411
- "description": "The workspace's environments, newest created first"
3710
+ "description": "Environment"
2412
3711
  },
2413
3712
  "400": {
2414
3713
  "content": {
@@ -2517,17 +3816,15 @@
2517
3816
  }
2518
3817
  ]
2519
3818
  },
2520
- "post": {
2521
- "operationId": "createEnvironment",
3819
+ "patch": {
3820
+ "operationId": "updateEnvironment",
2522
3821
  "parameters": [
2523
3822
  {
2524
- "in": "header",
2525
- "name": "idempotency-key",
2526
- "required": false,
3823
+ "in": "path",
3824
+ "name": "environmentId",
3825
+ "required": true,
2527
3826
  "schema": {
2528
- "maxLength": 128,
2529
- "minLength": 8,
2530
- "pattern": "^[A-Za-z0-9._:-]+$",
3827
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2531
3828
  "type": "string"
2532
3829
  }
2533
3830
  }
@@ -2536,7 +3833,21 @@
2536
3833
  "content": {
2537
3834
  "application/json": {
2538
3835
  "schema": {
2539
- "$ref": "#/components/schemas/CreateEnvironment"
3836
+ "properties": {
3837
+ "labels": {
3838
+ "additionalProperties": {
3839
+ "maxLength": 256,
3840
+ "type": "string"
3841
+ },
3842
+ "type": "object"
3843
+ },
3844
+ "name": {
3845
+ "maxLength": 120,
3846
+ "minLength": 1,
3847
+ "type": ["string", "null"]
3848
+ }
3849
+ },
3850
+ "type": "object"
2540
3851
  }
2541
3852
  }
2542
3853
  },
@@ -2551,17 +3862,7 @@
2551
3862
  }
2552
3863
  }
2553
3864
  },
2554
- "description": "The environment an earlier request with this Idempotency-Key created, as it is now"
2555
- },
2556
- "202": {
2557
- "content": {
2558
- "application/json": {
2559
- "schema": {
2560
- "$ref": "#/components/schemas/Environment"
2561
- }
2562
- }
2563
- },
2564
- "description": "Environment starting"
3865
+ "description": "Environment updated"
2565
3866
  },
2566
3867
  "400": {
2567
3868
  "content": {
@@ -2666,21 +3967,60 @@
2666
3967
  },
2667
3968
  "security": [
2668
3969
  {
2669
- "bearerAuth": []
2670
- }
2671
- ]
2672
- }
2673
- },
2674
- "/v1/environments/creators": {
2675
- "get": {
2676
- "operationId": "listEnvironmentCreators",
2677
- "parameters": [
3970
+ "bearerAuth": []
3971
+ }
3972
+ ]
3973
+ }
3974
+ },
3975
+ "/v1/environments/{environmentId}/apps/{appName}/actors": {
3976
+ "get": {
3977
+ "operationId": "listActors",
3978
+ "parameters": [
3979
+ {
3980
+ "in": "path",
3981
+ "name": "environmentId",
3982
+ "required": true,
3983
+ "schema": {
3984
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3985
+ "type": "string"
3986
+ }
3987
+ },
3988
+ {
3989
+ "in": "path",
3990
+ "name": "appName",
3991
+ "required": true,
3992
+ "schema": {
3993
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
3994
+ "type": "string"
3995
+ }
3996
+ },
3997
+ {
3998
+ "in": "query",
3999
+ "name": "limit",
4000
+ "required": false,
4001
+ "schema": {
4002
+ "default": 50,
4003
+ "maximum": 100,
4004
+ "minimum": 1,
4005
+ "type": "integer"
4006
+ }
4007
+ },
4008
+ {
4009
+ "in": "query",
4010
+ "name": "cursor",
4011
+ "required": false,
4012
+ "schema": {
4013
+ "maxLength": 2048,
4014
+ "minLength": 1,
4015
+ "type": "string"
4016
+ }
4017
+ },
2678
4018
  {
2679
4019
  "in": "query",
2680
- "name": "workspaceId",
4020
+ "name": "search",
2681
4021
  "required": false,
2682
4022
  "schema": {
2683
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4023
+ "maxLength": 320,
2684
4024
  "type": "string"
2685
4025
  }
2686
4026
  }
@@ -2693,17 +4033,20 @@
2693
4033
  "properties": {
2694
4034
  "data": {
2695
4035
  "items": {
2696
- "$ref": "#/components/schemas/Principal"
4036
+ "$ref": "#/components/schemas/AppUser"
2697
4037
  },
2698
4038
  "type": "array"
4039
+ },
4040
+ "nextCursor": {
4041
+ "type": ["string", "null"]
2699
4042
  }
2700
4043
  },
2701
- "required": ["data"],
4044
+ "required": ["data", "nextCursor"],
2702
4045
  "type": "object"
2703
4046
  }
2704
4047
  }
2705
4048
  },
2706
- "description": "Each principal that created an environment in the workspace, by name"
4049
+ "description": "The users who can act in one app of a running environment, the default user first, as the app answers them"
2707
4050
  },
2708
4051
  "400": {
2709
4052
  "content": {
@@ -2813,9 +4156,9 @@
2813
4156
  ]
2814
4157
  }
2815
4158
  },
2816
- "/v1/environments/{environmentId}": {
2817
- "delete": {
2818
- "operationId": "deleteEnvironment",
4159
+ "/v1/environments/{environmentId}/apps/{appName}/credentials": {
4160
+ "post": {
4161
+ "operationId": "createCredentials",
2819
4162
  "parameters": [
2820
4163
  {
2821
4164
  "in": "path",
@@ -2827,27 +4170,56 @@
2827
4170
  }
2828
4171
  },
2829
4172
  {
2830
- "in": "header",
2831
- "name": "idempotency-key",
2832
- "required": false,
4173
+ "in": "path",
4174
+ "name": "appName",
4175
+ "required": true,
2833
4176
  "schema": {
2834
- "maxLength": 128,
2835
- "minLength": 8,
2836
- "pattern": "^[A-Za-z0-9._:-]+$",
4177
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
2837
4178
  "type": "string"
2838
4179
  }
2839
4180
  }
2840
4181
  ],
4182
+ "requestBody": {
4183
+ "content": {
4184
+ "application/json": {
4185
+ "schema": {
4186
+ "properties": {
4187
+ "actorId": {
4188
+ "deprecated": true,
4189
+ "description": "The old name of `as`. It takes the same values.",
4190
+ "maxLength": 320,
4191
+ "type": "string"
4192
+ },
4193
+ "as": {
4194
+ "description": "The user to act as: an email, a username or an ID of a user of the app. Without it, the call acts as the app's default user.",
4195
+ "maxLength": 320,
4196
+ "type": "string"
4197
+ },
4198
+ "services": {
4199
+ "items": {
4200
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4201
+ "type": "string"
4202
+ },
4203
+ "maxItems": 20,
4204
+ "type": "array"
4205
+ }
4206
+ },
4207
+ "type": "object"
4208
+ }
4209
+ }
4210
+ },
4211
+ "required": false
4212
+ },
2841
4213
  "responses": {
2842
4214
  "200": {
2843
4215
  "content": {
2844
4216
  "application/json": {
2845
4217
  "schema": {
2846
- "$ref": "#/components/schemas/Environment"
4218
+ "$ref": "#/components/schemas/Credentials"
2847
4219
  }
2848
4220
  }
2849
4221
  },
2850
- "description": "Environment deleted; compute and data are released after the response"
4222
+ "description": "How to call one app as one actor; the same tokens each time"
2851
4223
  },
2852
4224
  "400": {
2853
4225
  "content": {
@@ -2955,9 +4327,12 @@
2955
4327
  "bearerAuth": []
2956
4328
  }
2957
4329
  ]
2958
- },
2959
- "get": {
2960
- "operationId": "getEnvironment",
4330
+ }
4331
+ },
4332
+ "/v1/environments/{environmentId}/apps/{appName}/ui-sessions": {
4333
+ "post": {
4334
+ "description": "Launches a browser session of one actor in an app's UI. The answer holds a one-use grant and no reusable credential. Return it only to the browser of the user it is for, which posts the grant to `exchangeUrl` from `launcherOrigin`.",
4335
+ "operationId": "launchUiSession",
2961
4336
  "parameters": [
2962
4337
  {
2963
4338
  "in": "path",
@@ -2967,18 +4342,37 @@
2967
4342
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2968
4343
  "type": "string"
2969
4344
  }
4345
+ },
4346
+ {
4347
+ "in": "path",
4348
+ "name": "appName",
4349
+ "required": true,
4350
+ "schema": {
4351
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4352
+ "type": "string"
4353
+ }
2970
4354
  }
2971
4355
  ],
4356
+ "requestBody": {
4357
+ "content": {
4358
+ "application/json": {
4359
+ "schema": {
4360
+ "$ref": "#/components/schemas/LaunchUiSession"
4361
+ }
4362
+ }
4363
+ },
4364
+ "required": true
4365
+ },
2972
4366
  "responses": {
2973
- "200": {
4367
+ "201": {
2974
4368
  "content": {
2975
4369
  "application/json": {
2976
4370
  "schema": {
2977
- "$ref": "#/components/schemas/Environment"
4371
+ "$ref": "#/components/schemas/UiSessionLaunch"
2978
4372
  }
2979
4373
  }
2980
4374
  },
2981
- "description": "Environment"
4375
+ "description": "A pending session and its one-use grant"
2982
4376
  },
2983
4377
  "400": {
2984
4378
  "content": {
@@ -3086,9 +4480,12 @@
3086
4480
  "bearerAuth": []
3087
4481
  }
3088
4482
  ]
3089
- },
3090
- "patch": {
3091
- "operationId": "updateEnvironment",
4483
+ }
4484
+ },
4485
+ "/v1/environments/{environmentId}/apps/{appName}/ui-sessions/{sessionId}": {
4486
+ "delete": {
4487
+ "description": "Revokes a browser session that the caller's own credential launched. Revoking again answers the same result. Another credential's session is not found.",
4488
+ "operationId": "revokeUiSession",
3092
4489
  "parameters": [
3093
4490
  {
3094
4491
  "in": "path",
@@ -3098,42 +4495,36 @@
3098
4495
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3099
4496
  "type": "string"
3100
4497
  }
3101
- }
3102
- ],
3103
- "requestBody": {
3104
- "content": {
3105
- "application/json": {
3106
- "schema": {
3107
- "properties": {
3108
- "labels": {
3109
- "additionalProperties": {
3110
- "maxLength": 256,
3111
- "type": "string"
3112
- },
3113
- "type": "object"
3114
- },
3115
- "name": {
3116
- "maxLength": 120,
3117
- "minLength": 1,
3118
- "type": ["string", "null"]
3119
- }
3120
- },
3121
- "type": "object"
3122
- }
4498
+ },
4499
+ {
4500
+ "in": "path",
4501
+ "name": "appName",
4502
+ "required": true,
4503
+ "schema": {
4504
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4505
+ "type": "string"
3123
4506
  }
3124
4507
  },
3125
- "required": true
3126
- },
4508
+ {
4509
+ "in": "path",
4510
+ "name": "sessionId",
4511
+ "required": true,
4512
+ "schema": {
4513
+ "pattern": "^uis_[0-9a-z]{26}$",
4514
+ "type": "string"
4515
+ }
4516
+ }
4517
+ ],
3127
4518
  "responses": {
3128
4519
  "200": {
3129
4520
  "content": {
3130
4521
  "application/json": {
3131
4522
  "schema": {
3132
- "$ref": "#/components/schemas/Environment"
4523
+ "$ref": "#/components/schemas/UiSessionRevocation"
3133
4524
  }
3134
4525
  }
3135
4526
  },
3136
- "description": "Environment updated"
4527
+ "description": "The session is revoked"
3137
4528
  },
3138
4529
  "400": {
3139
4530
  "content": {
@@ -3243,64 +4634,74 @@
3243
4634
  ]
3244
4635
  }
3245
4636
  },
3246
- "/v1/environments/{environmentId}/apps/{appName}/credentials": {
3247
- "post": {
3248
- "operationId": "createCredentials",
4637
+ "/v1/imports": {
4638
+ "get": {
4639
+ "operationId": "listImports",
3249
4640
  "parameters": [
3250
4641
  {
3251
- "in": "path",
3252
- "name": "environmentId",
3253
- "required": true,
4642
+ "in": "query",
4643
+ "name": "limit",
4644
+ "required": false,
3254
4645
  "schema": {
3255
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4646
+ "default": 50,
4647
+ "maximum": 100,
4648
+ "minimum": 1,
4649
+ "type": "integer"
4650
+ }
4651
+ },
4652
+ {
4653
+ "in": "query",
4654
+ "name": "cursor",
4655
+ "required": false,
4656
+ "schema": {
4657
+ "maxLength": 2048,
3256
4658
  "type": "string"
3257
4659
  }
3258
4660
  },
3259
4661
  {
3260
- "in": "path",
3261
- "name": "appName",
3262
- "required": true,
4662
+ "in": "query",
4663
+ "name": "workspaceId",
4664
+ "required": false,
3263
4665
  "schema": {
3264
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
4666
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3265
4667
  "type": "string"
3266
4668
  }
4669
+ },
4670
+ {
4671
+ "in": "query",
4672
+ "name": "status",
4673
+ "required": false,
4674
+ "schema": {
4675
+ "items": {
4676
+ "$ref": "#/components/schemas/ImportStatus"
4677
+ },
4678
+ "maxItems": 4,
4679
+ "type": "array"
4680
+ }
3267
4681
  }
3268
4682
  ],
3269
- "requestBody": {
3270
- "content": {
3271
- "application/json": {
3272
- "schema": {
3273
- "properties": {
3274
- "actorId": {
3275
- "maxLength": 255,
3276
- "minLength": 1,
3277
- "type": "string"
3278
- },
3279
- "services": {
3280
- "items": {
3281
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
3282
- "type": "string"
3283
- },
3284
- "maxItems": 20,
3285
- "type": "array"
3286
- }
3287
- },
3288
- "type": "object"
3289
- }
3290
- }
3291
- },
3292
- "required": false
3293
- },
3294
4683
  "responses": {
3295
4684
  "200": {
3296
4685
  "content": {
3297
4686
  "application/json": {
3298
4687
  "schema": {
3299
- "$ref": "#/components/schemas/Credentials"
4688
+ "properties": {
4689
+ "data": {
4690
+ "items": {
4691
+ "$ref": "#/components/schemas/Import"
4692
+ },
4693
+ "type": "array"
4694
+ },
4695
+ "nextCursor": {
4696
+ "type": ["string", "null"]
4697
+ }
4698
+ },
4699
+ "required": ["data", "nextCursor"],
4700
+ "type": "object"
3300
4701
  }
3301
4702
  }
3302
4703
  },
3303
- "description": "How to call one app as one actor; the same tokens each time"
4704
+ "description": "The workspace's imports, newest first"
3304
4705
  },
3305
4706
  "400": {
3306
4707
  "content": {
@@ -3408,28 +4809,18 @@
3408
4809
  "bearerAuth": []
3409
4810
  }
3410
4811
  ]
3411
- }
3412
- },
3413
- "/v1/environments/{environmentId}/apps/{appName}/ui-sessions": {
4812
+ },
3414
4813
  "post": {
3415
- "description": "Launches a browser session of one actor in an app's UI. The answer holds a one-use grant and no reusable credential. Return it only to the browser of the user it is for, which posts the grant to `exchangeUrl` from `launcherOrigin`.",
3416
- "operationId": "launchUiSession",
4814
+ "operationId": "createImport",
3417
4815
  "parameters": [
3418
4816
  {
3419
- "in": "path",
3420
- "name": "environmentId",
3421
- "required": true,
3422
- "schema": {
3423
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3424
- "type": "string"
3425
- }
3426
- },
3427
- {
3428
- "in": "path",
3429
- "name": "appName",
3430
- "required": true,
4817
+ "in": "header",
4818
+ "name": "idempotency-key",
4819
+ "required": false,
3431
4820
  "schema": {
3432
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
4821
+ "maxLength": 128,
4822
+ "minLength": 8,
4823
+ "pattern": "^[A-Za-z0-9._:-]+$",
3433
4824
  "type": "string"
3434
4825
  }
3435
4826
  }
@@ -3438,22 +4829,51 @@
3438
4829
  "content": {
3439
4830
  "application/json": {
3440
4831
  "schema": {
3441
- "$ref": "#/components/schemas/LaunchUiSession"
4832
+ "properties": {
4833
+ "digest": {
4834
+ "description": "`sha256:` and the lowercase hex SHA-256 of the zip file. The check refuses a zip file with another digest.",
4835
+ "pattern": "^sha256:[0-9a-f]{64}$",
4836
+ "type": "string"
4837
+ },
4838
+ "sizeBytes": {
4839
+ "description": "The size of the zip file in bytes. The upload URL takes exactly this many bytes.",
4840
+ "maximum": 67108864,
4841
+ "minimum": 1,
4842
+ "type": "integer"
4843
+ },
4844
+ "workspaceId": {
4845
+ "description": "The import's workspace. A member must send it. An API key's own workspace is the default.",
4846
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4847
+ "type": "string"
4848
+ }
4849
+ },
4850
+ "required": ["sizeBytes", "digest"],
4851
+ "type": "object"
3442
4852
  }
3443
4853
  }
3444
4854
  },
3445
4855
  "required": true
3446
4856
  },
3447
4857
  "responses": {
4858
+ "200": {
4859
+ "content": {
4860
+ "application/json": {
4861
+ "schema": {
4862
+ "$ref": "#/components/schemas/CreatedImport"
4863
+ }
4864
+ }
4865
+ },
4866
+ "description": "The import an earlier request with this Idempotency-Key created, as it is now, with a new upload URL while it is `uploading`"
4867
+ },
3448
4868
  "201": {
3449
4869
  "content": {
3450
4870
  "application/json": {
3451
4871
  "schema": {
3452
- "$ref": "#/components/schemas/UiSessionLaunch"
4872
+ "$ref": "#/components/schemas/CreatedImport"
3453
4873
  }
3454
4874
  }
3455
4875
  },
3456
- "description": "A pending session and its one-use grant"
4876
+ "description": "Import created; send its zip file to the upload URL, then complete it"
3457
4877
  },
3458
4878
  "400": {
3459
4879
  "content": {
@@ -3563,37 +4983,18 @@
3563
4983
  ]
3564
4984
  }
3565
4985
  },
3566
- "/v1/environments/{environmentId}/apps/{appName}/ui-sessions/{sessionId}": {
4986
+ "/v1/imports/{importId}": {
3567
4987
  "delete": {
3568
- "description": "Revokes a browser session that the caller's own credential launched. Revoking again answers the same result. Another credential's session is not found.",
3569
- "operationId": "revokeUiSession",
4988
+ "operationId": "deleteImport",
3570
4989
  "parameters": [
3571
4990
  {
3572
4991
  "in": "path",
3573
- "name": "environmentId",
4992
+ "name": "importId",
3574
4993
  "required": true,
3575
4994
  "schema": {
3576
4995
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3577
4996
  "type": "string"
3578
4997
  }
3579
- },
3580
- {
3581
- "in": "path",
3582
- "name": "appName",
3583
- "required": true,
3584
- "schema": {
3585
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
3586
- "type": "string"
3587
- }
3588
- },
3589
- {
3590
- "in": "path",
3591
- "name": "sessionId",
3592
- "required": true,
3593
- "schema": {
3594
- "pattern": "^uis_[0-9a-z]{26}$",
3595
- "type": "string"
3596
- }
3597
4998
  }
3598
4999
  ],
3599
5000
  "responses": {
@@ -3601,11 +5002,11 @@
3601
5002
  "content": {
3602
5003
  "application/json": {
3603
5004
  "schema": {
3604
- "$ref": "#/components/schemas/UiSessionRevocation"
5005
+ "$ref": "#/components/schemas/Import"
3605
5006
  }
3606
5007
  }
3607
5008
  },
3608
- "description": "The session is revoked"
5009
+ "description": "Import deleted, with its problems cleared and its zip file removed"
3609
5010
  },
3610
5011
  "400": {
3611
5012
  "content": {
@@ -3713,52 +5114,18 @@
3713
5114
  "bearerAuth": []
3714
5115
  }
3715
5116
  ]
3716
- }
3717
- },
3718
- "/v1/imports": {
5117
+ },
3719
5118
  "get": {
3720
- "operationId": "listImports",
5119
+ "operationId": "getImport",
3721
5120
  "parameters": [
3722
5121
  {
3723
- "in": "query",
3724
- "name": "limit",
3725
- "required": false,
3726
- "schema": {
3727
- "default": 50,
3728
- "maximum": 100,
3729
- "minimum": 1,
3730
- "type": "integer"
3731
- }
3732
- },
3733
- {
3734
- "in": "query",
3735
- "name": "cursor",
3736
- "required": false,
3737
- "schema": {
3738
- "maxLength": 2048,
3739
- "type": "string"
3740
- }
3741
- },
3742
- {
3743
- "in": "query",
3744
- "name": "workspaceId",
3745
- "required": false,
5122
+ "in": "path",
5123
+ "name": "importId",
5124
+ "required": true,
3746
5125
  "schema": {
3747
5126
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3748
5127
  "type": "string"
3749
5128
  }
3750
- },
3751
- {
3752
- "in": "query",
3753
- "name": "status",
3754
- "required": false,
3755
- "schema": {
3756
- "items": {
3757
- "$ref": "#/components/schemas/ImportStatus"
3758
- },
3759
- "maxItems": 4,
3760
- "type": "array"
3761
- }
3762
5129
  }
3763
5130
  ],
3764
5131
  "responses": {
@@ -3766,23 +5133,11 @@
3766
5133
  "content": {
3767
5134
  "application/json": {
3768
5135
  "schema": {
3769
- "properties": {
3770
- "data": {
3771
- "items": {
3772
- "$ref": "#/components/schemas/Import"
3773
- },
3774
- "type": "array"
3775
- },
3776
- "nextCursor": {
3777
- "type": ["string", "null"]
3778
- }
3779
- },
3780
- "required": ["data", "nextCursor"],
3781
- "type": "object"
5136
+ "$ref": "#/components/schemas/Import"
3782
5137
  }
3783
5138
  }
3784
5139
  },
3785
- "description": "The workspace's imports, newest first"
5140
+ "description": "Import"
3786
5141
  },
3787
5142
  "400": {
3788
5143
  "content": {
@@ -3890,71 +5245,32 @@
3890
5245
  "bearerAuth": []
3891
5246
  }
3892
5247
  ]
3893
- },
5248
+ }
5249
+ },
5250
+ "/v1/imports/{importId}/complete": {
3894
5251
  "post": {
3895
- "operationId": "createImport",
5252
+ "operationId": "completeImport",
3896
5253
  "parameters": [
3897
5254
  {
3898
- "in": "header",
3899
- "name": "idempotency-key",
3900
- "required": false,
5255
+ "in": "path",
5256
+ "name": "importId",
5257
+ "required": true,
3901
5258
  "schema": {
3902
- "maxLength": 128,
3903
- "minLength": 8,
3904
- "pattern": "^[A-Za-z0-9._:-]+$",
5259
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3905
5260
  "type": "string"
3906
5261
  }
3907
5262
  }
3908
5263
  ],
3909
- "requestBody": {
3910
- "content": {
3911
- "application/json": {
3912
- "schema": {
3913
- "properties": {
3914
- "digest": {
3915
- "description": "`sha256:` and the lowercase hex SHA-256 of the zip file. The check refuses a zip file with another digest.",
3916
- "pattern": "^sha256:[0-9a-f]{64}$",
3917
- "type": "string"
3918
- },
3919
- "sizeBytes": {
3920
- "description": "The size of the zip file in bytes. The upload URL takes exactly this many bytes.",
3921
- "maximum": 67108864,
3922
- "minimum": 1,
3923
- "type": "integer"
3924
- },
3925
- "workspaceId": {
3926
- "description": "The import's workspace. A member must send it. An API key's own workspace is the default.",
3927
- "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3928
- "type": "string"
3929
- }
3930
- },
3931
- "required": ["sizeBytes", "digest"],
3932
- "type": "object"
3933
- }
3934
- }
3935
- },
3936
- "required": true
3937
- },
3938
5264
  "responses": {
3939
5265
  "200": {
3940
5266
  "content": {
3941
5267
  "application/json": {
3942
5268
  "schema": {
3943
- "$ref": "#/components/schemas/CreatedImport"
3944
- }
3945
- }
3946
- },
3947
- "description": "The import an earlier request with this Idempotency-Key created, as it is now, with a new upload URL while it is `uploading`"
3948
- },
3949
- "201": {
3950
- "content": {
3951
- "application/json": {
3952
- "schema": {
3953
- "$ref": "#/components/schemas/CreatedImport"
5269
+ "$ref": "#/components/schemas/Import"
3954
5270
  }
3955
5271
  }
3956
5272
  },
3957
- "description": "Import created; send its zip file to the upload URL, then complete it"
5273
+ "description": "The import after its check, which runs each app's own check on the app's part, as a build of a snapshot does: `ready`, or `invalid` with its problems"
3958
5274
  },
3959
5275
  "400": {
3960
5276
  "content": {
@@ -4064,9 +5380,9 @@
4064
5380
  ]
4065
5381
  }
4066
5382
  },
4067
- "/v1/imports/{importId}": {
4068
- "delete": {
4069
- "operationId": "deleteImport",
5383
+ "/v1/imports/{importId}/file": {
5384
+ "get": {
5385
+ "operationId": "getImportFile",
4070
5386
  "parameters": [
4071
5387
  {
4072
5388
  "in": "path",
@@ -4076,6 +5392,16 @@
4076
5392
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4077
5393
  "type": "string"
4078
5394
  }
5395
+ },
5396
+ {
5397
+ "in": "query",
5398
+ "name": "path",
5399
+ "required": true,
5400
+ "schema": {
5401
+ "maxLength": 65535,
5402
+ "minLength": 1,
5403
+ "type": "string"
5404
+ }
4079
5405
  }
4080
5406
  ],
4081
5407
  "responses": {
@@ -4083,11 +5409,11 @@
4083
5409
  "content": {
4084
5410
  "application/json": {
4085
5411
  "schema": {
4086
- "$ref": "#/components/schemas/Import"
5412
+ "$ref": "#/components/schemas/ImportFile"
4087
5413
  }
4088
5414
  }
4089
5415
  },
4090
- "description": "Import deleted, with its problems cleared and its zip file removed"
5416
+ "description": "A bounded preview of an original file; a truncated prefix does not verify the full file CRC"
4091
5417
  },
4092
5418
  "400": {
4093
5419
  "content": {
@@ -4195,9 +5521,11 @@
4195
5521
  "bearerAuth": []
4196
5522
  }
4197
5523
  ]
4198
- },
5524
+ }
5525
+ },
5526
+ "/v1/imports/{importId}/files": {
4199
5527
  "get": {
4200
- "operationId": "getImport",
5528
+ "operationId": "listImportFiles",
4201
5529
  "parameters": [
4202
5530
  {
4203
5531
  "in": "path",
@@ -4207,6 +5535,25 @@
4207
5535
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4208
5536
  "type": "string"
4209
5537
  }
5538
+ },
5539
+ {
5540
+ "in": "query",
5541
+ "name": "path",
5542
+ "required": false,
5543
+ "schema": {
5544
+ "default": "",
5545
+ "maxLength": 65535,
5546
+ "type": "string"
5547
+ }
5548
+ },
5549
+ {
5550
+ "in": "query",
5551
+ "name": "cursor",
5552
+ "required": false,
5553
+ "schema": {
5554
+ "maxLength": 2048,
5555
+ "type": "string"
5556
+ }
4210
5557
  }
4211
5558
  ],
4212
5559
  "responses": {
@@ -4214,11 +5561,11 @@
4214
5561
  "content": {
4215
5562
  "application/json": {
4216
5563
  "schema": {
4217
- "$ref": "#/components/schemas/Import"
5564
+ "$ref": "#/components/schemas/ImportFolder"
4218
5565
  }
4219
5566
  }
4220
5567
  },
4221
- "description": "Import"
5568
+ "description": "Immediate folder entries in the original upload, or an unavailable source"
4222
5569
  },
4223
5570
  "400": {
4224
5571
  "content": {
@@ -4328,9 +5675,9 @@
4328
5675
  ]
4329
5676
  }
4330
5677
  },
4331
- "/v1/imports/{importId}/complete": {
4332
- "post": {
4333
- "operationId": "completeImport",
5678
+ "/v1/imports/{importId}/upload": {
5679
+ "put": {
5680
+ "operationId": "uploadImport",
4334
5681
  "parameters": [
4335
5682
  {
4336
5683
  "in": "path",
@@ -4342,16 +5689,27 @@
4342
5689
  }
4343
5690
  }
4344
5691
  ],
5692
+ "requestBody": {
5693
+ "content": {
5694
+ "application/zip": {
5695
+ "schema": {
5696
+ "format": "binary",
5697
+ "type": "string"
5698
+ }
5699
+ }
5700
+ },
5701
+ "required": true
5702
+ },
4345
5703
  "responses": {
4346
5704
  "200": {
4347
5705
  "content": {
4348
5706
  "application/json": {
4349
5707
  "schema": {
4350
- "$ref": "#/components/schemas/Import"
5708
+ "$ref": "#/components/schemas/ReceivedImport"
4351
5709
  }
4352
5710
  }
4353
5711
  },
4354
- "description": "The import after the check of its zip file: `ready`, or `invalid` with its problems"
5712
+ "description": "ZIP received; complete the import to check it"
4355
5713
  },
4356
5714
  "400": {
4357
5715
  "content": {
@@ -5493,7 +6851,7 @@
5493
6851
  "properties": {
5494
6852
  "data": {
5495
6853
  "items": {
5496
- "$ref": "#/components/schemas/Snapshot"
6854
+ "$ref": "#/components/schemas/SnapshotListItem"
5497
6855
  },
5498
6856
  "type": "array"
5499
6857
  },
@@ -5506,7 +6864,7 @@
5506
6864
  }
5507
6865
  }
5508
6866
  },
5509
- "description": "The workspace's snapshots, newest first"
6867
+ "description": "The workspace's snapshots, newest first, each app's load with its counts only"
5510
6868
  },
5511
6869
  "400": {
5512
6870
  "content": {