ardent-cli-beta 0.0.16 → 0.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/oclif.manifest.json +1 -1
- package/openapi.json +1941 -0
- package/package.json +2 -1
package/openapi.json
ADDED
|
@@ -0,0 +1,1941 @@
|
|
|
1
|
+
{
|
|
2
|
+
"openapi": "3.1.1",
|
|
3
|
+
"info": {
|
|
4
|
+
"title": "Ardent control-plane API used by the CLI",
|
|
5
|
+
"version": "0.1.0",
|
|
6
|
+
"description": "Review draft describing the current control-plane handlers used by the Ardent CLI, plus the frontend approval endpoint needed for browser login. This is a subset of the customer API, not an inventory of all routes. The document version is not a server API version.\n\nThe server implementation is authoritative. This file does not generate handlers or CLI types, and the routes-package TestCLIOpenAPIParity checks documented route registrations and selected struct schema shapes. Handler validation, authentication, status codes, and deployed behavior remain outside that partial gate. Descriptions were checked against source, not against a deployed service. API authentication uses Authorization: Bearer <token>; the CLI uses an organization-scoped API key. Browser approval uses a user JWT.\n\nTypical token flow: GET /organizations, GET /projects?organization_id=..., then GET /connectors?organization_id=...&project_id=..., then GET /branches?connector_id=.... Create a branch with POST /branches and poll GET /workflows/{workflowID} using operation.workflow_id. All example identifiers and credentials are placeholders.\n\nHTTP 202 means accepted, not completed. HTTP 503 with error workflow_result_timeout means durable work is still running. Authenticated resource clients inspect workflow_id and Location before retrying; an unauthenticated login exchange instead retries the same code and verifier after five seconds. Not all errors are JSON. Local CLI status, logout, project switch, and branch switch have no dedicated API endpoints; logout does not revoke the key. Internal workload routes, other customer endpoints, and database connection/credential delivery are outside this document's scope."
|
|
7
|
+
},
|
|
8
|
+
"servers": [
|
|
9
|
+
{
|
|
10
|
+
"url": "https://production.tryardent.com",
|
|
11
|
+
"description": "Production control plane."
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"security": [
|
|
15
|
+
{
|
|
16
|
+
"APIKeyBearer": []
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"tags": [
|
|
20
|
+
{
|
|
21
|
+
"name": "Authentication"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "Organizations"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "Projects"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "Members"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "Connectors"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"name": "Branches"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "Workflows"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"paths": {
|
|
43
|
+
"/auth/cli": {
|
|
44
|
+
"get": {
|
|
45
|
+
"operationId": "beginCLILogin",
|
|
46
|
+
"tags": [
|
|
47
|
+
"Authentication"
|
|
48
|
+
],
|
|
49
|
+
"summary": "Begin browser login",
|
|
50
|
+
"description": "Opens the frontend approval flow. code_challenge is the unpadded base64url SHA-256 of the verifier. The CLI holds the verifier and listens on its loopback callback.",
|
|
51
|
+
"parameters": [
|
|
52
|
+
{
|
|
53
|
+
"name": "callback_uri",
|
|
54
|
+
"in": "query",
|
|
55
|
+
"required": true,
|
|
56
|
+
"schema": {
|
|
57
|
+
"$ref": "#/components/schemas/CLICallback"
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "state",
|
|
62
|
+
"in": "query",
|
|
63
|
+
"required": true,
|
|
64
|
+
"schema": {
|
|
65
|
+
"$ref": "#/components/schemas/CLIRandomValue"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "code_challenge",
|
|
70
|
+
"in": "query",
|
|
71
|
+
"required": true,
|
|
72
|
+
"schema": {
|
|
73
|
+
"$ref": "#/components/schemas/CLIRandomValue"
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "code_challenge_method",
|
|
78
|
+
"in": "query",
|
|
79
|
+
"required": true,
|
|
80
|
+
"schema": {
|
|
81
|
+
"type": "string",
|
|
82
|
+
"const": "S256"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"security": [],
|
|
87
|
+
"responses": {
|
|
88
|
+
"302": {
|
|
89
|
+
"description": "Redirect to the frontend approval page.",
|
|
90
|
+
"headers": {
|
|
91
|
+
"Location": {
|
|
92
|
+
"schema": {
|
|
93
|
+
"type": "string"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"Cache-Control": {
|
|
97
|
+
"schema": {
|
|
98
|
+
"type": "string",
|
|
99
|
+
"const": "no-store"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"400": {
|
|
105
|
+
"$ref": "#/components/responses/JSONError"
|
|
106
|
+
},
|
|
107
|
+
"500": {
|
|
108
|
+
"$ref": "#/components/responses/InternalError"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"/auth/cli/authorize": {
|
|
114
|
+
"post": {
|
|
115
|
+
"operationId": "authorizeCLILogin",
|
|
116
|
+
"tags": [
|
|
117
|
+
"Authentication"
|
|
118
|
+
],
|
|
119
|
+
"summary": "Approve browser login",
|
|
120
|
+
"description": "Called by the frontend with a registered user JWT, not an API key. Requires api_keys.create in the organization. The frontend follows redirect_uri to deliver code and state to the CLI loopback callback.",
|
|
121
|
+
"security": [
|
|
122
|
+
{
|
|
123
|
+
"UserBearer": []
|
|
124
|
+
}
|
|
125
|
+
],
|
|
126
|
+
"requestBody": {
|
|
127
|
+
"required": true,
|
|
128
|
+
"content": {
|
|
129
|
+
"application/json": {
|
|
130
|
+
"schema": {
|
|
131
|
+
"$ref": "#/components/schemas/CLIAuthorize"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"responses": {
|
|
137
|
+
"200": {
|
|
138
|
+
"description": "Approved callback URL.",
|
|
139
|
+
"content": {
|
|
140
|
+
"application/json": {
|
|
141
|
+
"schema": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"required": [
|
|
144
|
+
"redirect_uri"
|
|
145
|
+
],
|
|
146
|
+
"properties": {
|
|
147
|
+
"redirect_uri": {
|
|
148
|
+
"type": "string"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
"401": {
|
|
156
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
157
|
+
},
|
|
158
|
+
"400": {
|
|
159
|
+
"$ref": "#/components/responses/JSONError"
|
|
160
|
+
},
|
|
161
|
+
"403": {
|
|
162
|
+
"$ref": "#/components/responses/JSONError"
|
|
163
|
+
},
|
|
164
|
+
"500": {
|
|
165
|
+
"$ref": "#/components/responses/InternalError"
|
|
166
|
+
},
|
|
167
|
+
"404": {
|
|
168
|
+
"$ref": "#/components/responses/TextError"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"/auth/cli/exchange": {
|
|
174
|
+
"post": {
|
|
175
|
+
"operationId": "exchangeCLILogin",
|
|
176
|
+
"tags": [
|
|
177
|
+
"Authentication"
|
|
178
|
+
],
|
|
179
|
+
"summary": "Exchange login code",
|
|
180
|
+
"description": "Exchange the approved code with its original verifier. On workflow_result_timeout the CLI retries this exchange after five seconds with the same code and verifier. The returned key is a credential: store it securely.",
|
|
181
|
+
"security": [],
|
|
182
|
+
"requestBody": {
|
|
183
|
+
"required": true,
|
|
184
|
+
"content": {
|
|
185
|
+
"application/json": {
|
|
186
|
+
"schema": {
|
|
187
|
+
"$ref": "#/components/schemas/CLIExchange"
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"responses": {
|
|
193
|
+
"201": {
|
|
194
|
+
"description": "API key for the approved organization.",
|
|
195
|
+
"content": {
|
|
196
|
+
"application/json": {
|
|
197
|
+
"schema": {
|
|
198
|
+
"type": "object",
|
|
199
|
+
"required": [
|
|
200
|
+
"key"
|
|
201
|
+
],
|
|
202
|
+
"properties": {
|
|
203
|
+
"key": {
|
|
204
|
+
"type": "string",
|
|
205
|
+
"description": "Sensitive API key. Store securely; never log it."
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"headers": {
|
|
212
|
+
"Cache-Control": {
|
|
213
|
+
"schema": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"const": "no-store"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"400": {
|
|
221
|
+
"$ref": "#/components/responses/JSONError"
|
|
222
|
+
},
|
|
223
|
+
"403": {
|
|
224
|
+
"$ref": "#/components/responses/JSONError"
|
|
225
|
+
},
|
|
226
|
+
"500": {
|
|
227
|
+
"$ref": "#/components/responses/InternalError"
|
|
228
|
+
},
|
|
229
|
+
"503": {
|
|
230
|
+
"description": "Credential creation is still running. Retry POST /auth/cli/exchange after five seconds with the same code and original verifier. The client has not received its API key; it cannot use the authenticated workflow endpoint to poll this result.",
|
|
231
|
+
"content": {
|
|
232
|
+
"application/json": {
|
|
233
|
+
"schema": {
|
|
234
|
+
"$ref": "#/components/schemas/WorkflowPending"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"headers": {
|
|
239
|
+
"Location": {
|
|
240
|
+
"schema": {
|
|
241
|
+
"type": "string"
|
|
242
|
+
},
|
|
243
|
+
"description": "Relative workflow status URL emitted by the server. This endpoint requires authentication; an unauthenticated exchange client retries the exchange instead."
|
|
244
|
+
},
|
|
245
|
+
"Retry-After": {
|
|
246
|
+
"schema": {
|
|
247
|
+
"type": "string",
|
|
248
|
+
"const": "5"
|
|
249
|
+
},
|
|
250
|
+
"description": "Retry interval in seconds."
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"/organizations": {
|
|
258
|
+
"get": {
|
|
259
|
+
"operationId": "listOrganizations",
|
|
260
|
+
"tags": [
|
|
261
|
+
"Organizations"
|
|
262
|
+
],
|
|
263
|
+
"summary": "List organizations",
|
|
264
|
+
"description": "The CLI validates its API key with this endpoint and requires exactly one organization. API keys require organizations.read and are scoped to their own organization.",
|
|
265
|
+
"parameters": [
|
|
266
|
+
{
|
|
267
|
+
"name": "organization_id",
|
|
268
|
+
"in": "query",
|
|
269
|
+
"required": false,
|
|
270
|
+
"schema": {
|
|
271
|
+
"type": "string",
|
|
272
|
+
"minLength": 1
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
],
|
|
276
|
+
"responses": {
|
|
277
|
+
"200": {
|
|
278
|
+
"description": "Organizations accessible to the caller.",
|
|
279
|
+
"content": {
|
|
280
|
+
"application/json": {
|
|
281
|
+
"schema": {
|
|
282
|
+
"type": "array",
|
|
283
|
+
"items": {
|
|
284
|
+
"$ref": "#/components/schemas/Organization"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
"401": {
|
|
291
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
292
|
+
},
|
|
293
|
+
"403": {
|
|
294
|
+
"$ref": "#/components/responses/JSONError"
|
|
295
|
+
},
|
|
296
|
+
"404": {
|
|
297
|
+
"$ref": "#/components/responses/JSONError"
|
|
298
|
+
},
|
|
299
|
+
"500": {
|
|
300
|
+
"$ref": "#/components/responses/InternalError"
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
},
|
|
305
|
+
"/projects": {
|
|
306
|
+
"get": {
|
|
307
|
+
"operationId": "listProjects",
|
|
308
|
+
"tags": [
|
|
309
|
+
"Projects"
|
|
310
|
+
],
|
|
311
|
+
"summary": "List projects",
|
|
312
|
+
"description": "Requires projects.read in organization_id. An optional project_id filters the returned array; an absent match then returns 404.",
|
|
313
|
+
"parameters": [
|
|
314
|
+
{
|
|
315
|
+
"name": "organization_id",
|
|
316
|
+
"in": "query",
|
|
317
|
+
"required": true,
|
|
318
|
+
"schema": {
|
|
319
|
+
"type": "string",
|
|
320
|
+
"minLength": 1
|
|
321
|
+
}
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"name": "project_id",
|
|
325
|
+
"in": "query",
|
|
326
|
+
"required": false,
|
|
327
|
+
"schema": {
|
|
328
|
+
"type": "string",
|
|
329
|
+
"minLength": 1
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
],
|
|
333
|
+
"responses": {
|
|
334
|
+
"200": {
|
|
335
|
+
"description": "Projects in the organization.",
|
|
336
|
+
"content": {
|
|
337
|
+
"application/json": {
|
|
338
|
+
"schema": {
|
|
339
|
+
"type": "array",
|
|
340
|
+
"items": {
|
|
341
|
+
"$ref": "#/components/schemas/Project"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
"401": {
|
|
348
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
349
|
+
},
|
|
350
|
+
"400": {
|
|
351
|
+
"$ref": "#/components/responses/JSONError"
|
|
352
|
+
},
|
|
353
|
+
"403": {
|
|
354
|
+
"$ref": "#/components/responses/JSONError"
|
|
355
|
+
},
|
|
356
|
+
"404": {
|
|
357
|
+
"$ref": "#/components/responses/JSONError"
|
|
358
|
+
},
|
|
359
|
+
"500": {
|
|
360
|
+
"$ref": "#/components/responses/InternalError"
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
"post": {
|
|
365
|
+
"operationId": "createProject",
|
|
366
|
+
"tags": [
|
|
367
|
+
"Projects"
|
|
368
|
+
],
|
|
369
|
+
"summary": "Create project",
|
|
370
|
+
"description": "Requires projects.create. A duplicate name returns 409 project_already_exists. A 503 workflow_result_timeout does not mean the project was not created.",
|
|
371
|
+
"parameters": [
|
|
372
|
+
{
|
|
373
|
+
"name": "Idempotency-Key",
|
|
374
|
+
"in": "header",
|
|
375
|
+
"required": true,
|
|
376
|
+
"schema": {
|
|
377
|
+
"type": "string",
|
|
378
|
+
"minLength": 1
|
|
379
|
+
},
|
|
380
|
+
"description": "Required. Trimmed, non-empty, at most 200 UTF-8 bytes. Keep the same key and request fields when retrying the same mutation."
|
|
381
|
+
}
|
|
382
|
+
],
|
|
383
|
+
"requestBody": {
|
|
384
|
+
"required": true,
|
|
385
|
+
"content": {
|
|
386
|
+
"application/json": {
|
|
387
|
+
"schema": {
|
|
388
|
+
"$ref": "#/components/schemas/ProjectCreate"
|
|
389
|
+
},
|
|
390
|
+
"example": {
|
|
391
|
+
"organization_id": "organization_example",
|
|
392
|
+
"name": "Developer sandbox"
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
"responses": {
|
|
398
|
+
"201": {
|
|
399
|
+
"description": "Created project.",
|
|
400
|
+
"content": {
|
|
401
|
+
"application/json": {
|
|
402
|
+
"schema": {
|
|
403
|
+
"$ref": "#/components/schemas/Project"
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
"401": {
|
|
409
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
410
|
+
},
|
|
411
|
+
"400": {
|
|
412
|
+
"$ref": "#/components/responses/JSONError"
|
|
413
|
+
},
|
|
414
|
+
"403": {
|
|
415
|
+
"$ref": "#/components/responses/JSONError"
|
|
416
|
+
},
|
|
417
|
+
"409": {
|
|
418
|
+
"$ref": "#/components/responses/JSONError"
|
|
419
|
+
},
|
|
420
|
+
"500": {
|
|
421
|
+
"$ref": "#/components/responses/InternalError"
|
|
422
|
+
},
|
|
423
|
+
"503": {
|
|
424
|
+
"$ref": "#/components/responses/WorkflowPending"
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
},
|
|
429
|
+
"/projects/{projectID}": {
|
|
430
|
+
"delete": {
|
|
431
|
+
"operationId": "deleteProject",
|
|
432
|
+
"tags": [
|
|
433
|
+
"Projects"
|
|
434
|
+
],
|
|
435
|
+
"summary": "Delete project",
|
|
436
|
+
"description": "Requires projects.delete. The resource and organization must match. A project with retained dependent records, including deleted branches, returns 409 project_has_dependents.",
|
|
437
|
+
"parameters": [
|
|
438
|
+
{
|
|
439
|
+
"name": "projectID",
|
|
440
|
+
"in": "path",
|
|
441
|
+
"required": true,
|
|
442
|
+
"schema": {
|
|
443
|
+
"type": "string",
|
|
444
|
+
"minLength": 1
|
|
445
|
+
}
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
"name": "organization_id",
|
|
449
|
+
"in": "query",
|
|
450
|
+
"required": true,
|
|
451
|
+
"schema": {
|
|
452
|
+
"type": "string",
|
|
453
|
+
"minLength": 1
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
],
|
|
457
|
+
"responses": {
|
|
458
|
+
"204": {
|
|
459
|
+
"description": "Deletion completed; no response body."
|
|
460
|
+
},
|
|
461
|
+
"401": {
|
|
462
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
463
|
+
},
|
|
464
|
+
"400": {
|
|
465
|
+
"$ref": "#/components/responses/JSONError"
|
|
466
|
+
},
|
|
467
|
+
"403": {
|
|
468
|
+
"$ref": "#/components/responses/JSONError"
|
|
469
|
+
},
|
|
470
|
+
"404": {
|
|
471
|
+
"$ref": "#/components/responses/JSONError"
|
|
472
|
+
},
|
|
473
|
+
"409": {
|
|
474
|
+
"$ref": "#/components/responses/JSONError"
|
|
475
|
+
},
|
|
476
|
+
"500": {
|
|
477
|
+
"$ref": "#/components/responses/InternalError"
|
|
478
|
+
},
|
|
479
|
+
"503": {
|
|
480
|
+
"$ref": "#/components/responses/WorkflowPending"
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
"/organizations/{organizationID}/memberships": {
|
|
486
|
+
"get": {
|
|
487
|
+
"operationId": "listMemberships",
|
|
488
|
+
"tags": [
|
|
489
|
+
"Members"
|
|
490
|
+
],
|
|
491
|
+
"summary": "List memberships",
|
|
492
|
+
"description": "Requires organization_memberships.read.",
|
|
493
|
+
"parameters": [
|
|
494
|
+
{
|
|
495
|
+
"name": "organizationID",
|
|
496
|
+
"in": "path",
|
|
497
|
+
"required": true,
|
|
498
|
+
"schema": {
|
|
499
|
+
"type": "string",
|
|
500
|
+
"minLength": 1
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
],
|
|
504
|
+
"responses": {
|
|
505
|
+
"200": {
|
|
506
|
+
"description": "Organization memberships.",
|
|
507
|
+
"content": {
|
|
508
|
+
"application/json": {
|
|
509
|
+
"schema": {
|
|
510
|
+
"type": "array",
|
|
511
|
+
"items": {
|
|
512
|
+
"$ref": "#/components/schemas/Membership"
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
"401": {
|
|
519
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
520
|
+
},
|
|
521
|
+
"400": {
|
|
522
|
+
"$ref": "#/components/responses/JSONError"
|
|
523
|
+
},
|
|
524
|
+
"403": {
|
|
525
|
+
"$ref": "#/components/responses/JSONError"
|
|
526
|
+
},
|
|
527
|
+
"500": {
|
|
528
|
+
"$ref": "#/components/responses/InternalError"
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
},
|
|
533
|
+
"/organizations/{organizationID}/memberships/{userID}": {
|
|
534
|
+
"delete": {
|
|
535
|
+
"operationId": "deleteMembership",
|
|
536
|
+
"tags": [
|
|
537
|
+
"Members"
|
|
538
|
+
],
|
|
539
|
+
"summary": "Remove member",
|
|
540
|
+
"description": "Requires organization_memberships.update. Removing the last owner returns 409. Handler errors are plain text, except the JSON workflow timeout response.",
|
|
541
|
+
"parameters": [
|
|
542
|
+
{
|
|
543
|
+
"name": "organizationID",
|
|
544
|
+
"in": "path",
|
|
545
|
+
"required": true,
|
|
546
|
+
"schema": {
|
|
547
|
+
"type": "string",
|
|
548
|
+
"minLength": 1
|
|
549
|
+
}
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
"name": "userID",
|
|
553
|
+
"in": "path",
|
|
554
|
+
"required": true,
|
|
555
|
+
"schema": {
|
|
556
|
+
"type": "string",
|
|
557
|
+
"minLength": 1
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
],
|
|
561
|
+
"responses": {
|
|
562
|
+
"204": {
|
|
563
|
+
"description": "Member removed; no response body."
|
|
564
|
+
},
|
|
565
|
+
"401": {
|
|
566
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
567
|
+
},
|
|
568
|
+
"400": {
|
|
569
|
+
"$ref": "#/components/responses/TextError"
|
|
570
|
+
},
|
|
571
|
+
"403": {
|
|
572
|
+
"$ref": "#/components/responses/TextError"
|
|
573
|
+
},
|
|
574
|
+
"404": {
|
|
575
|
+
"$ref": "#/components/responses/TextError"
|
|
576
|
+
},
|
|
577
|
+
"409": {
|
|
578
|
+
"$ref": "#/components/responses/TextError"
|
|
579
|
+
},
|
|
580
|
+
"500": {
|
|
581
|
+
"$ref": "#/components/responses/TextError"
|
|
582
|
+
},
|
|
583
|
+
"503": {
|
|
584
|
+
"$ref": "#/components/responses/WorkflowPending"
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
},
|
|
589
|
+
"/organizations/{organizationID}/invitations": {
|
|
590
|
+
"get": {
|
|
591
|
+
"operationId": "listInvitations",
|
|
592
|
+
"tags": [
|
|
593
|
+
"Members"
|
|
594
|
+
],
|
|
595
|
+
"summary": "List pending invitations",
|
|
596
|
+
"description": "Requires organization_invitations.read. The CLI omits invitations from member listing when this returns 403 permission_denied.",
|
|
597
|
+
"parameters": [
|
|
598
|
+
{
|
|
599
|
+
"name": "organizationID",
|
|
600
|
+
"in": "path",
|
|
601
|
+
"required": true,
|
|
602
|
+
"schema": {
|
|
603
|
+
"type": "string",
|
|
604
|
+
"minLength": 1
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
],
|
|
608
|
+
"responses": {
|
|
609
|
+
"200": {
|
|
610
|
+
"description": "Pending organization invitations.",
|
|
611
|
+
"content": {
|
|
612
|
+
"application/json": {
|
|
613
|
+
"schema": {
|
|
614
|
+
"type": "array",
|
|
615
|
+
"items": {
|
|
616
|
+
"$ref": "#/components/schemas/Invitation"
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
},
|
|
622
|
+
"401": {
|
|
623
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
624
|
+
},
|
|
625
|
+
"403": {
|
|
626
|
+
"$ref": "#/components/responses/JSONError"
|
|
627
|
+
},
|
|
628
|
+
"500": {
|
|
629
|
+
"$ref": "#/components/responses/InternalError"
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
},
|
|
633
|
+
"post": {
|
|
634
|
+
"operationId": "createInvitation",
|
|
635
|
+
"tags": [
|
|
636
|
+
"Members"
|
|
637
|
+
],
|
|
638
|
+
"summary": "Invite member",
|
|
639
|
+
"description": "Requires organization_invitations.create and every requested scope. role_display_name is a label; permissions come from scopes. A 502 delivery error means the invitation was created but email delivery failed.",
|
|
640
|
+
"parameters": [
|
|
641
|
+
{
|
|
642
|
+
"name": "organizationID",
|
|
643
|
+
"in": "path",
|
|
644
|
+
"required": true,
|
|
645
|
+
"schema": {
|
|
646
|
+
"type": "string",
|
|
647
|
+
"minLength": 1
|
|
648
|
+
}
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
"name": "Idempotency-Key",
|
|
652
|
+
"in": "header",
|
|
653
|
+
"required": true,
|
|
654
|
+
"schema": {
|
|
655
|
+
"type": "string",
|
|
656
|
+
"minLength": 1
|
|
657
|
+
},
|
|
658
|
+
"description": "Required. Trimmed, non-empty, at most 200 UTF-8 bytes. Keep the same key and request fields when retrying the same mutation."
|
|
659
|
+
}
|
|
660
|
+
],
|
|
661
|
+
"requestBody": {
|
|
662
|
+
"required": true,
|
|
663
|
+
"content": {
|
|
664
|
+
"application/json": {
|
|
665
|
+
"schema": {
|
|
666
|
+
"$ref": "#/components/schemas/InvitationCreate"
|
|
667
|
+
},
|
|
668
|
+
"example": {
|
|
669
|
+
"email": "developer@example.com",
|
|
670
|
+
"role_display_name": "Viewer",
|
|
671
|
+
"scopes": [
|
|
672
|
+
"organizations.read",
|
|
673
|
+
"projects.read"
|
|
674
|
+
]
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
},
|
|
679
|
+
"responses": {
|
|
680
|
+
"201": {
|
|
681
|
+
"description": "Created invitation.",
|
|
682
|
+
"content": {
|
|
683
|
+
"application/json": {
|
|
684
|
+
"schema": {
|
|
685
|
+
"$ref": "#/components/schemas/Invitation"
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
},
|
|
690
|
+
"401": {
|
|
691
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
692
|
+
},
|
|
693
|
+
"400": {
|
|
694
|
+
"$ref": "#/components/responses/JSONError"
|
|
695
|
+
},
|
|
696
|
+
"403": {
|
|
697
|
+
"$ref": "#/components/responses/JSONError"
|
|
698
|
+
},
|
|
699
|
+
"404": {
|
|
700
|
+
"$ref": "#/components/responses/JSONError"
|
|
701
|
+
},
|
|
702
|
+
"409": {
|
|
703
|
+
"$ref": "#/components/responses/JSONError"
|
|
704
|
+
},
|
|
705
|
+
"500": {
|
|
706
|
+
"$ref": "#/components/responses/InternalError"
|
|
707
|
+
},
|
|
708
|
+
"503": {
|
|
709
|
+
"$ref": "#/components/responses/WorkflowPending"
|
|
710
|
+
},
|
|
711
|
+
"502": {
|
|
712
|
+
"description": "Invitation created but email delivery failed. Inspect invitation_id before retrying.",
|
|
713
|
+
"content": {
|
|
714
|
+
"application/json": {
|
|
715
|
+
"schema": {
|
|
716
|
+
"$ref": "#/components/schemas/InvitationDeliveryError"
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
},
|
|
724
|
+
"/organizations/{organizationID}/invitations/{invitationID}": {
|
|
725
|
+
"delete": {
|
|
726
|
+
"operationId": "deleteInvitation",
|
|
727
|
+
"tags": [
|
|
728
|
+
"Members"
|
|
729
|
+
],
|
|
730
|
+
"summary": "Cancel invitation",
|
|
731
|
+
"description": "Requires organization_invitations.delete. The invitation must belong to the named organization.",
|
|
732
|
+
"parameters": [
|
|
733
|
+
{
|
|
734
|
+
"name": "organizationID",
|
|
735
|
+
"in": "path",
|
|
736
|
+
"required": true,
|
|
737
|
+
"schema": {
|
|
738
|
+
"type": "string",
|
|
739
|
+
"minLength": 1
|
|
740
|
+
}
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"name": "invitationID",
|
|
744
|
+
"in": "path",
|
|
745
|
+
"required": true,
|
|
746
|
+
"schema": {
|
|
747
|
+
"type": "string",
|
|
748
|
+
"minLength": 1
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
],
|
|
752
|
+
"responses": {
|
|
753
|
+
"204": {
|
|
754
|
+
"description": "Invitation canceled; no response body."
|
|
755
|
+
},
|
|
756
|
+
"401": {
|
|
757
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
758
|
+
},
|
|
759
|
+
"403": {
|
|
760
|
+
"$ref": "#/components/responses/JSONError"
|
|
761
|
+
},
|
|
762
|
+
"404": {
|
|
763
|
+
"$ref": "#/components/responses/JSONError"
|
|
764
|
+
},
|
|
765
|
+
"500": {
|
|
766
|
+
"$ref": "#/components/responses/InternalError"
|
|
767
|
+
},
|
|
768
|
+
"503": {
|
|
769
|
+
"$ref": "#/components/responses/WorkflowPending"
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
"/connectors": {
|
|
775
|
+
"get": {
|
|
776
|
+
"operationId": "listConnectors",
|
|
777
|
+
"tags": [
|
|
778
|
+
"Connectors"
|
|
779
|
+
],
|
|
780
|
+
"summary": "List connectors",
|
|
781
|
+
"description": "Requires connectors.read. Both organization_id and project_id are required. Source credentials are not included in the response.",
|
|
782
|
+
"parameters": [
|
|
783
|
+
{
|
|
784
|
+
"name": "organization_id",
|
|
785
|
+
"in": "query",
|
|
786
|
+
"required": true,
|
|
787
|
+
"schema": {
|
|
788
|
+
"type": "string",
|
|
789
|
+
"minLength": 1
|
|
790
|
+
}
|
|
791
|
+
},
|
|
792
|
+
{
|
|
793
|
+
"name": "project_id",
|
|
794
|
+
"in": "query",
|
|
795
|
+
"required": true,
|
|
796
|
+
"schema": {
|
|
797
|
+
"type": "string",
|
|
798
|
+
"minLength": 1
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
],
|
|
802
|
+
"responses": {
|
|
803
|
+
"200": {
|
|
804
|
+
"description": "Connector metadata and optional onboarding failure details.",
|
|
805
|
+
"content": {
|
|
806
|
+
"application/json": {
|
|
807
|
+
"schema": {
|
|
808
|
+
"type": "array",
|
|
809
|
+
"items": {
|
|
810
|
+
"$ref": "#/components/schemas/Connector"
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
},
|
|
816
|
+
"401": {
|
|
817
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
818
|
+
},
|
|
819
|
+
"400": {
|
|
820
|
+
"$ref": "#/components/responses/JSONError"
|
|
821
|
+
},
|
|
822
|
+
"403": {
|
|
823
|
+
"$ref": "#/components/responses/JSONError"
|
|
824
|
+
},
|
|
825
|
+
"500": {
|
|
826
|
+
"$ref": "#/components/responses/InternalError"
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
},
|
|
830
|
+
"post": {
|
|
831
|
+
"operationId": "createConnector",
|
|
832
|
+
"tags": [
|
|
833
|
+
"Connectors"
|
|
834
|
+
],
|
|
835
|
+
"summary": "Register connector",
|
|
836
|
+
"description": "Requires connectors.create. Omitting environment_id requests Ardent Cloud placement. A reused request_id with conflicting fields returns 409 request_id_conflict. Poll GET /connectors/{connectorID}; registered means metadata-workflow completion, not source replication readiness.",
|
|
837
|
+
"requestBody": {
|
|
838
|
+
"required": true,
|
|
839
|
+
"content": {
|
|
840
|
+
"application/json": {
|
|
841
|
+
"schema": {
|
|
842
|
+
"$ref": "#/components/schemas/ConnectorCreate"
|
|
843
|
+
},
|
|
844
|
+
"example": {
|
|
845
|
+
"organization_id": "organization_example",
|
|
846
|
+
"project_id": "project_example",
|
|
847
|
+
"request_id": "example-registration-1",
|
|
848
|
+
"name": "Development source",
|
|
849
|
+
"url": "postgresql://example_user:REPLACE_ME@db.example.com/app"
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
},
|
|
854
|
+
"responses": {
|
|
855
|
+
"202": {
|
|
856
|
+
"description": "Registration accepted.",
|
|
857
|
+
"content": {
|
|
858
|
+
"application/json": {
|
|
859
|
+
"schema": {
|
|
860
|
+
"$ref": "#/components/schemas/ConnectorRegistration"
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
},
|
|
865
|
+
"401": {
|
|
866
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
867
|
+
},
|
|
868
|
+
"400": {
|
|
869
|
+
"$ref": "#/components/responses/JSONError"
|
|
870
|
+
},
|
|
871
|
+
"403": {
|
|
872
|
+
"$ref": "#/components/responses/JSONError"
|
|
873
|
+
},
|
|
874
|
+
"409": {
|
|
875
|
+
"$ref": "#/components/responses/JSONError"
|
|
876
|
+
},
|
|
877
|
+
"413": {
|
|
878
|
+
"$ref": "#/components/responses/JSONError"
|
|
879
|
+
},
|
|
880
|
+
"500": {
|
|
881
|
+
"$ref": "#/components/responses/InternalError"
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
},
|
|
886
|
+
"/connectors/{connectorID}": {
|
|
887
|
+
"get": {
|
|
888
|
+
"operationId": "getConnectorStatus",
|
|
889
|
+
"tags": [
|
|
890
|
+
"Connectors"
|
|
891
|
+
],
|
|
892
|
+
"summary": "Read connector status",
|
|
893
|
+
"description": "Requires any of connectors.create, connectors.read, or connectors.delete in the owning organization. Missing or unauthorized connectors return 404. Handler errors are plain text. Registration completion does not establish replication readiness.",
|
|
894
|
+
"parameters": [
|
|
895
|
+
{
|
|
896
|
+
"name": "connectorID",
|
|
897
|
+
"in": "path",
|
|
898
|
+
"required": true,
|
|
899
|
+
"schema": {
|
|
900
|
+
"type": "string",
|
|
901
|
+
"minLength": 1
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
],
|
|
905
|
+
"responses": {
|
|
906
|
+
"200": {
|
|
907
|
+
"description": "Registration or deletion status.",
|
|
908
|
+
"content": {
|
|
909
|
+
"application/json": {
|
|
910
|
+
"schema": {
|
|
911
|
+
"$ref": "#/components/schemas/ConnectorStatus"
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
},
|
|
916
|
+
"401": {
|
|
917
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
918
|
+
},
|
|
919
|
+
"404": {
|
|
920
|
+
"$ref": "#/components/responses/TextError"
|
|
921
|
+
},
|
|
922
|
+
"500": {
|
|
923
|
+
"$ref": "#/components/responses/TextError"
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
},
|
|
928
|
+
"/branches": {
|
|
929
|
+
"get": {
|
|
930
|
+
"operationId": "listBranches",
|
|
931
|
+
"tags": [
|
|
932
|
+
"Branches"
|
|
933
|
+
],
|
|
934
|
+
"summary": "List branches",
|
|
935
|
+
"description": "Requires environments.read in the connector organization. Deleted branches are omitted. Missing or unauthorized connectors return 404.",
|
|
936
|
+
"parameters": [
|
|
937
|
+
{
|
|
938
|
+
"name": "connector_id",
|
|
939
|
+
"in": "query",
|
|
940
|
+
"required": true,
|
|
941
|
+
"schema": {
|
|
942
|
+
"type": "string",
|
|
943
|
+
"minLength": 1
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
],
|
|
947
|
+
"responses": {
|
|
948
|
+
"200": {
|
|
949
|
+
"description": "Branches belonging to the connector.",
|
|
950
|
+
"content": {
|
|
951
|
+
"application/json": {
|
|
952
|
+
"schema": {
|
|
953
|
+
"type": "array",
|
|
954
|
+
"items": {
|
|
955
|
+
"$ref": "#/components/schemas/Branch"
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
},
|
|
961
|
+
"401": {
|
|
962
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
963
|
+
},
|
|
964
|
+
"400": {
|
|
965
|
+
"$ref": "#/components/responses/JSONError"
|
|
966
|
+
},
|
|
967
|
+
"404": {
|
|
968
|
+
"$ref": "#/components/responses/JSONError"
|
|
969
|
+
},
|
|
970
|
+
"409": {
|
|
971
|
+
"$ref": "#/components/responses/JSONError"
|
|
972
|
+
},
|
|
973
|
+
"500": {
|
|
974
|
+
"$ref": "#/components/responses/InternalError"
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
},
|
|
978
|
+
"post": {
|
|
979
|
+
"operationId": "createBranch",
|
|
980
|
+
"tags": [
|
|
981
|
+
"Branches"
|
|
982
|
+
],
|
|
983
|
+
"summary": "Create branch",
|
|
984
|
+
"description": "Requires environments.update in the connector organization. Uses the newest published snapshot and refuses an unavailable newest snapshot with 409 snapshot_unavailable. Caller-selected snapshots and other unknown fields are rejected. Names are unique within a connector while the branch is not deleted. One JSON object, at most 16 KiB. Poll operation.workflow_id; acceptance is not completion.",
|
|
985
|
+
"requestBody": {
|
|
986
|
+
"required": true,
|
|
987
|
+
"content": {
|
|
988
|
+
"application/json": {
|
|
989
|
+
"schema": {
|
|
990
|
+
"$ref": "#/components/schemas/BranchCreate"
|
|
991
|
+
},
|
|
992
|
+
"example": {
|
|
993
|
+
"connector_id": "connector_example",
|
|
994
|
+
"name": "My feature",
|
|
995
|
+
"request_id": "example-branch-1"
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
},
|
|
1000
|
+
"responses": {
|
|
1001
|
+
"202": {
|
|
1002
|
+
"description": "Branch reservation and accepted workflow.",
|
|
1003
|
+
"content": {
|
|
1004
|
+
"application/json": {
|
|
1005
|
+
"schema": {
|
|
1006
|
+
"$ref": "#/components/schemas/BranchOperation"
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
1011
|
+
"401": {
|
|
1012
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
1013
|
+
},
|
|
1014
|
+
"400": {
|
|
1015
|
+
"$ref": "#/components/responses/JSONError"
|
|
1016
|
+
},
|
|
1017
|
+
"404": {
|
|
1018
|
+
"$ref": "#/components/responses/JSONError"
|
|
1019
|
+
},
|
|
1020
|
+
"409": {
|
|
1021
|
+
"$ref": "#/components/responses/JSONError"
|
|
1022
|
+
},
|
|
1023
|
+
"500": {
|
|
1024
|
+
"$ref": "#/components/responses/InternalError"
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
},
|
|
1028
|
+
"delete": {
|
|
1029
|
+
"operationId": "deleteBranch",
|
|
1030
|
+
"tags": [
|
|
1031
|
+
"Branches"
|
|
1032
|
+
],
|
|
1033
|
+
"summary": "Delete branch by name",
|
|
1034
|
+
"description": "Requires environments.update in the connector organization. Resolves connector_id and name server-side. One JSON object, at most 16 KiB. Poll operation.workflow_id; the branch in this response is the record read before erasure, not proof of deletion.",
|
|
1035
|
+
"requestBody": {
|
|
1036
|
+
"required": true,
|
|
1037
|
+
"content": {
|
|
1038
|
+
"application/json": {
|
|
1039
|
+
"schema": {
|
|
1040
|
+
"$ref": "#/components/schemas/BranchDelete"
|
|
1041
|
+
},
|
|
1042
|
+
"example": {
|
|
1043
|
+
"connector_id": "connector_example",
|
|
1044
|
+
"name": "My feature"
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1049
|
+
"responses": {
|
|
1050
|
+
"202": {
|
|
1051
|
+
"description": "Branch record and accepted erasure workflow.",
|
|
1052
|
+
"content": {
|
|
1053
|
+
"application/json": {
|
|
1054
|
+
"schema": {
|
|
1055
|
+
"$ref": "#/components/schemas/BranchOperation"
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
},
|
|
1060
|
+
"401": {
|
|
1061
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
1062
|
+
},
|
|
1063
|
+
"400": {
|
|
1064
|
+
"$ref": "#/components/responses/JSONError"
|
|
1065
|
+
},
|
|
1066
|
+
"404": {
|
|
1067
|
+
"$ref": "#/components/responses/JSONError"
|
|
1068
|
+
},
|
|
1069
|
+
"409": {
|
|
1070
|
+
"$ref": "#/components/responses/JSONError"
|
|
1071
|
+
},
|
|
1072
|
+
"500": {
|
|
1073
|
+
"$ref": "#/components/responses/InternalError"
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
},
|
|
1078
|
+
"/workflows/{workflowID}": {
|
|
1079
|
+
"get": {
|
|
1080
|
+
"operationId": "getWorkflow",
|
|
1081
|
+
"tags": [
|
|
1082
|
+
"Workflows"
|
|
1083
|
+
],
|
|
1084
|
+
"summary": "Read workflow status",
|
|
1085
|
+
"description": "The CLI polls this endpoint for branch operations. SUCCESS means the workflow completed; ERROR, CANCELLED, and MAX_RECOVERY_ATTEMPTS_EXCEEDED are terminal failures. The getWorkflow handler in api/routes/workflows.go selects actor-identity checks or organization authorization through auth.CheckOrganizationPermissions; the latter uses the recorded authorization scope for organization-owned workflows. Missing and unauthorized workflows return 404. A client timeout does not cancel server work.",
|
|
1086
|
+
"parameters": [
|
|
1087
|
+
{
|
|
1088
|
+
"name": "workflowID",
|
|
1089
|
+
"in": "path",
|
|
1090
|
+
"required": true,
|
|
1091
|
+
"schema": {
|
|
1092
|
+
"type": "string",
|
|
1093
|
+
"minLength": 1
|
|
1094
|
+
}
|
|
1095
|
+
},
|
|
1096
|
+
{
|
|
1097
|
+
"name": "offset",
|
|
1098
|
+
"in": "query",
|
|
1099
|
+
"required": false,
|
|
1100
|
+
"schema": {
|
|
1101
|
+
"type": "integer",
|
|
1102
|
+
"minimum": 0,
|
|
1103
|
+
"default": 0
|
|
1104
|
+
},
|
|
1105
|
+
"description": "Progress stream offset. Continue from next_offset."
|
|
1106
|
+
}
|
|
1107
|
+
],
|
|
1108
|
+
"responses": {
|
|
1109
|
+
"200": {
|
|
1110
|
+
"description": "Current workflow status and progress.",
|
|
1111
|
+
"content": {
|
|
1112
|
+
"application/json": {
|
|
1113
|
+
"schema": {
|
|
1114
|
+
"$ref": "#/components/schemas/Workflow"
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
},
|
|
1119
|
+
"401": {
|
|
1120
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
1121
|
+
},
|
|
1122
|
+
"400": {
|
|
1123
|
+
"$ref": "#/components/responses/TextError"
|
|
1124
|
+
},
|
|
1125
|
+
"404": {
|
|
1126
|
+
"$ref": "#/components/responses/TextError"
|
|
1127
|
+
},
|
|
1128
|
+
"500": {
|
|
1129
|
+
"$ref": "#/components/responses/TextError"
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
}
|
|
1133
|
+
}
|
|
1134
|
+
},
|
|
1135
|
+
"components": {
|
|
1136
|
+
"securitySchemes": {
|
|
1137
|
+
"APIKeyBearer": {
|
|
1138
|
+
"type": "http",
|
|
1139
|
+
"scheme": "bearer",
|
|
1140
|
+
"description": "Organization-scoped Ardent API key."
|
|
1141
|
+
},
|
|
1142
|
+
"UserBearer": {
|
|
1143
|
+
"type": "http",
|
|
1144
|
+
"scheme": "bearer",
|
|
1145
|
+
"bearerFormat": "JWT",
|
|
1146
|
+
"description": "Authenticated user JWT used by the browser approval endpoint."
|
|
1147
|
+
}
|
|
1148
|
+
},
|
|
1149
|
+
"responses": {
|
|
1150
|
+
"Unauthorized": {
|
|
1151
|
+
"description": "Missing, invalid, expired, or revoked authentication.",
|
|
1152
|
+
"content": {
|
|
1153
|
+
"text/plain": {
|
|
1154
|
+
"schema": {
|
|
1155
|
+
"type": "string"
|
|
1156
|
+
}
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
},
|
|
1160
|
+
"JSONError": {
|
|
1161
|
+
"description": "Request rejected; inspect error and message.",
|
|
1162
|
+
"content": {
|
|
1163
|
+
"application/json": {
|
|
1164
|
+
"schema": {
|
|
1165
|
+
"$ref": "#/components/schemas/Error"
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
},
|
|
1170
|
+
"TextError": {
|
|
1171
|
+
"description": "Request rejected; the response body is plain text.",
|
|
1172
|
+
"content": {
|
|
1173
|
+
"text/plain": {
|
|
1174
|
+
"schema": {
|
|
1175
|
+
"type": "string"
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
},
|
|
1180
|
+
"InternalError": {
|
|
1181
|
+
"description": "Internal failure. Authentication middleware can return plain text even when the handler returns JSON.",
|
|
1182
|
+
"content": {
|
|
1183
|
+
"application/json": {
|
|
1184
|
+
"schema": {
|
|
1185
|
+
"$ref": "#/components/schemas/Error"
|
|
1186
|
+
}
|
|
1187
|
+
},
|
|
1188
|
+
"text/plain": {
|
|
1189
|
+
"schema": {
|
|
1190
|
+
"type": "string"
|
|
1191
|
+
}
|
|
1192
|
+
}
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
"WorkflowPending": {
|
|
1196
|
+
"description": "The durable mutation is still running, not confirmed failed. Poll the Location URL before retrying. Authorization for polling remains subject to the workflow owner and scope.",
|
|
1197
|
+
"content": {
|
|
1198
|
+
"application/json": {
|
|
1199
|
+
"schema": {
|
|
1200
|
+
"$ref": "#/components/schemas/WorkflowPending"
|
|
1201
|
+
}
|
|
1202
|
+
}
|
|
1203
|
+
},
|
|
1204
|
+
"headers": {
|
|
1205
|
+
"Location": {
|
|
1206
|
+
"schema": {
|
|
1207
|
+
"type": "string"
|
|
1208
|
+
},
|
|
1209
|
+
"description": "Relative workflow status URL."
|
|
1210
|
+
},
|
|
1211
|
+
"Retry-After": {
|
|
1212
|
+
"schema": {
|
|
1213
|
+
"type": "string",
|
|
1214
|
+
"const": "5"
|
|
1215
|
+
},
|
|
1216
|
+
"description": "Retry interval in seconds."
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
},
|
|
1221
|
+
"schemas": {
|
|
1222
|
+
"Error": {
|
|
1223
|
+
"type": "object",
|
|
1224
|
+
"required": [
|
|
1225
|
+
"error",
|
|
1226
|
+
"message"
|
|
1227
|
+
],
|
|
1228
|
+
"properties": {
|
|
1229
|
+
"error": {
|
|
1230
|
+
"type": "string"
|
|
1231
|
+
},
|
|
1232
|
+
"message": {
|
|
1233
|
+
"type": "string"
|
|
1234
|
+
}
|
|
1235
|
+
},
|
|
1236
|
+
"additionalProperties": false
|
|
1237
|
+
},
|
|
1238
|
+
"WorkflowPending": {
|
|
1239
|
+
"type": "object",
|
|
1240
|
+
"required": [
|
|
1241
|
+
"error",
|
|
1242
|
+
"message",
|
|
1243
|
+
"workflow_id"
|
|
1244
|
+
],
|
|
1245
|
+
"properties": {
|
|
1246
|
+
"error": {
|
|
1247
|
+
"type": "string",
|
|
1248
|
+
"const": "workflow_result_timeout"
|
|
1249
|
+
},
|
|
1250
|
+
"message": {
|
|
1251
|
+
"type": "string"
|
|
1252
|
+
},
|
|
1253
|
+
"workflow_id": {
|
|
1254
|
+
"type": "string"
|
|
1255
|
+
}
|
|
1256
|
+
}
|
|
1257
|
+
},
|
|
1258
|
+
"InvitationDeliveryError": {
|
|
1259
|
+
"type": "object",
|
|
1260
|
+
"required": [
|
|
1261
|
+
"error",
|
|
1262
|
+
"message",
|
|
1263
|
+
"invitation_id"
|
|
1264
|
+
],
|
|
1265
|
+
"properties": {
|
|
1266
|
+
"error": {
|
|
1267
|
+
"type": "string",
|
|
1268
|
+
"const": "organization_invitation_delivery_failed"
|
|
1269
|
+
},
|
|
1270
|
+
"message": {
|
|
1271
|
+
"type": "string"
|
|
1272
|
+
},
|
|
1273
|
+
"invitation_id": {
|
|
1274
|
+
"type": "string"
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
},
|
|
1278
|
+
"Organization": {
|
|
1279
|
+
"type": "object",
|
|
1280
|
+
"required": [
|
|
1281
|
+
"id",
|
|
1282
|
+
"name",
|
|
1283
|
+
"role_display_name",
|
|
1284
|
+
"scopes",
|
|
1285
|
+
"created_at",
|
|
1286
|
+
"updated_at",
|
|
1287
|
+
"joined_at"
|
|
1288
|
+
],
|
|
1289
|
+
"properties": {
|
|
1290
|
+
"id": {
|
|
1291
|
+
"type": "string"
|
|
1292
|
+
},
|
|
1293
|
+
"name": {
|
|
1294
|
+
"type": "string"
|
|
1295
|
+
},
|
|
1296
|
+
"role_display_name": {
|
|
1297
|
+
"type": [
|
|
1298
|
+
"string",
|
|
1299
|
+
"null"
|
|
1300
|
+
]
|
|
1301
|
+
},
|
|
1302
|
+
"scopes": {
|
|
1303
|
+
"type": "array",
|
|
1304
|
+
"items": {
|
|
1305
|
+
"type": "string"
|
|
1306
|
+
}
|
|
1307
|
+
},
|
|
1308
|
+
"created_at": {
|
|
1309
|
+
"type": "string",
|
|
1310
|
+
"format": "date-time"
|
|
1311
|
+
},
|
|
1312
|
+
"updated_at": {
|
|
1313
|
+
"type": "string",
|
|
1314
|
+
"format": "date-time"
|
|
1315
|
+
},
|
|
1316
|
+
"joined_at": {
|
|
1317
|
+
"type": [
|
|
1318
|
+
"string",
|
|
1319
|
+
"null"
|
|
1320
|
+
],
|
|
1321
|
+
"format": "date-time"
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
},
|
|
1325
|
+
"Project": {
|
|
1326
|
+
"type": "object",
|
|
1327
|
+
"required": [
|
|
1328
|
+
"id",
|
|
1329
|
+
"organization_id",
|
|
1330
|
+
"name",
|
|
1331
|
+
"created_at",
|
|
1332
|
+
"updated_at"
|
|
1333
|
+
],
|
|
1334
|
+
"properties": {
|
|
1335
|
+
"id": {
|
|
1336
|
+
"type": "string"
|
|
1337
|
+
},
|
|
1338
|
+
"organization_id": {
|
|
1339
|
+
"type": "string"
|
|
1340
|
+
},
|
|
1341
|
+
"name": {
|
|
1342
|
+
"type": "string"
|
|
1343
|
+
},
|
|
1344
|
+
"created_at": {
|
|
1345
|
+
"type": "string",
|
|
1346
|
+
"format": "date-time"
|
|
1347
|
+
},
|
|
1348
|
+
"updated_at": {
|
|
1349
|
+
"type": "string",
|
|
1350
|
+
"format": "date-time"
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
},
|
|
1354
|
+
"Membership": {
|
|
1355
|
+
"type": "object",
|
|
1356
|
+
"required": [
|
|
1357
|
+
"organization_id",
|
|
1358
|
+
"user_id",
|
|
1359
|
+
"email",
|
|
1360
|
+
"full_name",
|
|
1361
|
+
"role_display_name",
|
|
1362
|
+
"scopes",
|
|
1363
|
+
"created_at",
|
|
1364
|
+
"updated_at"
|
|
1365
|
+
],
|
|
1366
|
+
"properties": {
|
|
1367
|
+
"organization_id": {
|
|
1368
|
+
"type": "string"
|
|
1369
|
+
},
|
|
1370
|
+
"user_id": {
|
|
1371
|
+
"type": "string"
|
|
1372
|
+
},
|
|
1373
|
+
"email": {
|
|
1374
|
+
"type": "string"
|
|
1375
|
+
},
|
|
1376
|
+
"full_name": {
|
|
1377
|
+
"type": [
|
|
1378
|
+
"string",
|
|
1379
|
+
"null"
|
|
1380
|
+
]
|
|
1381
|
+
},
|
|
1382
|
+
"role_display_name": {
|
|
1383
|
+
"type": "string"
|
|
1384
|
+
},
|
|
1385
|
+
"scopes": {
|
|
1386
|
+
"type": "array",
|
|
1387
|
+
"items": {
|
|
1388
|
+
"type": "string"
|
|
1389
|
+
}
|
|
1390
|
+
},
|
|
1391
|
+
"created_at": {
|
|
1392
|
+
"type": "string",
|
|
1393
|
+
"format": "date-time"
|
|
1394
|
+
},
|
|
1395
|
+
"updated_at": {
|
|
1396
|
+
"type": "string",
|
|
1397
|
+
"format": "date-time"
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
},
|
|
1401
|
+
"Invitation": {
|
|
1402
|
+
"type": "object",
|
|
1403
|
+
"required": [
|
|
1404
|
+
"id",
|
|
1405
|
+
"organization_id",
|
|
1406
|
+
"organization_name",
|
|
1407
|
+
"email",
|
|
1408
|
+
"role_display_name",
|
|
1409
|
+
"scopes",
|
|
1410
|
+
"expires_at",
|
|
1411
|
+
"created_by",
|
|
1412
|
+
"inviter_name",
|
|
1413
|
+
"created_at"
|
|
1414
|
+
],
|
|
1415
|
+
"properties": {
|
|
1416
|
+
"id": {
|
|
1417
|
+
"type": "string"
|
|
1418
|
+
},
|
|
1419
|
+
"organization_id": {
|
|
1420
|
+
"type": "string"
|
|
1421
|
+
},
|
|
1422
|
+
"organization_name": {
|
|
1423
|
+
"type": "string"
|
|
1424
|
+
},
|
|
1425
|
+
"email": {
|
|
1426
|
+
"type": "string"
|
|
1427
|
+
},
|
|
1428
|
+
"role_display_name": {
|
|
1429
|
+
"type": "string"
|
|
1430
|
+
},
|
|
1431
|
+
"scopes": {
|
|
1432
|
+
"type": "array",
|
|
1433
|
+
"items": {
|
|
1434
|
+
"type": "string"
|
|
1435
|
+
}
|
|
1436
|
+
},
|
|
1437
|
+
"expires_at": {
|
|
1438
|
+
"type": "string",
|
|
1439
|
+
"format": "date-time"
|
|
1440
|
+
},
|
|
1441
|
+
"created_by": {
|
|
1442
|
+
"type": [
|
|
1443
|
+
"string",
|
|
1444
|
+
"null"
|
|
1445
|
+
]
|
|
1446
|
+
},
|
|
1447
|
+
"inviter_name": {
|
|
1448
|
+
"type": [
|
|
1449
|
+
"string",
|
|
1450
|
+
"null"
|
|
1451
|
+
]
|
|
1452
|
+
},
|
|
1453
|
+
"created_at": {
|
|
1454
|
+
"type": "string",
|
|
1455
|
+
"format": "date-time"
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
},
|
|
1459
|
+
"Connector": {
|
|
1460
|
+
"type": "object",
|
|
1461
|
+
"required": [
|
|
1462
|
+
"id",
|
|
1463
|
+
"project_id",
|
|
1464
|
+
"environment_id",
|
|
1465
|
+
"name",
|
|
1466
|
+
"status",
|
|
1467
|
+
"source",
|
|
1468
|
+
"created_at",
|
|
1469
|
+
"updated_at"
|
|
1470
|
+
],
|
|
1471
|
+
"properties": {
|
|
1472
|
+
"id": {
|
|
1473
|
+
"type": "string"
|
|
1474
|
+
},
|
|
1475
|
+
"project_id": {
|
|
1476
|
+
"type": "string"
|
|
1477
|
+
},
|
|
1478
|
+
"environment_id": {
|
|
1479
|
+
"type": "string"
|
|
1480
|
+
},
|
|
1481
|
+
"name": {
|
|
1482
|
+
"type": "string"
|
|
1483
|
+
},
|
|
1484
|
+
"status": {
|
|
1485
|
+
"type": "string"
|
|
1486
|
+
},
|
|
1487
|
+
"source": {
|
|
1488
|
+
"type": "object",
|
|
1489
|
+
"required": [
|
|
1490
|
+
"host",
|
|
1491
|
+
"port",
|
|
1492
|
+
"database"
|
|
1493
|
+
],
|
|
1494
|
+
"properties": {
|
|
1495
|
+
"host": {
|
|
1496
|
+
"type": "string"
|
|
1497
|
+
},
|
|
1498
|
+
"port": {
|
|
1499
|
+
"type": "integer"
|
|
1500
|
+
},
|
|
1501
|
+
"database": {
|
|
1502
|
+
"type": "string"
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
},
|
|
1506
|
+
"created_at": {
|
|
1507
|
+
"type": "string",
|
|
1508
|
+
"format": "date-time"
|
|
1509
|
+
},
|
|
1510
|
+
"updated_at": {
|
|
1511
|
+
"type": "string",
|
|
1512
|
+
"format": "date-time"
|
|
1513
|
+
},
|
|
1514
|
+
"onboarding": {
|
|
1515
|
+
"type": "object",
|
|
1516
|
+
"required": [
|
|
1517
|
+
"failure_stage",
|
|
1518
|
+
"failure_code",
|
|
1519
|
+
"failed_at"
|
|
1520
|
+
],
|
|
1521
|
+
"properties": {
|
|
1522
|
+
"failure_stage": {
|
|
1523
|
+
"type": "string"
|
|
1524
|
+
},
|
|
1525
|
+
"failure_code": {
|
|
1526
|
+
"type": "string"
|
|
1527
|
+
},
|
|
1528
|
+
"failed_at": {
|
|
1529
|
+
"type": "string",
|
|
1530
|
+
"format": "date-time"
|
|
1531
|
+
},
|
|
1532
|
+
"retry_at": {
|
|
1533
|
+
"type": "string",
|
|
1534
|
+
"format": "date-time"
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
}
|
|
1539
|
+
},
|
|
1540
|
+
"ConnectorRegistration": {
|
|
1541
|
+
"type": "object",
|
|
1542
|
+
"required": [
|
|
1543
|
+
"connector_id"
|
|
1544
|
+
],
|
|
1545
|
+
"properties": {
|
|
1546
|
+
"connector_id": {
|
|
1547
|
+
"type": "string"
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
},
|
|
1551
|
+
"ConnectorStatus": {
|
|
1552
|
+
"type": "object",
|
|
1553
|
+
"required": [
|
|
1554
|
+
"connector_id",
|
|
1555
|
+
"status"
|
|
1556
|
+
],
|
|
1557
|
+
"properties": {
|
|
1558
|
+
"connector_id": {
|
|
1559
|
+
"type": "string"
|
|
1560
|
+
},
|
|
1561
|
+
"status": {
|
|
1562
|
+
"type": "string",
|
|
1563
|
+
"enum": [
|
|
1564
|
+
"registering",
|
|
1565
|
+
"registered",
|
|
1566
|
+
"failed",
|
|
1567
|
+
"deleting",
|
|
1568
|
+
"deleted"
|
|
1569
|
+
]
|
|
1570
|
+
},
|
|
1571
|
+
"failure": {
|
|
1572
|
+
"type": "string"
|
|
1573
|
+
},
|
|
1574
|
+
"phase": {
|
|
1575
|
+
"type": "string"
|
|
1576
|
+
}
|
|
1577
|
+
},
|
|
1578
|
+
"description": "Registration workflow completion is not replication readiness. Deletion status can also be returned by this endpoint."
|
|
1579
|
+
},
|
|
1580
|
+
"Branch": {
|
|
1581
|
+
"type": "object",
|
|
1582
|
+
"required": [
|
|
1583
|
+
"id",
|
|
1584
|
+
"connector_id",
|
|
1585
|
+
"name",
|
|
1586
|
+
"organization_id",
|
|
1587
|
+
"project_id",
|
|
1588
|
+
"environment_id",
|
|
1589
|
+
"request_id",
|
|
1590
|
+
"state",
|
|
1591
|
+
"sequence",
|
|
1592
|
+
"generation",
|
|
1593
|
+
"created_by",
|
|
1594
|
+
"created_at",
|
|
1595
|
+
"updated_by",
|
|
1596
|
+
"updated_at"
|
|
1597
|
+
],
|
|
1598
|
+
"properties": {
|
|
1599
|
+
"id": {
|
|
1600
|
+
"type": "string"
|
|
1601
|
+
},
|
|
1602
|
+
"connector_id": {
|
|
1603
|
+
"type": "string"
|
|
1604
|
+
},
|
|
1605
|
+
"name": {
|
|
1606
|
+
"type": "string"
|
|
1607
|
+
},
|
|
1608
|
+
"organization_id": {
|
|
1609
|
+
"type": "string"
|
|
1610
|
+
},
|
|
1611
|
+
"project_id": {
|
|
1612
|
+
"type": "string"
|
|
1613
|
+
},
|
|
1614
|
+
"environment_id": {
|
|
1615
|
+
"type": "string"
|
|
1616
|
+
},
|
|
1617
|
+
"request_id": {
|
|
1618
|
+
"type": "string"
|
|
1619
|
+
},
|
|
1620
|
+
"state": {
|
|
1621
|
+
"type": "string"
|
|
1622
|
+
},
|
|
1623
|
+
"sequence": {
|
|
1624
|
+
"type": "integer",
|
|
1625
|
+
"minimum": 0
|
|
1626
|
+
},
|
|
1627
|
+
"generation": {
|
|
1628
|
+
"type": "integer",
|
|
1629
|
+
"minimum": 0
|
|
1630
|
+
},
|
|
1631
|
+
"failure_reason": {
|
|
1632
|
+
"type": "string"
|
|
1633
|
+
},
|
|
1634
|
+
"created_by": {
|
|
1635
|
+
"type": "string"
|
|
1636
|
+
},
|
|
1637
|
+
"created_at": {
|
|
1638
|
+
"type": "string",
|
|
1639
|
+
"format": "date-time"
|
|
1640
|
+
},
|
|
1641
|
+
"updated_by": {
|
|
1642
|
+
"type": "string"
|
|
1643
|
+
},
|
|
1644
|
+
"updated_at": {
|
|
1645
|
+
"type": "string",
|
|
1646
|
+
"format": "date-time"
|
|
1647
|
+
}
|
|
1648
|
+
}
|
|
1649
|
+
},
|
|
1650
|
+
"BranchOperation": {
|
|
1651
|
+
"type": "object",
|
|
1652
|
+
"required": [
|
|
1653
|
+
"branch",
|
|
1654
|
+
"operation"
|
|
1655
|
+
],
|
|
1656
|
+
"properties": {
|
|
1657
|
+
"branch": {
|
|
1658
|
+
"$ref": "#/components/schemas/Branch"
|
|
1659
|
+
},
|
|
1660
|
+
"operation": {
|
|
1661
|
+
"type": "object",
|
|
1662
|
+
"required": [
|
|
1663
|
+
"operation_id",
|
|
1664
|
+
"workflow_id"
|
|
1665
|
+
],
|
|
1666
|
+
"properties": {
|
|
1667
|
+
"operation_id": {
|
|
1668
|
+
"type": "string"
|
|
1669
|
+
},
|
|
1670
|
+
"workflow_id": {
|
|
1671
|
+
"type": "string"
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
},
|
|
1677
|
+
"Workflow": {
|
|
1678
|
+
"type": "object",
|
|
1679
|
+
"required": [
|
|
1680
|
+
"id",
|
|
1681
|
+
"name",
|
|
1682
|
+
"status",
|
|
1683
|
+
"created_at",
|
|
1684
|
+
"updated_at",
|
|
1685
|
+
"progress",
|
|
1686
|
+
"next_offset",
|
|
1687
|
+
"progress_closed"
|
|
1688
|
+
],
|
|
1689
|
+
"properties": {
|
|
1690
|
+
"id": {
|
|
1691
|
+
"type": "string"
|
|
1692
|
+
},
|
|
1693
|
+
"name": {
|
|
1694
|
+
"type": "string"
|
|
1695
|
+
},
|
|
1696
|
+
"status": {
|
|
1697
|
+
"type": "string",
|
|
1698
|
+
"enum": [
|
|
1699
|
+
"DELAYED",
|
|
1700
|
+
"ENQUEUED",
|
|
1701
|
+
"PENDING",
|
|
1702
|
+
"SUCCESS",
|
|
1703
|
+
"ERROR",
|
|
1704
|
+
"CANCELLED",
|
|
1705
|
+
"MAX_RECOVERY_ATTEMPTS_EXCEEDED"
|
|
1706
|
+
]
|
|
1707
|
+
},
|
|
1708
|
+
"created_at": {
|
|
1709
|
+
"type": "string",
|
|
1710
|
+
"format": "date-time"
|
|
1711
|
+
},
|
|
1712
|
+
"updated_at": {
|
|
1713
|
+
"type": "string",
|
|
1714
|
+
"format": "date-time"
|
|
1715
|
+
},
|
|
1716
|
+
"completed_at": {
|
|
1717
|
+
"type": "string",
|
|
1718
|
+
"format": "date-time"
|
|
1719
|
+
},
|
|
1720
|
+
"failure": {
|
|
1721
|
+
"type": "string"
|
|
1722
|
+
},
|
|
1723
|
+
"progress": {
|
|
1724
|
+
"type": "array",
|
|
1725
|
+
"items": {
|
|
1726
|
+
"type": "object",
|
|
1727
|
+
"required": [
|
|
1728
|
+
"stage"
|
|
1729
|
+
],
|
|
1730
|
+
"properties": {
|
|
1731
|
+
"stage": {
|
|
1732
|
+
"type": "string"
|
|
1733
|
+
},
|
|
1734
|
+
"reason": {
|
|
1735
|
+
"type": "string"
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
},
|
|
1740
|
+
"next_offset": {
|
|
1741
|
+
"type": "integer"
|
|
1742
|
+
},
|
|
1743
|
+
"progress_closed": {
|
|
1744
|
+
"type": "boolean"
|
|
1745
|
+
},
|
|
1746
|
+
"cloudformation_stack_url": {
|
|
1747
|
+
"type": "string"
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
},
|
|
1751
|
+
"ProjectCreate": {
|
|
1752
|
+
"type": "object",
|
|
1753
|
+
"required": [
|
|
1754
|
+
"organization_id",
|
|
1755
|
+
"name"
|
|
1756
|
+
],
|
|
1757
|
+
"properties": {
|
|
1758
|
+
"organization_id": {
|
|
1759
|
+
"type": "string",
|
|
1760
|
+
"minLength": 1
|
|
1761
|
+
},
|
|
1762
|
+
"name": {
|
|
1763
|
+
"type": "string",
|
|
1764
|
+
"minLength": 1
|
|
1765
|
+
}
|
|
1766
|
+
},
|
|
1767
|
+
"description": "The handler trims both fields and requires non-empty values."
|
|
1768
|
+
},
|
|
1769
|
+
"InvitationCreate": {
|
|
1770
|
+
"type": "object",
|
|
1771
|
+
"required": [
|
|
1772
|
+
"email",
|
|
1773
|
+
"role_display_name"
|
|
1774
|
+
],
|
|
1775
|
+
"properties": {
|
|
1776
|
+
"email": {
|
|
1777
|
+
"type": "string",
|
|
1778
|
+
"description": "Parsed as a mail address; the address is lowercased."
|
|
1779
|
+
},
|
|
1780
|
+
"role_display_name": {
|
|
1781
|
+
"type": "string",
|
|
1782
|
+
"minLength": 1,
|
|
1783
|
+
"description": "Display label, not an authorization role enum. Send the desired scopes explicitly."
|
|
1784
|
+
},
|
|
1785
|
+
"scopes": {
|
|
1786
|
+
"type": [
|
|
1787
|
+
"array",
|
|
1788
|
+
"null"
|
|
1789
|
+
],
|
|
1790
|
+
"items": {
|
|
1791
|
+
"type": "string"
|
|
1792
|
+
},
|
|
1793
|
+
"uniqueItems": true,
|
|
1794
|
+
"description": "Every scope must be a valid organization scope held by the caller. Omitted or null scopes become an empty list."
|
|
1795
|
+
}
|
|
1796
|
+
}
|
|
1797
|
+
},
|
|
1798
|
+
"ConnectorCreate": {
|
|
1799
|
+
"type": "object",
|
|
1800
|
+
"required": [
|
|
1801
|
+
"organization_id",
|
|
1802
|
+
"project_id",
|
|
1803
|
+
"request_id",
|
|
1804
|
+
"name",
|
|
1805
|
+
"url"
|
|
1806
|
+
],
|
|
1807
|
+
"properties": {
|
|
1808
|
+
"organization_id": {
|
|
1809
|
+
"type": "string",
|
|
1810
|
+
"minLength": 1
|
|
1811
|
+
},
|
|
1812
|
+
"project_id": {
|
|
1813
|
+
"type": "string",
|
|
1814
|
+
"minLength": 1
|
|
1815
|
+
},
|
|
1816
|
+
"environment_id": {
|
|
1817
|
+
"type": "string",
|
|
1818
|
+
"description": "Optional. An omitted or empty value selects Ardent Cloud through server-side placement."
|
|
1819
|
+
},
|
|
1820
|
+
"request_id": {
|
|
1821
|
+
"type": "string",
|
|
1822
|
+
"minLength": 1,
|
|
1823
|
+
"description": "Trimmed, then limited to 128 UTF-8 bytes. Reuse for retries of the same request."
|
|
1824
|
+
},
|
|
1825
|
+
"name": {
|
|
1826
|
+
"type": "string",
|
|
1827
|
+
"minLength": 1
|
|
1828
|
+
},
|
|
1829
|
+
"url": {
|
|
1830
|
+
"type": "string",
|
|
1831
|
+
"minLength": 1,
|
|
1832
|
+
"writeOnly": true,
|
|
1833
|
+
"description": "PostgreSQL connection URL, including source credentials. Do not log this value."
|
|
1834
|
+
}
|
|
1835
|
+
},
|
|
1836
|
+
"additionalProperties": false,
|
|
1837
|
+
"description": "One JSON object, at most 16 KiB. String fields are trimmed. Unknown fields are rejected."
|
|
1838
|
+
},
|
|
1839
|
+
"BranchName": {
|
|
1840
|
+
"type": "string",
|
|
1841
|
+
"minLength": 1,
|
|
1842
|
+
"maxLength": 128,
|
|
1843
|
+
"description": "After trimming: 1 to 128 Unicode characters, with no Unicode control characters."
|
|
1844
|
+
},
|
|
1845
|
+
"BranchCreate": {
|
|
1846
|
+
"type": "object",
|
|
1847
|
+
"required": [
|
|
1848
|
+
"connector_id",
|
|
1849
|
+
"name",
|
|
1850
|
+
"request_id"
|
|
1851
|
+
],
|
|
1852
|
+
"properties": {
|
|
1853
|
+
"connector_id": {
|
|
1854
|
+
"type": "string",
|
|
1855
|
+
"minLength": 1
|
|
1856
|
+
},
|
|
1857
|
+
"name": {
|
|
1858
|
+
"$ref": "#/components/schemas/BranchName"
|
|
1859
|
+
},
|
|
1860
|
+
"request_id": {
|
|
1861
|
+
"type": "string",
|
|
1862
|
+
"minLength": 1,
|
|
1863
|
+
"description": "Trimmed, then limited to 128 UTF-8 bytes; NUL is forbidden. Reuse for retries."
|
|
1864
|
+
}
|
|
1865
|
+
},
|
|
1866
|
+
"additionalProperties": false
|
|
1867
|
+
},
|
|
1868
|
+
"BranchDelete": {
|
|
1869
|
+
"type": "object",
|
|
1870
|
+
"required": [
|
|
1871
|
+
"connector_id",
|
|
1872
|
+
"name"
|
|
1873
|
+
],
|
|
1874
|
+
"properties": {
|
|
1875
|
+
"connector_id": {
|
|
1876
|
+
"type": "string",
|
|
1877
|
+
"minLength": 1
|
|
1878
|
+
},
|
|
1879
|
+
"name": {
|
|
1880
|
+
"$ref": "#/components/schemas/BranchName"
|
|
1881
|
+
}
|
|
1882
|
+
},
|
|
1883
|
+
"additionalProperties": false
|
|
1884
|
+
},
|
|
1885
|
+
"CLICallback": {
|
|
1886
|
+
"type": "string",
|
|
1887
|
+
"format": "uri",
|
|
1888
|
+
"description": "Exactly http://127.0.0.1:<port>/callback, port 1–65535; no user information, query, or fragment."
|
|
1889
|
+
},
|
|
1890
|
+
"CLIRandomValue": {
|
|
1891
|
+
"type": "string",
|
|
1892
|
+
"description": "Unpadded base64url encoding of exactly 32 bytes."
|
|
1893
|
+
},
|
|
1894
|
+
"CLIExchange": {
|
|
1895
|
+
"type": "object",
|
|
1896
|
+
"required": [
|
|
1897
|
+
"code",
|
|
1898
|
+
"code_verifier"
|
|
1899
|
+
],
|
|
1900
|
+
"properties": {
|
|
1901
|
+
"code": {
|
|
1902
|
+
"type": "string",
|
|
1903
|
+
"minLength": 1
|
|
1904
|
+
},
|
|
1905
|
+
"code_verifier": {
|
|
1906
|
+
"$ref": "#/components/schemas/CLIRandomValue"
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
},
|
|
1910
|
+
"CLIAuthorize": {
|
|
1911
|
+
"type": "object",
|
|
1912
|
+
"required": [
|
|
1913
|
+
"organization_id",
|
|
1914
|
+
"callback_uri",
|
|
1915
|
+
"state",
|
|
1916
|
+
"code_challenge",
|
|
1917
|
+
"code_challenge_method"
|
|
1918
|
+
],
|
|
1919
|
+
"properties": {
|
|
1920
|
+
"organization_id": {
|
|
1921
|
+
"type": "string",
|
|
1922
|
+
"minLength": 1
|
|
1923
|
+
},
|
|
1924
|
+
"callback_uri": {
|
|
1925
|
+
"$ref": "#/components/schemas/CLICallback"
|
|
1926
|
+
},
|
|
1927
|
+
"state": {
|
|
1928
|
+
"$ref": "#/components/schemas/CLIRandomValue"
|
|
1929
|
+
},
|
|
1930
|
+
"code_challenge": {
|
|
1931
|
+
"$ref": "#/components/schemas/CLIRandomValue"
|
|
1932
|
+
},
|
|
1933
|
+
"code_challenge_method": {
|
|
1934
|
+
"type": "string",
|
|
1935
|
+
"const": "S256"
|
|
1936
|
+
}
|
|
1937
|
+
}
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
}
|