From 31a88854ef6b3df0979f0a6739421bdd8d55a55f Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:08:42 +0530 Subject: [PATCH 01/22] build(savanna): split control-plane catalog into per-endpoint pages Add split-endpoints.js to generate nav and one page per endpoint from the _catalog source, replacing the monolithic endpoints.adoc reference. --- lib/split-endpoints.js | 232 ++++++++++++++++++ .../{pages => _catalog}/endpoints.adoc | 193 ++++++++++----- modules/savanna/modules/rest-api/nav.adoc | 53 +++- .../pages/endpoints/add-an-allowed-ip.adoc | 91 +++++++ .../pages/endpoints/create-a-workgroup.adoc | 52 ++++ .../create-a-workspace-schedule.adoc | 58 +++++ .../pages/endpoints/create-a-workspace.adoc | 54 ++++ .../endpoints/create-an-in-database-user.adoc | 58 +++++ .../pages/endpoints/delete-a-backup.adoc | 40 +++ .../pages/endpoints/delete-a-database.adoc | 36 +++ .../pages/endpoints/delete-a-workgroup.adoc | 52 ++++ .../delete-a-workspace-schedule.adoc | 53 ++++ .../pages/endpoints/delete-a-workspace.adoc | 36 +++ .../pages/endpoints/delete-an-allowed-ip.adoc | 73 ++++++ .../endpoints/delete-an-in-database-user.adoc | 40 +++ .../endpoints/disable-the-allow-list.adoc | 71 ++++++ .../endpoints/enable-the-allow-list.adoc | 71 ++++++ .../pages/endpoints/get-a-database.adoc | 54 ++++ .../pages/endpoints/get-a-workgroup.adoc | 52 ++++ .../pages/endpoints/get-a-workspace.adoc | 54 ++++ .../pages/endpoints/get-backup-schedule.adoc | 55 +++++ .../pages/endpoints/get-current-ip.adoc | 83 +++++++ .../pages/endpoints/get-org-metadata.adoc | 43 ++++ .../pages/endpoints/get-restore-status.adoc | 57 +++++ .../endpoints/get-workspace-schedules.adoc | 51 ++++ .../pages/endpoints/list-allowed-ips.adoc | 71 ++++++ .../pages/endpoints/list-backups.adoc | 55 +++++ .../endpoints/list-in-database-users.adoc | 51 ++++ .../pages/endpoints/list-org-users.adoc | 25 ++ .../pages/endpoints/list-workgroups.adoc | 43 ++++ .../pages/endpoints/pause-a-workspace.adoc | 36 +++ .../pages/endpoints/refresh-a-workspace.adoc | 36 +++ .../pages/endpoints/restore-a-backup.adoc | 58 +++++ .../pages/endpoints/resume-a-workspace.adoc | 36 +++ .../pages/endpoints/set-backup-schedule.adoc | 40 +++ .../pages/endpoints/update-a-database.adoc | 56 +++++ .../endpoints/update-a-user-password.adoc | 40 +++ .../pages/endpoints/update-a-users-role.adoc | 36 +++ .../pages/endpoints/update-a-workgroup.adoc | 54 ++++ .../update-a-workspace-schedule.adoc | 60 +++++ .../pages/endpoints/update-a-workspace.adoc | 56 +++++ .../pages/endpoints/update-an-allowed-ip.adoc | 94 +++++++ 42 files changed, 2497 insertions(+), 62 deletions(-) create mode 100644 lib/split-endpoints.js rename modules/savanna/modules/rest-api/{pages => _catalog}/endpoints.adoc (91%) create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js new file mode 100644 index 00000000..10e10ef1 --- /dev/null +++ b/lib/split-endpoints.js @@ -0,0 +1,232 @@ +'use strict' + +/** + * Splits the generated Savanna control-plane catalog into one page per + * endpoint, then writes the module nav. + * + * Source of truth is the catalog in modules/savanna/modules/rest-api/_catalog. + * Replace it when the API is regenerated, then run `npm run endpoints:split`. + * Everything under pages/endpoints/ is overwritten, so edit the catalog. + * + * Usage: node lib/split-endpoints.js [--check] + */ + +const fs = require('fs') +const path = require('path') + +const MODULE_DIR = path.join(__dirname, '..', 'modules/savanna/modules/rest-api') +const CATALOG = path.join(MODULE_DIR, '_catalog/endpoints.adoc') +const PAGES_DIR = path.join(MODULE_DIR, 'pages') +const ENDPOINTS_DIR = path.join(PAGES_DIR, 'endpoints') +const NAV = path.join(MODULE_DIR, 'nav.adoc') + +// Swagger tag -> nav group, in the order the groups should appear. +const GROUPS = [ + ['Workgroup', 'Workgroups'], + ['Workspace', 'Workspaces'], + ['WorkspaceSchedule', 'Workspace schedules'], + ['Database', 'Databases'], + ['Backup', 'Backups'], + ['AllowedIP', 'IP allow list'], + ['DatabaseUser', 'In-database users'], + ['Org', 'Organization'], +] + +const GENERATED = '// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead.' + +function slugify (label) { + return label + .toLowerCase() + .replace(/['’]/g, '') + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-|-$/g, '') +} + +// Friendly endpoint names, keyed by request line. The catalog's own titles are +// swagger summaries ("Create workgroups in your org"); these are the names used +// in nav, the landing page, and the overview, so they stay in one place. +const LABELS = { + 'POST /controller/v4/v2/workgroups': 'Create a workgroup', + 'GET /controller/v4/v2/workgroups': 'List workgroups', + 'GET /controller/v4/v2/workgroups/{workgroupID}': 'Get a workgroup', + 'PUT /controller/v4/v2/workgroups/{workgroupID}': 'Update a workgroup', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}': 'Delete a workgroup', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces': 'Create a workspace', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Get a workspace', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Update a workspace', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Delete a workspace', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause': 'Pause a workspace', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh': 'Refresh a workspace', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume': 'Resume a workspace', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Create a workspace schedule', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Get workspace schedules', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}': 'Update a workspace schedule', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}': 'Delete a workspace schedule', + 'GET /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Get a database', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Update a database', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Delete a database', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'List backups', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'Delete a backup', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore': 'Restore a backup', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status': 'Get restore status', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule': 'Get backup schedule', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule': 'Set backup schedule', + 'POST /controller/v4/v2/workgroups/{workgroupID}/allow_list': 'Add an allowed IP', + 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list': 'List allowed IPs', + 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current': 'Get current IP', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable': 'Disable the allow list', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable': 'Enable the allow list', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}': 'Update an allowed IP', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}': 'Delete an allowed IP', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Create an in-database user', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'List in-database users', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Update a user password', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Delete an in-database user', + 'GET /controller/v4/v2/workspaces/meta': 'Get org metadata', + 'GET /controller/v4/v2/users': 'List org users', + 'PUT /controller/v4/v2/users/{userId}/roles': "Update a user's role", +} + +function parseCatalog (text) { + const lines = text.split('\n') + const endpoints = [] + let i = 0 + while (i < lines.length) { + const anchor = /^\[\[(_https[^\]]+)\]\]$/.exec(lines[i]) + if (!anchor || !(lines[i + 1] || '').startsWith('== ')) { + i += 1 + continue + } + const endpoint = { anchor: anchor[1], summary: lines[i + 1].slice(3).trim(), tags: [], body: [] } + endpoints.push(endpoint) + i += 2 + // The request line sits in a literal block right below the title. + if ((lines[i] || '').trim() === '....') { + const request = /^(GET|POST|PUT|PATCH|DELETE) (\S+)$/.exec((lines[i + 1] || '').trim()) + if (request) { + endpoint.method = request[1] + endpoint.path = request[2].replace('https://api.tgcloud.io', '') + } + i += 2 + while (i < lines.length && lines[i].trim() !== '....') i += 1 + i += 1 + } + while (i < lines.length && !(/^\[\[_https[^\]]+\]\]$/.test(lines[i]) && (lines[i + 1] || '').startsWith('== '))) { + if (lines[i].trim().startsWith('* ') && (lines[i - 2] || '').trim() === '==== Tags') { + endpoint.tags.push(lines[i].trim().slice(2)) + } else { + endpoint.body.push(lines[i]) + } + i += 1 + } + } + return endpoints +} + +/** Rewrites catalog markup for a standalone page. */ +function renderBody (body) { + return body + .join('\n') + .trim() + // The Tags section only repeats the nav group. Its list items are already + // parsed out, so the heading can be dropped wherever it sits. + .replace(/\[discrete\]\n==== Tags\n*/g, '') + // The summary opens the page as its lead paragraph, so it needs no heading. + .replace(/^\[discrete\]\n==== Description\n/, '') + .replace(/^\[discrete\]\n/gm, '') + .replace(/^==== /gm, '== ') + // definitions.adoc sits in pages/, one level above these endpoint pages. + .replace(/<]+),([^>]+)>>/g, 'xref:rest-api:definitions.adoc#$1[$2]') + .replace(/\n{3,}/g, '\n\n') + .trim() +} + +function renderPage (endpoint, label) { + return [ + '= ' + label, + GENERATED, + '', + '[.api-request]', + '....', + endpoint.method + ' ' + endpoint.path, + '....', + '', + renderBody(endpoint.body), + '', + ].join('\n') +} + +function renderNav (grouped) { + const out = [ + GENERATED, + '* REST API reference', + '** xref:index.adoc[Overview]', + '** xref:rest-api:create-api-key.adoc[Create an API key]', + '** xref:rest-api:data-plane-apis.adoc[Data-plane APIs]', + '** xref:rest-api:index-previous.adoc[Overview (previous)]', + ] + // Resource groups sit beside the other pages: one less level of indent + // leaves room for the method badge. + for (const [, title] of GROUPS) { + out.push('** ' + title) + for (const endpoint of grouped.get(title)) { + out.push('*** xref:rest-api:endpoints/' + endpoint.slug + '.adoc[' + endpoint.method + ' ' + endpoint.label + ']') + } + } + out.push('** xref:rest-api:definitions.adoc[Definitions]') + return out.join('\n') + '\n' +} + +/** Points existing deep links at the new per-endpoint pages. */ +function rewriteIncomingLinks (endpoints) { + const bySlug = new Map(endpoints.map((e) => [e.anchor, e.slug])) + const files = ['index.adoc', 'index-previous.adoc', 'data-plane-apis.adoc', 'create-api-key.adoc'] + const changed = [] + for (const name of files) { + const file = path.join(PAGES_DIR, name) + if (!fs.existsSync(file)) continue + const before = fs.readFileSync(file, 'utf8') + const after = before.replace( + /xref:((?:savanna:)?rest-api:)endpoints\.adoc#(_https[^[]+)\[/g, + (match, prefix, anchor) => (bySlug.has(anchor) ? 'xref:' + prefix + 'endpoints/' + bySlug.get(anchor) + '.adoc[' : match) + ) + if (after !== before) { + fs.writeFileSync(file, after) + changed.push(name) + } + } + return changed +} + +function main () { + const endpoints = parseCatalog(fs.readFileSync(CATALOG, 'utf8')) + const groupTitles = new Map(GROUPS) + const grouped = new Map(GROUPS.map(([, title]) => [title, []])) + const slugs = new Set() + + for (const endpoint of endpoints) { + const tag = endpoint.tags[0] + if (!groupTitles.has(tag)) throw new Error('unmapped tag "' + tag + '" for ' + endpoint.anchor) + if (!endpoint.method) throw new Error('no request line for ' + endpoint.anchor) + const request = endpoint.method + ' ' + endpoint.path + if (!LABELS[request]) throw new Error('no label for "' + request + '", add one to LABELS') + endpoint.label = LABELS[request] + endpoint.slug = slugify(endpoint.label) + if (slugs.has(endpoint.slug)) throw new Error('duplicate slug ' + endpoint.slug) + slugs.add(endpoint.slug) + grouped.get(groupTitles.get(tag)).push(endpoint) + } + + fs.rmSync(ENDPOINTS_DIR, { recursive: true, force: true }) + fs.mkdirSync(ENDPOINTS_DIR, { recursive: true }) + for (const endpoint of endpoints) { + fs.writeFileSync(path.join(ENDPOINTS_DIR, endpoint.slug + '.adoc'), renderPage(endpoint, endpoint.label)) + } + fs.writeFileSync(NAV, renderNav(grouped)) + const rewritten = rewriteIncomingLinks(endpoints) + + console.log('wrote ' + endpoints.length + ' endpoint pages and nav') + if (rewritten.length) console.log('rewrote deep links in ' + rewritten.join(', ')) +} + +main() diff --git a/modules/savanna/modules/rest-api/pages/endpoints.adoc b/modules/savanna/modules/rest-api/_catalog/endpoints.adoc similarity index 91% rename from modules/savanna/modules/rest-api/pages/endpoints.adoc rename to modules/savanna/modules/rest-api/_catalog/endpoints.adoc index 0427d505..f309f6f9 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints.adoc +++ b/modules/savanna/modules/rest-api/_catalog/endpoints.adoc @@ -1,11 +1,9 @@ [[_paths]] -= Savanna REST Endpoints += Endpoint reference :description: Reference guide for Savanna's REST endpoints -== Endpoints - [[_https_api_tgcloud_io_controller_v4_v2_workgroups_post]] -=== Create workgroups in your org +== Create workgroups in your org .... POST https://api.tgcloud.io/controller/v4/v2/workgroups .... @@ -68,7 +66,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_get]] -=== Get workgroups for your org +== Get workgroups for your org .... GET https://api.tgcloud.io/controller/v4/v2/workgroups .... @@ -121,7 +119,7 @@ __optional__|< <> > array [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_get]] -=== Get workgroup detail in your org +== Get workgroup detail in your org .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID} .... @@ -184,7 +182,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_put]] -=== Update workgroups in your org +== Update workgroups in your org .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID} .... @@ -248,7 +246,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_delete]] -=== Delete workgroup detail in your org +== Delete workgroup detail in your org .... DELETE https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID} .... @@ -311,7 +309,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post]] -=== Add Allowed IP +== Add Allowed IP .... POST https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list .... @@ -413,7 +411,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_get]] -=== List Allowed IPs +== List Allowed IPs .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list .... @@ -495,7 +493,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get]] -=== Get Current IP +== Get Current IP .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list/current .... @@ -589,7 +587,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_disable_put]] -=== Disable Allow List +== Disable Allow List .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list/disable .... @@ -671,7 +669,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_enable_put]] -=== Enable Allow List +== Enable Allow List .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list/enable .... @@ -753,7 +751,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put]] -=== Update Allowed IP +== Update Allowed IP .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} .... @@ -858,7 +856,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_delete]] -=== Delete Allowed IP +== Delete Allowed IP .... DELETE https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} .... @@ -942,7 +940,7 @@ __optional__|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_get]] -=== Get database in workgroup +== Get database in workgroup .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} .... @@ -1007,7 +1005,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_put]] -=== Update database in workgroup +== Update database in workgroup .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} .... @@ -1074,7 +1072,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_delete]] -=== Delete database in workgroup +== Delete database in workgroup .... DELETE https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} .... @@ -1121,7 +1119,7 @@ __required__|Workgroup ID|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_post]] -=== Create workspace in workgroup +== Create workspace in workgroup .... POST https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces .... @@ -1186,7 +1184,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_get]] -=== Get workspace in workgroup +== Get workspace in workgroup .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} .... @@ -1251,7 +1249,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_put]] -=== Update workspace in workgroup +== Update workspace in workgroup .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} .... @@ -1318,7 +1316,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_delete]] -=== Delete workspace in workgroup +== Delete workspace in workgroup .... DELETE https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} .... @@ -1365,7 +1363,7 @@ __required__|Workspace ID|string [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_backups_delete]] -=== Delete a backup +== Delete a backup .... DELETE https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups .... @@ -1416,7 +1414,7 @@ __required__|Delete Backup Request|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_post]] -=== Create in-database GSQL user +== Create in-database GSQL user .... POST https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser .... @@ -1605,7 +1603,7 @@ __optional__|<> [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_get]] -=== List in-database GSQL users +== List in-database GSQL users .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser .... @@ -1666,7 +1664,7 @@ __optional__|< <> > array [[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_put]] -=== Update in-database GSQL user password +== Update in-database GSQL user password .... PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser .... @@ -1717,7 +1715,7 @@ __required__|In-database user request|<> > array [[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_restore_job_status_get]] -=== Get backup restore status +== Get backup restore status .... -GET https://api.tgcloud.io/controller/v4/v2/workspaces/{workspaceID}/backups/{job}/status +GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status .... [discrete] @@ -2041,6 +2041,8 @@ Get the status of a backup restore job [options="header", cols=".^2a,.^3a,.^9a,.^4a"] |=== |Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string |**Path**|**job** + __required__|Job ID|string |**Path**|**workspaceID** + @@ -2091,7 +2093,7 @@ __optional__|<> * Backup [[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_schedule_get]] -=== Get backup schedule +== Get backup schedule .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule .... @@ -2156,8 +2158,77 @@ __optional__|<> * Backup -[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_get]] -=== Retrieve workspace schedule +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_post]] +== Create a new workspace schedule +.... +POST https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules +.... + +[discrete] +==== Description +Create a new workspace schedule for a given workspace + +[discrete] +==== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**body** + +__required__|Workspace Schedule|<> +|=== + +[discrete] +==== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_post_response_200,Response 200>> +|**400**|Bad Request|<> +|**500**|Internal Server Error|<> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< <> > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|<> +|=== + +[discrete] +==== Consumes + +* `application/json` + +[discrete] +==== Produces + +* `application/json` + +[discrete] +==== Tags + +* WorkspaceSchedule + + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_get]] +== Retrieve workspace schedule .... GET https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules .... @@ -2184,11 +2255,11 @@ __required__|Workspace ID|string [options="header", cols=".^2a,.^14a,.^4a"] |=== |HTTP Code|Description|Schema -|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_get_response_200,Response 200>> +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_get_response_200,Response 200>> |**500**|Internal Server Error|<> |=== -[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_get_response_200]] +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_get_response_200]] **Response 200** [options="header", cols=".^3a,.^4a"] @@ -2203,7 +2274,7 @@ __optional__|string |**RequestID** + __optional__|string |**Result** + -__optional__|string +__optional__|< <> > array |=== [discrete] @@ -2217,10 +2288,10 @@ __optional__|string * WorkspaceSchedule -[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_schedule_id_put]] -=== Update an existing workspace schedule +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_put]] +== Update an existing workspace schedule .... -POST https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule +PUT https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} .... [discrete] @@ -2237,6 +2308,8 @@ Update an existing workspace schedule for a given workspace __required__|Workgroup ID|string |**Path**|**workspaceID** + __required__|Workspace ID|string +|**Path**|**scheduleID** + +__required__|Schedule ID|string |**Body**|**body** + __required__|Workspace Schedule|<> |=== @@ -2247,12 +2320,12 @@ __required__|Workspace Schedule|<> +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_put_response_200,Response 200>> |**400**|Bad Request|<> |**500**|Internal Server Error|<> |=== -[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_schedule_id_put_response_200]] +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_put_response_200]] **Response 200** [options="header", cols=".^3a,.^4a"] @@ -2267,7 +2340,7 @@ __optional__|string |**RequestID** + __optional__|string |**Result** + -__optional__|string +__optional__|<> |=== [discrete] @@ -2286,10 +2359,10 @@ __optional__|string * WorkspaceSchedule -[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_schedule_id_delete]] -=== Delete an existing workspace schedule +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_delete]] +== Delete an existing workspace schedule .... -POST https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule +DELETE https://api.tgcloud.io/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} .... [discrete] @@ -2306,8 +2379,8 @@ Delete an existing workspace schedule for a given workspace __required__|Workgroup ID|string |**Path**|**workspaceID** + __required__|Workspace ID|string -|**Body**|**body** + -__required__|Workspace Schedule|<> +|**Path**|**scheduleID** + +__required__|Schedule ID|string |=== [discrete] @@ -2316,11 +2389,11 @@ __required__|Workspace Schedule|<> +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_delete_response_200,Response 200>> |**500**|Internal Server Error|<> |=== -[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_schedules_schedule_id_delete_response_200]] +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_delete_response_200]] **Response 200** [options="header", cols=".^3a,.^4a"] @@ -2350,9 +2423,9 @@ __optional__|string [[_https_api_tgcloud_io_users_get]] -=== List of users in the org +== List of users in the org .... -GET https://api.tgcloud.io/users +GET https://api.tgcloud.io/controller/v4/v2/users .... [discrete] @@ -2385,9 +2458,9 @@ List of users in the org. Note: this endpoint is not APIKEY compatible [[_https_api_tgcloud_io_users_userid_roles_put]] -=== Update the role of an org user +== Update the role of an org user .... -PUT https://api.tgcloud.io/users/{userId}/roles +PUT https://api.tgcloud.io/controller/v4/v2/users/{userId}/roles .... [discrete] diff --git a/modules/savanna/modules/rest-api/nav.adoc b/modules/savanna/modules/rest-api/nav.adoc index b076ec70..2c41bf04 100644 --- a/modules/savanna/modules/rest-api/nav.adoc +++ b/modules/savanna/modules/rest-api/nav.adoc @@ -1,5 +1,54 @@ +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. * REST API reference ** xref:index.adoc[Overview] -** xref:rest-api:authentication.adoc[Authentication] -** xref:rest-api:endpoints.adoc[Endpoints] +** xref:rest-api:create-api-key.adoc[Create an API key] +** xref:rest-api:data-plane-apis.adoc[Data-plane APIs] +** xref:rest-api:index-previous.adoc[Overview (previous)] +** Workgroups +*** xref:rest-api:endpoints/create-a-workgroup.adoc[POST Create a workgroup] +*** xref:rest-api:endpoints/list-workgroups.adoc[GET List workgroups] +*** xref:rest-api:endpoints/get-a-workgroup.adoc[GET Get a workgroup] +*** xref:rest-api:endpoints/update-a-workgroup.adoc[PUT Update a workgroup] +*** xref:rest-api:endpoints/delete-a-workgroup.adoc[DELETE Delete a workgroup] +** Workspaces +*** xref:rest-api:endpoints/create-a-workspace.adoc[POST Create a workspace] +*** xref:rest-api:endpoints/get-a-workspace.adoc[GET Get a workspace] +*** xref:rest-api:endpoints/update-a-workspace.adoc[PUT Update a workspace] +*** xref:rest-api:endpoints/delete-a-workspace.adoc[DELETE Delete a workspace] +*** xref:rest-api:endpoints/pause-a-workspace.adoc[POST Pause a workspace] +*** xref:rest-api:endpoints/refresh-a-workspace.adoc[POST Refresh a workspace] +*** xref:rest-api:endpoints/resume-a-workspace.adoc[POST Resume a workspace] +** Workspace schedules +*** xref:rest-api:endpoints/create-a-workspace-schedule.adoc[POST Create a workspace schedule] +*** xref:rest-api:endpoints/get-workspace-schedules.adoc[GET Get workspace schedules] +*** xref:rest-api:endpoints/update-a-workspace-schedule.adoc[PUT Update a workspace schedule] +*** xref:rest-api:endpoints/delete-a-workspace-schedule.adoc[DELETE Delete a workspace schedule] +** Databases +*** xref:rest-api:endpoints/get-a-database.adoc[GET Get a database] +*** xref:rest-api:endpoints/update-a-database.adoc[PUT Update a database] +*** xref:rest-api:endpoints/delete-a-database.adoc[DELETE Delete a database] +** Backups +*** xref:rest-api:endpoints/delete-a-backup.adoc[DELETE Delete a backup] +*** xref:rest-api:endpoints/restore-a-backup.adoc[POST Restore a backup] +*** xref:rest-api:endpoints/set-backup-schedule.adoc[POST Set backup schedule] +*** xref:rest-api:endpoints/list-backups.adoc[GET List backups] +*** xref:rest-api:endpoints/get-restore-status.adoc[GET Get restore status] +*** xref:rest-api:endpoints/get-backup-schedule.adoc[GET Get backup schedule] +** IP allow list +*** xref:rest-api:endpoints/add-an-allowed-ip.adoc[POST Add an allowed IP] +*** xref:rest-api:endpoints/list-allowed-ips.adoc[GET List allowed IPs] +*** xref:rest-api:endpoints/get-current-ip.adoc[GET Get current IP] +*** xref:rest-api:endpoints/disable-the-allow-list.adoc[PUT Disable the allow list] +*** xref:rest-api:endpoints/enable-the-allow-list.adoc[PUT Enable the allow list] +*** xref:rest-api:endpoints/update-an-allowed-ip.adoc[PUT Update an allowed IP] +*** xref:rest-api:endpoints/delete-an-allowed-ip.adoc[DELETE Delete an allowed IP] +** In-database users +*** xref:rest-api:endpoints/create-an-in-database-user.adoc[POST Create an in-database user] +*** xref:rest-api:endpoints/list-in-database-users.adoc[GET List in-database users] +*** xref:rest-api:endpoints/update-a-user-password.adoc[PUT Update a user password] +*** xref:rest-api:endpoints/delete-an-in-database-user.adoc[DELETE Delete an in-database user] +** Organization +*** xref:rest-api:endpoints/get-org-metadata.adoc[GET Get org metadata] +*** xref:rest-api:endpoints/list-org-users.adoc[GET List org users] +*** xref:rest-api:endpoints/update-a-users-role.adoc[PUT Update a user's role] ** xref:rest-api:definitions.adoc[Definitions] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc new file mode 100644 index 00000000..7bdfe284 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc @@ -0,0 +1,91 @@ += Add an allowed IP +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/allow_list +.... + +Add a new allowed IP to the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Body**|**request** + +__required__|Allowed IP request|xref:rest-api:definitions.adoc#_allowedip[AllowedIP] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post_response_200,Response 200>> +|**400**|Bad Request|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post_response_400,Response 400>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_allowedip[AllowedIP] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post_response_400]] +**Response 400** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_post_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc new file mode 100644 index 00000000..717fed88 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc @@ -0,0 +1,52 @@ += Create a workgroup +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups +.... + +Create workgroups in your org + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body**|**request** + +__required__|Create workgroup request|xref:rest-api:definitions.adoc#_createworkgrouprequest[CreateWorkgroupRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_post_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workgroup[Workgroup] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc new file mode 100644 index 00000000..637b257b --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc @@ -0,0 +1,58 @@ += Create a workspace schedule +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules +.... + +Create a new workspace schedule for a given workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**body** + +__required__|Workspace Schedule|xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_post_response_200,Response 200>> +|**400**|Bad Request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc new file mode 100644 index 00000000..aa474f5a --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc @@ -0,0 +1,54 @@ += Create a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces +.... + +Create workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Body**|**request** + +__required__|Create workspace request|xref:rest-api:definitions.adoc#_createworkspacerequest[CreateWorkspaceRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_post_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workspace[Workspace] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc new file mode 100644 index 00000000..5890b950 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc @@ -0,0 +1,58 @@ += Create an in-database user +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +.... + +Create a new in-database GSQL user in the specified workspace and workgroup. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|In-database user request|xref:rest-api:definitions.adoc#_indatabaseuserrequest[InDatabaseUserRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully created the in-database GSQL user.|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_post_response_200,Response 200>> +|**400**|Bad request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_tgiam_iamuser[tgIAM.IAMUser] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc new file mode 100644 index 00000000..692f7315 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc @@ -0,0 +1,40 @@ += Delete a backup +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups +.... + +Delete a backup for a workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|Delete Backup Request|xref:rest-api:definitions.adoc#_deletebackuprequest[DeleteBackupRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully deleted the backup.|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**400**|Bad request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc new file mode 100644 index 00000000..b0fc261f --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc @@ -0,0 +1,36 @@ += Delete a database +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} +.... + +Delete database in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**databaseID** + +__required__|Database ID|string +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc new file mode 100644 index 00000000..120409c0 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc @@ -0,0 +1,52 @@ += Delete a workgroup +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID} +.... + +Delete workgroup detail in your org + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_delete_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_delete_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc new file mode 100644 index 00000000..13aec7d9 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc @@ -0,0 +1,53 @@ += Delete a workspace schedule +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} +.... + +Delete an existing workspace schedule for a given workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Path**|**scheduleID** + +__required__|Schedule ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_delete_response_200,Response 200>> +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_delete_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc new file mode 100644 index 00000000..0394347a --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc @@ -0,0 +1,36 @@ += Delete a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} +.... + +Delete workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc new file mode 100644 index 00000000..09898eba --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc @@ -0,0 +1,73 @@ += Delete an allowed IP +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} +.... + +Delete an existing allowed IP from the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**id** + +__required__|Allowed IP ID|string +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_delete_response_200,Response 200>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_delete_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_delete_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_delete_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc new file mode 100644 index 00000000..46825ec3 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc @@ -0,0 +1,40 @@ += Delete an in-database user +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +.... + +Delete an in-database GSQL user in the specified workspace and workgroup. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|In-database user request|xref:rest-api:definitions.adoc#_indatabaseuserrequest[InDatabaseUserRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully deleted the in-database GSQL user.|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**400**|Bad request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc b/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc new file mode 100644 index 00000000..6668df43 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc @@ -0,0 +1,71 @@ += Disable the allow list +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable +.... + +Disable the allow list for the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_disable_put_response_200,Response 200>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_disable_put_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_disable_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_disable_put_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc b/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc new file mode 100644 index 00000000..51b3bf21 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc @@ -0,0 +1,71 @@ += Enable the allow list +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable +.... + +Enable the allow list for the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_enable_put_response_200,Response 200>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_enable_put_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_enable_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_enable_put_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc new file mode 100644 index 00000000..70bb1667 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc @@ -0,0 +1,54 @@ += Get a database +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} +.... + +Get database in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**databaseID** + +__required__|Database ID|string +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_get_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_tgdatabase[TGDatabase] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc new file mode 100644 index 00000000..2b07a840 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc @@ -0,0 +1,52 @@ += Get a workgroup +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID} +.... + +Get workgroup detail in your org + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_get_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workgroup[Workgroup] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc new file mode 100644 index 00000000..3f054034 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc @@ -0,0 +1,54 @@ += Get a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} +.... + +Get workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_get_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workspace[Workspace] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc new file mode 100644 index 00000000..4c2ac343 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc @@ -0,0 +1,55 @@ += Get backup schedule +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule +.... + +Get the backup schedule for a workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully got the backup schedule.|<<_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_schedule_get_response_200,Response 200>> +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_schedule_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_backupschedule[BackupSchedule] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc new file mode 100644 index 00000000..58bba65d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc @@ -0,0 +1,83 @@ += Get current IP +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current +.... + +Get the current IP and check if it is allowed in the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get_response_200,Response 200>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get_result,Result>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get_result]] +**Result** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|** IsAllowed** + +__optional__|boolean +|**CurrentIP** + +__optional__|string +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_current_get_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc new file mode 100644 index 00000000..fd061c02 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc @@ -0,0 +1,43 @@ += Get org metadata +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workspaces/meta +.... + +Get regions/tgVersions/workspaceTypes supported for your org + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workspaces_meta_get_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workspaces_meta_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_resource_manager_handler_getmetadata_metadata[resource_manager_handler.GetMetadata.metadata] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc new file mode 100644 index 00000000..9b9ef370 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc @@ -0,0 +1,57 @@ += Get restore status +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status +.... + +Get the status of a backup restore job + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**job** + +__required__|Job ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully got the backup restore status.|<<_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_restore_job_status_get_response_200,Response 200>> +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_restore_job_status_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_backuprestorestatus[BackupRestoreStatus] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc new file mode 100644 index 00000000..9a8e4c2e --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc @@ -0,0 +1,51 @@ += Get workspace schedules +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules +.... + +Retrieve the schedule for a given workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_get_response_200,Response 200>> +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|< xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] > array +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc new file mode 100644 index 00000000..412a3992 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc @@ -0,0 +1,71 @@ += List allowed IPs +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/allow_list +.... + +List all allowed IPs in the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_get_response_200,Response 200>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_get_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|< xref:rest-api:definitions.adoc#_allowedip[AllowedIP] > array +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_get_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc new file mode 100644 index 00000000..87698afd --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc @@ -0,0 +1,55 @@ += List backups +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups +.... + +List all backups for a workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully listed the backups.|<<_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_get_response_200,Response 200>> +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workspaces_workspaceid_backups_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|< xref:rest-api:definitions.adoc#_backup[Backup] > array +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc new file mode 100644 index 00000000..ae3d851b --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc @@ -0,0 +1,51 @@ += List in-database users +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +.... + +List all in-database GSQL users in the specified workspace and workgroup. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully listed the in-database GSQL users.|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_get_response_200,Response 200>> +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_dbuser_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|< xref:rest-api:definitions.adoc#_tgiam_iamuser[tgIAM.IAMUser] > array +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc new file mode 100644 index 00000000..c1e52cfd --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc @@ -0,0 +1,25 @@ += List org users +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/users +.... + +List of users in the org. Note: this endpoint is not APIKEY compatible + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_org_handler_orglistuserresponse[org_handler.OrgListUserResponse] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc new file mode 100644 index 00000000..692edac5 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc @@ -0,0 +1,43 @@ += List workgroups +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +GET /controller/v4/v2/workgroups +.... + +Get workgroups for your org + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_get_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_get_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|< xref:rest-api:definitions.adoc#_workgroup[Workgroup] > array +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc new file mode 100644 index 00000000..f794be82 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc @@ -0,0 +1,36 @@ += Pause a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause +.... + +Pause workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc new file mode 100644 index 00000000..f0eb70af --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc @@ -0,0 +1,36 @@ += Refresh a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh +.... + +Refresh workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc new file mode 100644 index 00000000..3f7c9ba6 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc @@ -0,0 +1,58 @@ += Restore a backup +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore +.... + +Restore a backup for a workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|Restore Backup Request|xref:rest-api:definitions.adoc#_restorebackuprequest[RestoreBackupRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully restored the backup.|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_backups_restore_post_response_200,Response 200>> +|**400**|Bad request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_backups_restore_post_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc new file mode 100644 index 00000000..795682ba --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc @@ -0,0 +1,36 @@ += Resume a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume +.... + +Resume workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc new file mode 100644 index 00000000..9033f507 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc @@ -0,0 +1,40 @@ += Set backup schedule +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule +.... + +Set a backup schedule for a workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|Backup Schedule|xref:rest-api:definitions.adoc#_backupschedule[BackupSchedule] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully set the backup schedule.|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**400**|Bad request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc new file mode 100644 index 00000000..0f721d1d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc @@ -0,0 +1,56 @@ += Update a database +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} +.... + +Update database in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**databaseID** + +__required__|Database ID|string +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Body**|**request** + +__required__|Update database request|xref:rest-api:definitions.adoc#_updatetgdatabaserequest[UpdateTGDatabaseRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_put_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_databases_databaseid_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_tgdatabase[TGDatabase] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc new file mode 100644 index 00000000..371582d3 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc @@ -0,0 +1,40 @@ += Update a user password +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +.... + +Update the password of an in-database GSQL user in the specified workspace and workgroup. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|In-database user request|xref:rest-api:definitions.adoc#_indatabaseuserrequest[InDatabaseUserRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully updated the in-database GSQL password.|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**400**|Bad request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc new file mode 100644 index 00000000..c2392f57 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc @@ -0,0 +1,36 @@ += Update a user's role +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/users/{userId}/roles +.... + +Updates the role of an org user. Note: this endpoint is not APIKEY compatible + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**userId** + +__required__|Id of the user|string +|**Body**|**body** + +__required__|Roles of the user|xref:rest-api:definitions.adoc#_org_handler_putorgusersroles[org_handler.PutOrgUsersRoles] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**204**|No Content|No Content +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc new file mode 100644 index 00000000..9aa28187 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc @@ -0,0 +1,54 @@ += Update a workgroup +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID} +.... + +Update workgroups in your org + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Body**|**request** + +__required__|Update workgroup request|xref:rest-api:definitions.adoc#_updateworkgrouprequest[UpdateWorkgroupRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_put_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workgroup[Workgroup] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc new file mode 100644 index 00000000..35d3a2ed --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc @@ -0,0 +1,60 @@ += Update a workspace schedule +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} +.... + +Update an existing workspace schedule for a given workspace + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Path**|**scheduleID** + +__required__|Schedule ID|string +|**Body**|**body** + +__required__|Workspace Schedule|xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_put_response_200,Response 200>> +|**400**|Bad Request|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_middleware_response[middleware.Response] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_schedules_scheduleid_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc new file mode 100644 index 00000000..f008f326 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc @@ -0,0 +1,56 @@ += Update a workspace +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} +.... + +Update workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Path**|**workspaceID** + +__required__|Workspace ID|string +|**Body**|**request** + +__required__|Update workspace request|xref:rest-api:definitions.adoc#_updateworkspacerequest[UpdateWorkspaceRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_put_response_200,Response 200>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_workspaces_workspaceid_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_workspace[Workspace] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc new file mode 100644 index 00000000..4a06a4cf --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc @@ -0,0 +1,94 @@ += Update an allowed IP +// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. + +[.api-request] +.... +PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} +.... + +Update an existing allowed IP in the workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path**|**id** + +__required__|Allowed IP ID|string +|**Path**|**workgroupID** + +__required__|Workgroup ID|string +|**Body**|**request** + +__required__|Allowed IP request|xref:rest-api:definitions.adoc#_allowedip[AllowedIP] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put_response_200,Response 200>> +|**400**|Bad Request|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put_response_400,Response 400>> +|**500**|Internal Server Error|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put_response_500,Response 500>> +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put_response_200]] +**Response 200** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|xref:rest-api:definitions.adoc#_allowedip[AllowedIP] +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put_response_400]] +**Response 400** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +[[_https_api_tgcloud_io_controller_v4_v2_workgroups_workgroupid_allow_list_id_put_response_500]] +**Response 500** + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__|boolean +|**ErrorDetails** + +__optional__|< xref:rest-api:definitions.adoc#_middleware_error[middleware.Error] > array +|**Message** + +__optional__|string +|**RequestID** + +__optional__|string +|**Result** + +__optional__|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` From 3e6067e0553a3c766b68091f6e0daaabd419f20c Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:08:45 +0530 Subject: [PATCH 02/22] docs(savanna): rewrite REST API overview and supporting guides Replace the preview landing page and standalone authentication topic with a task-oriented overview, data-plane guide, and API key how-to under rest-api. --- .../rest-api/images/create-api-key.png | Bin 0 -> 122559 bytes .../rest-api/pages/authentication.adoc | 23 -- .../rest-api/pages/create-api-key.adoc | 29 ++ .../rest-api/pages/data-plane-apis.adoc | 98 +++++++ .../modules/rest-api/pages/definitions.adoc | 45 ++++ .../rest-api/pages/index-previous.adoc | 249 ++++++++++++++++++ .../savanna/modules/rest-api/pages/index.adoc | 122 +++++++-- 7 files changed, 516 insertions(+), 50 deletions(-) create mode 100644 modules/savanna/modules/rest-api/images/create-api-key.png delete mode 100644 modules/savanna/modules/rest-api/pages/authentication.adoc create mode 100644 modules/savanna/modules/rest-api/pages/create-api-key.adoc create mode 100644 modules/savanna/modules/rest-api/pages/data-plane-apis.adoc create mode 100644 modules/savanna/modules/rest-api/pages/index-previous.adoc diff --git a/modules/savanna/modules/rest-api/images/create-api-key.png b/modules/savanna/modules/rest-api/images/create-api-key.png new file mode 100644 index 0000000000000000000000000000000000000000..98d11380336a0d1a89515175ef27a38d9e142154 GIT binary patch literal 122559 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�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" -``` - diff --git a/modules/savanna/modules/rest-api/pages/create-api-key.adoc b/modules/savanna/modules/rest-api/pages/create-api-key.adoc new file mode 100644 index 00000000..61684520 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/create-api-key.adoc @@ -0,0 +1,29 @@ += Create an API key +:page-aliases: administration:settings/how2-create-api-key.adoc + +An API key authenticates requests to the xref:savanna:rest-api:index.adoc[Savanna REST API]. Every request sends it in the `x-api-key` header. Only an organization administrator can create one. + +== Create a key + +. In Savanna, open *Admin* → *Settings*. If you don't see *Admin*, you don't have the organization administrator role. Reach out to an organization administrator to mint a key with the access you need. +. Open the *API Keys* tab. +. Click *Create API Keys*. +. Give the key a name you will recognize later, such as `ci-provision` or `local-dev`. Grant only the permissions that job needs. Set an expiration if the key is for a short-lived environment. If you're unsure which role to pick, you can find more about roles and what they mean in xref:savanna:administration:how2-access-mgnt.adoc[Access management]. ++ +image::create-api-key.png[] +. Copy the key and store it securely. Savanna does not keep the plaintext, so you cannot retrieve the value later. If you lose it, create a new key. + +== Verify the API key + +This curl lists the workgroups in your organization so you can confirm the key works. Export it as `TG_API_KEY`. Do not put the key in source control. + +[source,bash] +---- +export TG_API_KEY='' + +curl -sS "https://api.tgcloud.io/controller/v4/v2/workgroups" \ + -H "Content-Type: application/json" \ + -H "x-api-key: $TG_API_KEY" +---- + +A JSON list of workgroups means the key works. Use the same header on every other xref:savanna:rest-api:index.adoc#_endpoints[control-plane endpoint]. diff --git a/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc b/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc new file mode 100644 index 00000000..dbe07abc --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc @@ -0,0 +1,98 @@ += Data-plane APIs (REST++ and GSQL) +:experimental: + +The xref:savanna:rest-api:index.adoc[Savanna REST API] is the *control plane*: it manages the resources _around_ your graph (workgroups, workspaces, backups). To read and write the data _inside_ a workspace, you call that workspace's *data-plane* APIs directly. + +The data-plane APIs are the standard TigerGraph database endpoints, fully documented in the https://www.tigergraph.com/docs/tigergraph-server/4.3/api/[TigerGraph DB REST Endpoints^] reference. That reference is written for self-managed installs, so its examples use `localhost:14240` and username/password auth. This page shows how to reach and authenticate the same endpoints on *Savanna*. + +== Two interfaces, one workspace + +The data plane exposes two interfaces on the same workspace host. They are not separate planes; they are two doors into the same database. + +[options="header",cols="1a,3a"] +|=== +|Interface |Use it for + +|*REST{plus}{plus}* (`/restpp/...`) +|Execute and move data at speed: run installed queries, and read or upsert vertices and edges. + +|*GSQL* (`/gsql/...`) +|Author and administer: define the schema, load data, write and *install* queries, and manage in-database users. Installing a query is what makes it callable through REST{plus}{plus}. +|=== + +[TIP] +==== +Rule of thumb: *GSQL* to author and administer, *REST{plus}{plus}* to execute and move data. +==== + +== Workspace host and base paths + +Data-plane requests go to your *workspace host*, not to `api.tgcloud.io`. On Savanna the host is reached over HTTPS on port `443`, so you do not append `:14240` as the TigerGraph DB docs show for self-managed installs. + +[source] +---- +https://.i.tgcloud.io/restpp/... # REST++ interface +https://.i.tgcloud.io/gsql/... # GSQL interface +---- + +Find your workspace host in the Savanna console from the workspace's *Connect* dialog, or from the control plane with xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace]. + +== Authentication + +The data plane does *not* accept the control-plane API key. Where the control plane uses an `x-api-key` header, the data plane authenticates with a xref:savanna:administration:settings/how2-create-database-secret.adoc[database secret] issued for the workspace. + +. xref:savanna:administration:settings/how2-create-database-secret.adoc[Create a database secret] for the workspace. +. Either pass the secret directly, or exchange it for a bearer token, on every request: + +[source,bash] +---- +# Option A: pass the secret directly +-H "Authorization: GSQL-Secret " + +# Option B: exchange the secret for a bearer token, then send the token +-H "Authorization: Bearer " +---- + +Tokens are requested per graph. You can find how to exchange a secret for a token, and which privileges each needs, in https://www.tigergraph.com/docs/tigergraph-server/4.3/user-access/user-credentials/[User credentials^]. + +[CAUTION] +==== +A database secret does not expire and carries the privileges of its user. Treat it like a password: keep it server-side, never in client code or source control, and revoke it if exposed. +==== + +== Example: run an installed query + +This calls the installed query `tg_wcc` on the `Transaction_Fraud` graph in one workspace. It is the same `POST /restpp/query/\{graph}/\{queryName}` endpoint from the TigerGraph DB docs, addressed at a Savanna workspace host and authenticated with a database secret. + +[source,bash] +---- +curl -X POST "https://.i.tgcloud.io/restpp/query/Transaction_Fraud/tg_wcc" \ + -H "Authorization: Bearer " \ + --data-raw '{"print_limit": 0, "print_results": false, "result_attribute": ""}' +---- + +A successful call returns JSON with `version`, `error`, `message`, and `results` fields, described under https://www.tigergraph.com/docs/tigergraph-server/4.3/api/[Output responses^]. + +[source,json] +---- +{ + "version": { "api": "v2", "schema": 0 }, + "error": false, + "message": "", + "results": [ { "@@components": 128 } ] +} +---- + +== Endpoint reference + +Savanna does not duplicate the data-plane endpoint catalog. You can find the full list of endpoints, parameters, and payload formats in the TigerGraph DB reference; apply the Savanna host and authentication from this page: + +* https://www.tigergraph.com/docs/tigergraph-server/4.3/api/[REST Endpoints overview^]. How to send requests, format parameters, and read responses. +* https://www.tigergraph.com/docs/tigergraph-server/4.3/api/built-in-endpoints[RESTPP & built-in endpoints^]. Run queries and read or upsert graph data. +* https://www.tigergraph.com/docs/tigergraph-server/4.3/api/[GSQL endpoints^]. Schema, loading, query installation, and user management. + +== Related topics + +* xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. Generated curl, Python, and JavaScript from the Savanna console. +* xref:savanna:administration:settings/how2-create-database-secret.adoc[Create a database secret]. The credential the data plane uses. +* xref:savanna:rest-api:index.adoc[Savanna REST API]. The control-plane API for managing workspaces. diff --git a/modules/savanna/modules/rest-api/pages/definitions.adoc b/modules/savanna/modules/rest-api/pages/definitions.adoc index 660a0a03..acdee9fd 100644 --- a/modules/savanna/modules/rest-api/pages/definitions.adoc +++ b/modules/savanna/modules/rest-api/pages/definitions.adoc @@ -431,6 +431,27 @@ __optional__|<> |=== +[[_workspaceaddonsrequest]] +=== WorkspaceAddonsRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**addons_id** + +__required__|string +|**enable** + +__required__|boolean +|**enable_configuration** + +__optional__|object +|**is_free** + +__optional__|boolean +|**unique_name** + +__optional__|string +|**workspace_id** + +__optional__|string +|=== + + [[_workspaceschedule]] === WorkspaceSchedule @@ -488,6 +509,11 @@ __optional__|string |=== +[[_constants_platform]] +=== constants.Platform +__Type__ : enum (aws, azure, gcp) + + [[_middleware_error]] === middleware.Error @@ -638,6 +664,25 @@ __optional__|string |=== +[[_pb_addonpricing]] +=== pb.AddOnPricing + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**platform** + +__optional__|string +|**price_per_hour** + +__optional__|number +|**region** + +__optional__|string +|**type** + +__optional__|string +|**workspace_type** + +__optional__|string +|=== + + [[_pb_createapikeyrequest]] === pb.CreateAPIKeyRequest diff --git a/modules/savanna/modules/rest-api/pages/index-previous.adoc b/modules/savanna/modules/rest-api/pages/index-previous.adoc new file mode 100644 index 00000000..254b39d9 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/index-previous.adoc @@ -0,0 +1,249 @@ += Savanna REST API (previous overview) +:experimental: + +// This is a previous draft of the REST API overview, kept temporarily for side-by-side comparison with xref:savanna:rest-api:index.adoc[the current overview]. + +The Savanna REST API is the control plane for TigerGraph Savanna. Use it to provision and manage the resources behind your graphs, such as workgroups, workspaces, backups, networking, and organization users, from your own scripts, services, and CI/CD pipelines instead of the Savanna UI. + +Everything in this reference runs against a single base URL and authenticates with an API key, so you can automate the full lifecycle of a workspace: create it, size it, protect it with backups, schedule it to save cost, and tear it down when you are done. + +== Control plane vs. data plane + +Savanna exposes two different APIs. Knowing which one you need saves time. + +[options="header",cols="1a,3a,3a"] +|=== +|API |What it manages |Where it lives + +|*Control plane* (this reference) +|The resources _around_ your graph: workgroups, workspaces, databases, backups, IP allow lists, schedules, and org users. +|`https://api.tgcloud.io/controller/v4/v2` + +|*Data plane* (REST{plus}{plus}) +|The data _inside_ a workspace: schema, loading jobs, GSQL queries, and results. +|Your workspace host, for example `https://.i.tgcloud.io` +|=== + +For data-plane calls against a running workspace, see xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. To drive Savanna with an AI agent in natural language, see xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP]. + +== The resource model + +Control-plane resources are nested. Most paths follow this hierarchy, so understanding it makes the endpoints predictable. + +[options="header",cols="1a,4a"] +|=== +|Resource |What it is + +|*Organization* +|Your Savanna account boundary. Owns users, roles, and quotas. + +|*Workgroup* +|A container that groups related workspaces and holds shared settings such as the IP allow list. Lives in a cloud provider and region. + +|*Workspace* +|A running, independently scalable compute environment attached to a *database*. This is what you connect to, query, back up, pause, and schedule. + +|*Database* +|The persistent storage for a workspace's graph data, managed within its workgroup. +|=== + +A typical path reflects that nesting: + +[source] +---- +/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups +---- + +== Base URL + +All control-plane endpoints are relative to: + +[source] +---- +https://api.tgcloud.io/controller/v4/v2 +---- + +Requests and responses use `application/json`. + +== Authentication + +Authenticate every control-plane request with an API key passed in the `x-api-key` header. + +[source,bash] +---- +curl -X GET "https://api.tgcloud.io/controller/v4/v2/workgroups" \ + -H "Content-Type: application/json" \ + -H "x-api-key: " +---- + +Savanna uses different credentials for different layers. Pick the one that matches the call you are making. + +[options="header",cols="2a,2a,3a,3a"] +|=== +|Credential |Sent as |Use it for |Where to get it + +|*Control-plane API key* +|`x-api-key` header +|Every endpoint in this reference (workgroups, workspaces, backups, org). +|xref:savanna:rest-api:create-api-key.adoc[Create an API key] + +|*Database secret* +|Bearer token on the workspace host +|Data-plane REST{plus}{plus} queries against a running workspace. +|xref:savanna:administration:settings/how2-create-database-secret.adoc[Create a database secret] + +|*In-database GSQL user* +|Managed through this API, used by the graph engine +|GSQL and role-based access _inside_ a workspace. +|<> (below) +|=== + +[TIP] +==== +Keep API keys out of source control. Store them as environment variables or in a secrets manager, and rotate them from the Savanna console. +==== + +== What you can do + +The sections below group every documented endpoint by the job it does. Each link jumps straight to its request, parameters, and response. + +=== Provision graph infrastructure + +Stand up and tear down the workgroups, workspaces, and databases that host your graphs. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] |POST |Create a workgroup in your org. +|xref:savanna:rest-api:endpoints/list-workgroups.adoc[List workgroups] |GET |List the workgroups in your org. +|xref:savanna:rest-api:endpoints/get-a-workgroup.adoc[Get a workgroup] |GET |Retrieve one workgroup's details. +|xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup] |PUT |Change a workgroup's settings. +|xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup] |DELETE |Remove a workgroup. +|xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] |POST |Create a workspace in a workgroup. +|xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace] |GET |Retrieve a workspace, including its status. +|xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace] |PUT |Resize or reconfigure a workspace. +|xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace] |DELETE |Remove a workspace. +|xref:savanna:rest-api:endpoints/get-a-database.adoc[Get a database] |GET |Retrieve a database in a workgroup. +|xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database] |PUT |Change a database's settings. +|xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database] |DELETE |Remove a database from a workgroup. +|=== + +=== Run workspaces on your terms + +Control when a workspace is running so it is available when you need it and idle when you don't. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace] |POST |Start a paused workspace. +|xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace] |POST |Stop a workspace to save cost. +|xref:savanna:rest-api:endpoints/refresh-a-workspace.adoc[Refresh a workspace] |POST |Refresh a workspace. +|xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule] |POST |Schedule automatic pause and resume. +|xref:savanna:rest-api:endpoints/get-workspace-schedules.adoc[Get workspace schedules] |GET |List a workspace's schedules. +|xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule] |PUT |Change an existing schedule. +|xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule] |DELETE |Remove a schedule. +|=== + +=== Protect data with backups + +Back up a workspace, restore it, and automate backups on a recurring schedule. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/list-backups.adoc[List backups] |GET |List a workspace's backups. +|xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup] |POST |Restore a workspace from a backup. +|xref:savanna:rest-api:endpoints/get-restore-status.adoc[Get restore status] |GET |Check the status of a restore job. +|xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup] |DELETE |Remove a backup. +|xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule] |GET |Retrieve the recurring backup schedule. +|xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule] |POST |Create or update the backup schedule. +|=== + +[NOTE] +==== +A _backup schedule_ automates snapshots of your data. A _workspace schedule_ automates pausing and resuming compute. They are separate features on separate endpoints. +==== + +=== Control who can connect + +Restrict network access to a workgroup and manage the database users inside a workspace. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP] |POST |Add an IP or CIDR range to the allow list. +|xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs] |GET |List the allow list entries. +|xref:savanna:rest-api:endpoints/get-current-ip.adoc[Get current IP] |GET |Return the caller's public IP. +|xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP] |PUT |Edit an allow list entry. +|xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP] |DELETE |Remove an allow list entry. +|xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list] |PUT |Enforce the IP allow list. +|xref:savanna:rest-api:endpoints/disable-the-allow-list.adoc[Disable the allow list] |PUT |Stop enforcing the IP allow list. +|=== + +[#indb-users] +==== Manage in-database users + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user] |POST |Create a GSQL user in a workspace. +|xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users] |GET |List the workspace's GSQL users. +|xref:savanna:rest-api:endpoints/update-a-user-password.adoc[Update a user password] |PUT |Change an in-database user's password. +|xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user] |DELETE |Remove a GSQL user. +|=== + +=== Administer your organization + +Discover available capacity and manage the people in your org. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/get-org-metadata.adoc[Get org metadata] |GET |Discover regions, sizes, and other capacity metadata. +|xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users] |GET |List the users in your org. +|xref:savanna:rest-api:endpoints/update-a-users-role.adoc[Update a user's role] |PUT |Change an org user's role. +|=== + +== Get started + +Provision your first workspace end to end, then connect to it on the data plane. + +. xref:savanna:rest-api:create-api-key.adoc[Create an API key] and export it as `x-api-key`. +. Call xref:savanna:rest-api:endpoints/get-org-metadata.adoc[Get org metadata] to see the regions and sizes available to you. +. xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] in your chosen region. +. xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] in that workgroup. +. Poll xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace] until its status is ready. +. xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs] to load data and run GSQL on the data plane. + +== Reference + +[.start-cards,cols="2",grid=none,frame=none, separator=¦] +|=== +¦ +xref:savanna:rest-api:index.adoc#_authentication[Authentication] + +Authenticate to the control plane before you call any endpoint. +¦ +xref:savanna:rest-api:index.adoc#_endpoints[Endpoints] + +Browse every control-plane endpoint with parameters and responses. +¦ +xref:savanna:rest-api:definitions.adoc[Definitions] + +Look up the request and response schemas used by the API. +¦ +xref:savanna:rest-api:create-api-key.adoc[Create an API key] + +Generate a key for scripts and services that call the control plane. +|=== + +== Where to go next + +* xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs] for data-plane curl, Python, and JavaScript examples. +* xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP] when you want an AI agent to work against your database. diff --git a/modules/savanna/modules/rest-api/pages/index.adoc b/modules/savanna/modules/rest-api/pages/index.adoc index 8bec0e47..0ffca169 100644 --- a/modules/savanna/modules/rest-api/pages/index.adoc +++ b/modules/savanna/modules/rest-api/pages/index.adoc @@ -1,39 +1,107 @@ -= REST API reference (Preview) += Savanna REST API :experimental: +:page-aliases: rest-api.adoc, authentication.adoc -Control-plane REST API for managing TigerGraph Savanna (workgroups, workspaces, and related resources) via `api.tgcloud.io`. +Use the Savanna REST (Representational State Transfer) API to provision workgroups and workspaces, protect data with backups, control network access, and administer your organization programmatically. -For data-plane queries on a workspace, see xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. -For agent-based access, see xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP]. +The Savanna REST API is the *control plane* for TigerGraph Savanna. It manages the resources around your graph so you can automate the full lifecycle of a workspace from your own scripts, services, and CI/CD pipelines instead of the Savanna UI. Every endpoint is relative to a single base URL: -[IMPORTANT] -==== -The TigerGraph Savanna REST API is currently in preview. Features and endpoints may change as the API evolves. -==== +[source] +---- +https://api.tgcloud.io +---- -== Reference +To read and write the data inside a workspace (schema, loading jobs, and GSQL), use the workspace's xref:savanna:rest-api:data-plane-apis.adoc[data-plane APIs (REST{plus}{plus} and GSQL)]. You can also generate snippets from the console with xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs], or xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP] to drive Savanna in natural language. -[.start-cards,cols="2",grid=none,frame=none, separator=¦] -|=== -¦ -xref:savanna:rest-api:authentication.adoc[Authentication] +== The resource model -Authenticate to the control plane before you call any endpoint. -¦ -xref:savanna:rest-api:endpoints.adoc[Endpoints] +Control-plane resources are nested, which makes the endpoints predictable: an *organization* owns *workgroups*, a workgroup contains *workspaces*, and each workspace is attached to a *database*. -Browse the available control-plane endpoints. -¦ -xref:savanna:rest-api:definitions.adoc[Definitions] +== Authentication -Look up request and response schemas used by the API. -¦ -xref:savanna:administration:settings/how2-create-api-key.adoc[Create an API key] +Every request to this API needs an API key in the `x-api-key` header. If you don't have a key yet, xref:savanna:rest-api:create-api-key.adoc[create an API key] in Savanna. Only an organization administrator can create one. If you don't have that role, reach out to an organization administrator to mint a key with the access you need. -Generate a key for scripts and services that call the control plane. -|=== +== Endpoints -== Where to go next +The list below is grouped by task. Each endpoint has its own page with the parameters, payload, and responses for that call. -* xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs] for data-plane curl, Python, and JavaScript examples. -* xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP] when you want an AI agent to work against your database. +=== Provision graph infrastructure + +Create, update, and delete the workgroups, workspaces, and databases that host your graphs. + +* xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup]: create a workgroup in your organization. +* xref:savanna:rest-api:endpoints/list-workgroups.adoc[List workgroups]: list the workgroups in your organization. +* xref:savanna:rest-api:endpoints/get-a-workgroup.adoc[Get a workgroup]: retrieve a single workgroup's details. +* xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup]: change a workgroup's settings. +* xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup]: remove a workgroup. +* xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace]: create a workspace in a workgroup. +* xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace]: retrieve a workspace, including its status. +* xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace]: resize or reconfigure a workspace. +* xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]: remove a workspace. +* xref:savanna:rest-api:endpoints/get-a-database.adoc[Get a database]: retrieve a database in a workgroup. +* xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database]: change a database's settings. +* xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database]: remove a database from a workgroup. + +=== Run workspaces on your terms + +Control when a workspace is running so it is available when you need it and idle when you don't. + +* xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace]: start a paused workspace. +* xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace]: stop a workspace to save cost. +* xref:savanna:rest-api:endpoints/refresh-a-workspace.adoc[Refresh a workspace]: refresh a workspace. +* xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]: schedule automatic pause and resume. +* xref:savanna:rest-api:endpoints/get-workspace-schedules.adoc[Get workspace schedules]: list a workspace's schedules. +* xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule]: change an existing schedule. +* xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule]: remove a schedule. + +=== Protect data with backups + +Back up a workspace, restore it, and automate backups on a recurring schedule. + +* xref:savanna:rest-api:endpoints/list-backups.adoc[List backups]: list a workspace's backups. +* xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup]: restore a workspace from a backup. +* xref:savanna:rest-api:endpoints/get-restore-status.adoc[Get restore status]: check the status of a restore job. +* xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup]: remove a backup. +* xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule]: retrieve the recurring backup schedule. +* xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule]: create or update the recurring backup schedule. + +NOTE: A _backup schedule_ automates snapshots of your data. A _workspace schedule_ automates pausing and resuming compute. They are separate features on separate endpoints. + +=== Control who can connect + +Restrict network access to a workgroup and manage the database users inside a workspace. + +* xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP]: add an IP or CIDR range to the allow list. +* xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs]: list the allow list entries. +* xref:savanna:rest-api:endpoints/get-current-ip.adoc[Get current IP]: return the caller's public IP address. +* xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP]: edit an allow list entry. +* xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP]: remove an allow list entry. +* xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list]: enforce the IP allow list. +* xref:savanna:rest-api:endpoints/disable-the-allow-list.adoc[Disable the allow list]: stop enforcing the IP allow list. +* xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]: create a GSQL user in a workspace. +* xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users]: list the workspace's GSQL users. +* xref:savanna:rest-api:endpoints/update-a-user-password.adoc[Update a user password]: change an in-database user's password. +* xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user]: remove a GSQL user. + +=== Administer your organization + +Discover available capacity and manage the people in your org. + +* xref:savanna:rest-api:endpoints/get-org-metadata.adoc[Get org metadata]: discover the regions, sizes, and capacity available to your org. +* xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users]: list the users in your organization. +* xref:savanna:rest-api:endpoints/update-a-users-role.adoc[Update a user's role]: change an org user's role. + +== Common use cases + +* *Provision on demand*: stand up a full environment with xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] and xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace], then tear it down with xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]. +* *Control cost automatically*: pause idle compute with xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace] and xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace], or automate it with xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]. +* *Protect your data*: snapshot and recover with xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule] and xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup]. +* *Secure access*: restrict traffic with xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP] and xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list], and manage logins with xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]. +* *CI/CD integration*: create ephemeral workspaces for tests or preview environments, polling xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace] until the status is ready. + +== Related topics + +* xref:savanna:rest-api:create-api-key.adoc[Create an API key]. Generate a key in Organization Settings. +* xref:savanna:rest-api:definitions.adoc[Definitions]. The request and response schemas used by the API. +* xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. Data-plane curl, Python, and JavaScript examples. +* xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP]. Drive Savanna with an AI agent. From dff3598bd033e933af54daabab226359bf97cebc Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:08:48 +0530 Subject: [PATCH 03/22] docs(savanna): point administration links at REST API API key guide Move the API key how-to into the rest-api module and update nav and xrefs across administration and overview. --- .../savanna/modules/administration/nav.adoc | 2 +- .../modules/administration/pages/index.adoc | 2 +- .../pages/settings/how2-create-api-key.adoc | 48 ------------------- .../settings/how2-create-database-secret.adoc | 2 +- .../administration/pages/settings/index.adoc | 2 +- .../savanna/modules/overview/pages/index.adoc | 2 +- 6 files changed, 5 insertions(+), 53 deletions(-) delete mode 100644 modules/savanna/modules/administration/pages/settings/how2-create-api-key.adoc diff --git a/modules/savanna/modules/administration/nav.adoc b/modules/savanna/modules/administration/nav.adoc index e13898c1..77e5878a 100644 --- a/modules/savanna/modules/administration/nav.adoc +++ b/modules/savanna/modules/administration/nav.adoc @@ -15,5 +15,5 @@ ** Settings *** xref:administration:settings/index.adoc[Overview] *** xref:administration:settings/how2-use-organization-mgnt.adoc[Organization management] -*** xref:administration:settings/how2-create-api-key.adoc[API keys] +*** xref:savanna:rest-api:create-api-key.adoc[API keys] *** xref:administration:settings/how2-create-database-secret.adoc[Database secrets] diff --git a/modules/savanna/modules/administration/pages/index.adoc b/modules/savanna/modules/administration/pages/index.adoc index 3f7466cc..01f7fea6 100644 --- a/modules/savanna/modules/administration/pages/index.adoc +++ b/modules/savanna/modules/administration/pages/index.adoc @@ -20,7 +20,7 @@ xref:savanna:administration:settings/how2-use-organization-mgnt.adoc[Organizatio Configure organization-level options and preferences. ¦ -xref:savanna:administration:settings/how2-create-api-key.adoc[Create an API key] +xref:savanna:rest-api:create-api-key.adoc[Create an API key] Authenticate scripts and services against the control plane. |=== diff --git a/modules/savanna/modules/administration/pages/settings/how2-create-api-key.adoc b/modules/savanna/modules/administration/pages/settings/how2-create-api-key.adoc deleted file mode 100644 index fd2f7e04..00000000 --- a/modules/savanna/modules/administration/pages/settings/how2-create-api-key.adoc +++ /dev/null @@ -1,48 +0,0 @@ -= API Keys -:experimental: - -As an organization administrator, you have access to organization management features that allow you to configure organization settings. - -[IMPORTANT] -==== -The TigerGraph Savanna REST API is currently in preview version. Features and endpoints may change as the API evolves. -==== - -== Overview - -API keys are essential for authenticating and securing access to the TigerGraph Savanna REST API. This guide will walk you through the steps to create, configure, and manage your API keys. - -== Creating an API Key - -To create an API key, follow these steps: - -.1. **Navigate to Orgnization Settings:** - - Select the `Admin` → `Settings` menu on the navigation bar. - - If you cannot see the menu, please ask your organization administrator for access. - -.2. **Access the API Keys Section:** - - In the settings dashboard, find and click on the `API Keys` tab at the top. - -.3. **Create a New API Key:** - - Click on the btn:[ Create API Keys] button. - - Provide a name or description for the API key to help you identify its purpose later. - - Select the permissions you want to grant to the API key. - - Optionally, set an expiration date for the API key for added security. - -image::create-api-key.png[] - -.4. **Save the API Key:** - - Once the API key is generated, copy it and store it in a secure location. You will not be able to view this key again after you leave the page. - -[NOTE] -==== -Treat your API key like a password. Do not share it or expose it in your code or public repositories. -==== - -== Next Steps - -Next, continue on to learn about xref:savanna:rest-api:authentication.adoc[] or xref:savanna:rest-api:endpoints.adoc[] in TigerGraph Savanna. - -Return to the xref:savanna:overview:index.adoc[Overview] page for a different topic. - - diff --git a/modules/savanna/modules/administration/pages/settings/how2-create-database-secret.adoc b/modules/savanna/modules/administration/pages/settings/how2-create-database-secret.adoc index c107aa15..3055a810 100644 --- a/modules/savanna/modules/administration/pages/settings/how2-create-database-secret.adoc +++ b/modules/savanna/modules/administration/pages/settings/how2-create-database-secret.adoc @@ -33,4 +33,4 @@ A database secret does not expire and remains valid until you delete or revoke i == Where to go next * For secrets in Admin Portal or GraphStudio, see https://www.tigergraph.com/docs/gui/4.3/admin-portal/management/user-management/#manage-secrets[Manage secrets^] and https://www.tigergraph.com/docs/tigergraph-server/4.3/user-access/user-credentials/#_create_a_secret[Create a secret^]. -* Create control-plane credentials instead: xref:savanna:administration:settings/how2-create-api-key.adoc[API keys]. +* Create control-plane credentials instead: xref:savanna:rest-api:create-api-key.adoc[API keys]. diff --git a/modules/savanna/modules/administration/pages/settings/index.adoc b/modules/savanna/modules/administration/pages/settings/index.adoc index 64419681..45da5788 100644 --- a/modules/savanna/modules/administration/pages/settings/index.adoc +++ b/modules/savanna/modules/administration/pages/settings/index.adoc @@ -12,7 +12,7 @@ xref:savanna:administration:settings/how2-use-organization-mgnt.adoc[Organizatio Configure organization-level options and preferences. ¦ -xref:savanna:administration:settings/how2-create-api-key.adoc[Create an API key] +xref:savanna:rest-api:create-api-key.adoc[Create an API key] Authenticate scripts and services against the control plane. ¦ diff --git a/modules/savanna/modules/overview/pages/index.adoc b/modules/savanna/modules/overview/pages/index.adoc index 5d744a6a..a281e0ae 100644 --- a/modules/savanna/modules/overview/pages/index.adoc +++ b/modules/savanna/modules/overview/pages/index.adoc @@ -34,7 +34,7 @@ Start with the core graph workflow. Model your domain, load data, query it, and * xref:savanna:graph-development:load-data/index.adoc[Load data] from local files or connect to S3, GCS, Azure Blob, Snowflake, JDBC, and other sources. * xref:savanna:graph-development:gsql-editor/index.adoc[Write and run GSQL] to create, install, and run graph queries in a live workspace. * xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Query the graph from code] with generated curl, Python, or JavaScript examples for the graph data plane. -* xref:savanna:rest-api:authentication.adoc[Manage Savanna through the REST API] by authenticating to the control plane for workgroups, workspaces, and organization resources. +* xref:savanna:rest-api:index.adoc[Manage Savanna through the REST API] to provision workgroups, workspaces, and organization resources. == Where to go next From db99fe72943ac919f632457e9225c4d9829689ca Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:08:49 +0530 Subject: [PATCH 04/22] build: add hot-reload dev preview for Savanna and antora-ui Watch local Savanna content and antora-ui sources, rebuild the UI bundle, and regenerate the site via gulp devHot and npm run dev. --- gulpfile.js | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++- package.json | 4 +- 2 files changed, 105 insertions(+), 3 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 583c7fe1..e2d8a29f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,16 +1,24 @@ 'use strict' const connect = require('gulp-connect') +const { execSync } = require('child_process') const fs = require('fs') const generator = require('@antora/site-generator-default') const { reload: livereload } = process.env.LIVERELOAD === 'true' ? require('gulp-connect') : {} +const log = require('fancy-log') const { series, src, watch } = require('gulp') +const path = require('path') const yaml = require('js-yaml') const playbookFilename = process.env.PLAYBOOK || 'antora-playbook.yml' const playbook = yaml.load(fs.readFileSync(playbookFilename, 'utf8')) const outputDir = (playbook.output || {}).dir || './build/site' -const serverConfig = { name: 'Preview Site', livereload, port: Number(process.env.PORT) || 5000, root: outputDir } +const serverConfig = { + name: 'Preview Site', + livereload, + port: Number(process.env.PORT) || 5000, + root: outputDir, +} const antoraArgs = ['--playbook', playbookFilename] const watchPatterns = playbook.content.sources.filter((source) => !source.url.includes(':')).reduce((accum, source) => { accum.push(`${source.url}/${source.start_path ? source.start_path + '/' : ''}antora.yml`) @@ -18,6 +26,19 @@ const watchPatterns = playbook.content.sources.filter((source) => !source.url.in return accum }, []) +const savannaSrc = 'modules/savanna' +const previewSrc = 'build/preview-src' +const antoraUiRoot = path.resolve(__dirname, process.env.ANTORA_UI || '../antora-ui') +const uiBundleZip = path.join(antoraUiRoot, 'build/ui-bundle.zip') + +const gitEnv = { + ...process.env, + GIT_AUTHOR_NAME: 'Preview', + GIT_AUTHOR_EMAIL: 'preview@local', + GIT_COMMITTER_NAME: 'Preview', + GIT_COMMITTER_EMAIL: 'preview@local', +} + function generate (done) { generator(antoraArgs, process.env) .then(() => done()) @@ -27,6 +48,39 @@ function generate (done) { }) } +function ensurePreviewSrcRepo () { + if (!fs.existsSync(previewSrc)) { + fs.mkdirSync(previewSrc, { recursive: true }) + } + if (!fs.existsSync(path.join(previewSrc, '.git'))) { + execSync('git init -q', { cwd: previewSrc }) + } +} + +function syncPreviewSrc (done) { + ensurePreviewSrcRepo() + execSync(`rsync -a --delete --exclude '.git' ${savannaSrc}/ ${previewSrc}/`, { stdio: 'inherit' }) + execSync('git add -A', { cwd: previewSrc, env: gitEnv }) + try { + execSync('git diff --cached --quiet', { cwd: previewSrc, stdio: 'ignore' }) + } catch (_) { + execSync('git commit -q -m "local preview snapshot"', { cwd: previewSrc, env: gitEnv }) + } + done() +} + +function rebuildUiBundle (done) { + if (!fs.existsSync(antoraUiRoot)) { + done(new Error(`antora-ui not found at ${antoraUiRoot} (set ANTORA_UI)`)) + return + } + log(`Building UI bundle in ${antoraUiRoot}`) + execSync('npx gulp bundle', { cwd: antoraUiRoot, stdio: 'inherit' }) + execSync('rm -rf build/ui-bundle && mkdir -p build/ui-bundle', { stdio: 'inherit' }) + execSync(`unzip -oq ${JSON.stringify(uiBundleZip)} -d build/ui-bundle`, { stdio: 'inherit' }) + done() +} + function serve (done) { connect.server(serverConfig, function () { this.server.on('close', done) @@ -35,4 +89,50 @@ function serve (done) { }) } -module.exports = { serve, generate, default: series(generate, serve) } +function debounce (fn, waitMs) { + let timer + return (done) => { + clearTimeout(timer) + timer = setTimeout(() => fn(done), waitMs) + } +} + +function devHot (done) { + const contentRebuild = series(syncPreviewSrc, generate) + const uiRebuild = series(rebuildUiBundle, generate) + + series(syncPreviewSrc, rebuildUiBundle, generate)((err) => { + if (err) { + done(err) + return + } + + connect.server(serverConfig, function () { + this.server.on('close', done) + + const contentPatterns = [ + `${savannaSrc}/**/*`, + 'lib/**/*.js', + ] + const uiPatterns = [ + path.join(antoraUiRoot, 'src/**/*'), + path.join(antoraUiRoot, 'gulp.d/**/*'), + ] + + watch(contentPatterns, debounce((cb) => { + log('cloud-docs change detected — syncing content') + contentRebuild(cb) + }, 400)) + + watch(uiPatterns, debounce((cb) => { + log('antora-ui change detected — rebuilding bundle') + uiRebuild(cb) + }, 800)) + + log(`Hot preview: http://localhost:${serverConfig.port}`) + log(`Watching ${savannaSrc} and ${path.join(antoraUiRoot, 'src')}`) + }) + }) +} + +module.exports = { serve, generate, devHot, default: series(generate, serve) } diff --git a/package.json b/package.json index 3203802d..8035d0cd 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "scripts": { "build": "antora generate --fetch antora-playbook.yml", "build:local": "antora generate antora-playbook.local.yml", - "dev": "PLAYBOOK=antora-playbook.local.yml gulp", + "dev": "PLAYBOOK=antora-playbook.local.yml PORT=5050 gulp devHot", + "dev:simple": "PLAYBOOK=antora-playbook.local.yml gulp", + "endpoints:split": "node lib/split-endpoints.js", "serve": "http-server build/site -c-1" }, "author": "", From 8af0a62e8c21d1935a1d685b3ea83c801039f4ca Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:41:22 +0530 Subject: [PATCH 05/22] build(savanna): merge OpenAPI snapshot into endpoint splitter Extend split-endpoints to ingest _catalog/openapi.json alongside the curated catalog so new control-plane endpoints and schema definitions stay in sync. --- lib/split-endpoints.js | 188 +- .../modules/rest-api/_catalog/openapi.json | 6461 +++++++++++++++++ 2 files changed, 6637 insertions(+), 12 deletions(-) create mode 100644 modules/savanna/modules/rest-api/_catalog/openapi.json diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index 10e10ef1..cfd21ee2 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -4,8 +4,9 @@ * Splits the generated Savanna control-plane catalog into one page per * endpoint, then writes the module nav. * - * Source of truth is the catalog in modules/savanna/modules/rest-api/_catalog. - * Replace it when the API is regenerated, then run `npm run endpoints:split`. + * Sources are endpoints.adoc (curated existing pages) and openapi.json (the + * complete live API snapshot) in modules/savanna/modules/rest-api/_catalog. + * Refresh the snapshot when the API changes, then run `npm run endpoints:split`. * Everything under pages/endpoints/ is overwritten, so edit the catalog. * * Usage: node lib/split-endpoints.js [--check] @@ -16,12 +17,15 @@ const path = require('path') const MODULE_DIR = path.join(__dirname, '..', 'modules/savanna/modules/rest-api') const CATALOG = path.join(MODULE_DIR, '_catalog/endpoints.adoc') +const OPENAPI = path.join(MODULE_DIR, '_catalog/openapi.json') const PAGES_DIR = path.join(MODULE_DIR, 'pages') const ENDPOINTS_DIR = path.join(PAGES_DIR, 'endpoints') const NAV = path.join(MODULE_DIR, 'nav.adoc') +const DEFINITIONS = path.join(PAGES_DIR, 'definitions.adoc') // Swagger tag -> nav group, in the order the groups should appear. const GROUPS = [ + ['CloudProvider', 'Cloud providers'], ['Workgroup', 'Workgroups'], ['Workspace', 'Workspaces'], ['WorkspaceSchedule', 'Workspace schedules'], @@ -29,10 +33,15 @@ const GROUPS = [ ['Backup', 'Backups'], ['AllowedIP', 'IP allow list'], ['DatabaseUser', 'In-database users'], + ['Add-ons', 'Add-ons'], + ['Billing', 'Billing'], + ['APIKey', 'API keys'], ['Org', 'Organization'], + ['MCP', 'MCP'], ] const GENERATED = '// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead.' +const GENERATED_OPENAPI = '// Generated by lib/split-endpoints.js from _catalog/openapi.json.' function slugify (label) { return label @@ -42,22 +51,36 @@ function slugify (label) { .replace(/^-|-$/g, '') } -// Friendly endpoint names, keyed by request line. The catalog's own titles are -// swagger summaries ("Create workgroups in your org"); these are the names used -// in nav, the landing page, and the overview, so they stay in one place. +// Friendly endpoint names, keyed by request line. Object order is also the +// nav order within each group (create / list / get / update / delete, then +// extra actions). The catalog's own titles are swagger summaries. const LABELS = { + 'POST /controller/v4/v2/cloud-providers': 'Create a cloud provider', + 'GET /controller/v4/v2/cloud-providers': 'List cloud providers', + 'GET /controller/v4/v2/cloud-providers/public': 'List public cloud providers', + 'GET /cloud-providers/all': 'List all cloud providers', + 'GET /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Get a cloud provider', + 'PUT /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Update a cloud provider', + 'DELETE /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Delete a cloud provider', + 'POST /controller/v4/v2/cloud-providers/validate': 'Validate a cloud provider', + 'PUT /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade': 'Upgrade a cloud provider', 'POST /controller/v4/v2/workgroups': 'Create a workgroup', 'GET /controller/v4/v2/workgroups': 'List workgroups', 'GET /controller/v4/v2/workgroups/{workgroupID}': 'Get a workgroup', 'PUT /controller/v4/v2/workgroups/{workgroupID}': 'Update a workgroup', 'DELETE /controller/v4/v2/workgroups/{workgroupID}': 'Delete a workgroup', + 'GET /controller/v4/v2/pooled-workgroups/acquire': 'Acquire a pooled workgroup', + 'GET /observability/{workgroupID}/metrics': 'Get workgroup metrics', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces': 'Create a workspace', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Get a workspace', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Update a workspace', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Delete a workspace', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume': 'Resume a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause': 'Pause a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh': 'Refresh a workspace', - 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume': 'Resume a workspace', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade': 'Upgrade a workspace', + 'GET /controller/v4/v2/workspaces/upgrade-next-window': 'List upcoming workspace upgrades', + 'GET /metrics/{workgroupID}/{workspaceID}': 'Get workspace metrics', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Create a workspace schedule', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Get workspace schedules', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}': 'Update a workspace schedule', @@ -66,27 +89,55 @@ const LABELS = { 'PUT /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Update a database', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Delete a database', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'List backups', - 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'Delete a backup', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore': 'Restore a backup', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status': 'Get restore status', + 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'Delete a backup', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule': 'Get backup schedule', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule': 'Set backup schedule', 'POST /controller/v4/v2/workgroups/{workgroupID}/allow_list': 'Add an allowed IP', 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list': 'List allowed IPs', 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current': 'Get current IP', - 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable': 'Disable the allow list', - 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable': 'Enable the allow list', 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}': 'Update an allowed IP', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}': 'Delete an allowed IP', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable': 'Enable the allow list', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable': 'Disable the allow list', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Create an in-database user', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'List in-database users', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Update a user password', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Delete an in-database user', + 'POST /controller/v4/v2/addons/request': 'Request an add-on', + 'POST /controller/v4/v2/addons/{addonsID}/install': 'Install an add-on', + 'GET /controller/v4/v2/installed-addons': 'List installed add-ons', + 'GET /controller/v4/v2/installed-addons/{installedAddonsID}': 'Get an installed add-on', + 'GET /controller/v4/v2/addons/{addonsID}/workspaces': 'List workspaces for an add-on', + 'POST /controller/v4/v2/add-ons/{installedAddonsID}/configs': 'Create an add-on configuration', + 'GET /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}': 'List add-on configurations', + 'PUT /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}': 'Update an add-on configuration', + 'DELETE /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}': 'Delete an add-on configuration', + 'GET /controller/v4/v2/addons/meta': 'Get add-on metadata', + 'GET /controller/v4/v2/billing/credit': 'Get organization credits', + 'GET /controller/v4/v2/billing/credit-cards': 'Get customer information', + 'POST /controller/v4/v2/billing/credit-cards/{cardID}': 'Update the default card', + 'DELETE /controller/v4/v2/billing/credit-cards/{cardID}': 'Delete a credit card', + 'POST /controller/v4/v2/billing/payment/invoice': 'Pay an invoice', + 'GET /controller/v4/v2/billing/resource-pricing': 'Get resource pricing', + 'POST /controller/v4/v2/billing/session': 'Create a billing session', + 'GET /controller/v4/v2/billing/status': 'Get billing status', + 'GET /controller/v4/v2/billing/validation': 'Validate payment', + 'POST /controller/v4/v2/org/api-keys': 'Create an organization API key', + 'GET /controller/v4/v2/org/api-keys': 'List organization API keys', + 'DELETE /controller/v4/v2/org/api-keys': 'Delete an organization API key', 'GET /controller/v4/v2/workspaces/meta': 'Get org metadata', - 'GET /controller/v4/v2/users': 'List org users', - 'PUT /controller/v4/v2/users/{userId}/roles': "Update a user's role", + 'GET /users': 'List org users', + 'PUT /users/{userId}/roles': "Update a user's role", + 'PUT /controller/v4/v2/org': 'Update organization details', + 'GET /controller/v4/v2/org/quota': 'Get organization quota', + 'GET /controller/v4/v2/org/self': 'List accessible organizations', + 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat': 'Chat with MCP for onboarding', } +const LABEL_ORDER = Object.fromEntries(Object.keys(LABELS).map((key, i) => [key, i])) + function parseCatalog (text) { const lines = text.split('\n') const endpoints = [] @@ -123,6 +174,113 @@ function parseCatalog (text) { return endpoints } +function schemaName (ref) { + return ref.slice(ref.lastIndexOf('/') + 1) +} + +function definitionAnchor (name) { + return '_' + name.toLowerCase().replace(/[^a-z0-9]+/g, '_') +} + +function escapeCell (value) { + return String(value || '').replace(/\r?\n/g, ' ').replace(/\|/g, '\\|').trim() +} + +function renderSchema (schema) { + if (!schema) return '—' + if (schema.$ref) { + const name = schemaName(schema.$ref) + return 'xref:rest-api:definitions.adoc#' + definitionAnchor(name) + '[' + name + ']' + } + if (schema.allOf) return schema.allOf.map(renderSchema).join(' + ') + if (schema.type === 'array') return '< ' + renderSchema(schema.items || {}) + ' > array' + if (schema.type === 'object' && schema.additionalProperties) { + return 'object' + } + return schema.type ? schema.type + (schema.format ? ' (' + schema.format + ')' : '') : 'object' +} + +function renderOperationBody (operation) { + const out = [escapeCell(operation.description || operation.summary)] + const parameters = operation.parameters || [] + if (parameters.length) { + out.push('', '== Parameters', '', '[options="header", cols=".^2a,.^3a,.^9a,.^4a"]', '|===') + out.push('|Type|Name|Description|Schema') + for (const parameter of parameters) { + out.push( + '|**' + escapeCell(parameter.in === 'body' ? 'Body' : parameter.in[0].toUpperCase() + parameter.in.slice(1)) + '**', + '|**' + escapeCell(parameter.name) + '** +', + parameter.required ? '__required__' : '__optional__', + '|' + escapeCell(parameter.description), + '|' + renderSchema(parameter.schema || parameter) + ) + } + out.push('|===') + } + out.push('', '== Responses', '', '[options="header", cols=".^2a,.^14a,.^4a"]', '|===') + out.push('|HTTP Code|Description|Schema') + for (const [code, response] of Object.entries(operation.responses || {})) { + out.push('|**' + code + '**|' + escapeCell(response.description) + '|' + renderSchema(response.schema)) + } + out.push('|===') + if (operation.consumes && operation.consumes.length) { + out.push('', '== Consumes', '', ...operation.consumes.map((type) => '* `' + type + '`')) + } + if (operation.produces && operation.produces.length) { + out.push('', '== Produces', '', ...operation.produces.map((type) => '* `' + type + '`')) + } + return out.join('\n') +} + +function addOpenApiEndpoints (endpoints, spec) { + const existing = new Set(endpoints.map((endpoint) => endpoint.method + ' ' + endpoint.path)) + for (const [apiPath, pathItem] of Object.entries(spec.paths || {})) { + for (const [method, operation] of Object.entries(pathItem)) { + const upperMethod = method.toUpperCase() + if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].includes(upperMethod)) continue + const request = upperMethod + ' ' + apiPath + if (existing.has(request)) continue + endpoints.push({ + method: upperMethod, + path: apiPath, + tags: operation.tags || [], + body: renderOperationBody(operation).split('\n'), + openapi: true, + }) + } + } +} + +function renderDefinition (name, schema) { + const out = ['', '[[' + definitionAnchor(name) + ']]', '=== ' + name, ''] + if (schema.description) out.push(escapeCell(schema.description), '') + const properties = schema.properties || {} + const required = new Set(schema.required || []) + if (Object.keys(properties).length) { + out.push('[options="header", cols=".^3a,.^4a"]', '|===', '|Name|Schema') + for (const [propertyName, propertySchema] of Object.entries(properties)) { + out.push( + '|**' + escapeCell(propertyName) + '** +', + required.has(propertyName) ? '__required__' : '__optional__', + '|' + renderSchema(propertySchema) + ) + } + out.push('|===') + } else { + out.push('Type: ' + renderSchema(schema)) + } + return out.join('\n') + '\n' +} + +function appendMissingDefinitions (spec) { + let text = fs.readFileSync(DEFINITIONS, 'utf8') + for (const [name, schema] of Object.entries(spec.definitions || {})) { + if (text.includes('[[' + definitionAnchor(name) + ']]')) continue + text += renderDefinition(name, schema) + } + fs.writeFileSync(DEFINITIONS, text) +} + /** Rewrites catalog markup for a standalone page. */ function renderBody (body) { return body @@ -144,7 +302,7 @@ function renderBody (body) { function renderPage (endpoint, label) { return [ '= ' + label, - GENERATED, + endpoint.openapi ? GENERATED_OPENAPI : GENERATED, '', '[.api-request]', '....', @@ -199,7 +357,9 @@ function rewriteIncomingLinks (endpoints) { } function main () { + const spec = JSON.parse(fs.readFileSync(OPENAPI, 'utf8')) const endpoints = parseCatalog(fs.readFileSync(CATALOG, 'utf8')) + addOpenApiEndpoints(endpoints, spec) const groupTitles = new Map(GROUPS) const grouped = new Map(GROUPS.map(([, title]) => [title, []])) const slugs = new Set() @@ -216,6 +376,9 @@ function main () { slugs.add(endpoint.slug) grouped.get(groupTitles.get(tag)).push(endpoint) } + for (const list of grouped.values()) { + list.sort((a, b) => LABEL_ORDER[a.method + ' ' + a.path] - LABEL_ORDER[b.method + ' ' + b.path]) + } fs.rmSync(ENDPOINTS_DIR, { recursive: true, force: true }) fs.mkdirSync(ENDPOINTS_DIR, { recursive: true }) @@ -223,6 +386,7 @@ function main () { fs.writeFileSync(path.join(ENDPOINTS_DIR, endpoint.slug + '.adoc'), renderPage(endpoint, endpoint.label)) } fs.writeFileSync(NAV, renderNav(grouped)) + appendMissingDefinitions(spec) const rewritten = rewriteIncomingLinks(endpoints) console.log('wrote ' + endpoints.length + ' endpoint pages and nav') diff --git a/modules/savanna/modules/rest-api/_catalog/openapi.json b/modules/savanna/modules/rest-api/_catalog/openapi.json new file mode 100644 index 00000000..5aec61ae --- /dev/null +++ b/modules/savanna/modules/rest-api/_catalog/openapi.json @@ -0,0 +1,6461 @@ +{ + "schemes": [], + "swagger": "2.0", + "info": { + "description": "This is a sample TigerGraph Savanna controller server api.", + "title": "TigerGraph Savanna Controller API", + "contact": {}, + "version": "2.0" + }, + "host": "api.tgcloud.io", + "basePath": "/controller/v4/v2", + "paths": { + "/cloud-providers/all": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List all cloud provider", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "List all cloud provider for admin", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/CloudProviderResource" + } + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/add-ons/{installedAddonsID}/configs": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Create a new configuration for a specific installed add-on.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Create Add-on Configuration", + "parameters": [ + { + "type": "string", + "description": "Installed Add-on ID", + "name": "installedAddonsID", + "in": "path", + "required": true + }, + { + "description": "Create Configuration Request", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateConfigRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "400": { + "description": "Bad creation input.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "500": { + "description": "Failed to create configuration.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update an existing configuration for an add-on.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Update Add-on Configuration", + "parameters": [ + { + "type": "string", + "description": "Installed Add-on ID", + "name": "installedAddonsID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Configuration ID", + "name": "configID", + "in": "path", + "required": true + }, + { + "description": "Update Configuration Request", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateConfigRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "400": { + "description": "Bad update input.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "500": { + "description": "Failed to update configuration.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete a specific configuration for an add-on.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Delete Add-on Configuration", + "parameters": [ + { + "type": "string", + "description": "Installed Add-on ID", + "name": "installedAddonsID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Configuration ID", + "name": "configID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "boolean" + } + } + } + ] + } + }, + "400": { + "description": "Bad delete input.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "500": { + "description": "Failed to delete configuration.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/addons/meta": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get metadata for add-ons.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Get add-ons meta", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/addons/request": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Request an add-on by providing the addon name and a message.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Request an add-on", + "parameters": [ + { + "description": "Request body", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RequestAddonRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully request addon.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "400": { + "description": "Invalid request body.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Failed to request addon.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/addons/{addonsID}/install": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Installs an add-on by ID.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Installs an add-on", + "parameters": [ + { + "type": "string", + "description": "Add-on ID", + "name": "addonsID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Enable or disable add-on", + "name": "enable", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/addons/{addonsID}/workspaces": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Retrieves a list of workspaces associated with a specific addons ID.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "List Workspaces by add-ons ID", + "parameters": [ + { + "type": "string", + "description": "Addons ID", + "name": "addonsID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/Workspace" + } + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/billing/credit": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Fetches the total credits available for the specified organization.", + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Retrieve organization credits", + "parameters": [ + { + "type": "string", + "description": "Bearer token", + "name": "Authorization", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "number" + } + } + } + ] + } + }, + "500": { + "description": "Failed to retrieve credits", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/billing/credit-cards": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Retrieves the Amberlfo customer information based on the organization ID.", + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Get Customer Information", + "responses": { + "200": { + "description": "Successfully retrieved customer.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/CustomerResponse" + } + } + } + ] + } + }, + "500": { + "description": "Unable to retrieve customer.", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/billing/credit-cards/{cardID}": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Updates the default credit card for a customer based on the provided card ID.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Update Customer Default Card", + "parameters": [ + { + "type": "string", + "description": "Card ID", + "name": "cardID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully updated customer's default card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "400": { + "description": "CardID is not provided.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Unable to update customer's default card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Deletes a customer's credit card by card ID.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Delete a customer's credit card", + "parameters": [ + { + "type": "string", + "description": "Card ID", + "name": "cardID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully deleted customer's card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "400": { + "description": "CardID is not provided.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Unable to delete customer's card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/billing/payment/invoice": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Send invoice for payment", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Pay invoice", + "parameters": [ + { + "type": "integer", + "description": "Year of the invoice", + "name": "year", + "in": "query", + "required": true + }, + { + "type": "integer", + "description": "Month of the invoice", + "name": "month", + "in": "query", + "required": true + }, + { + "type": "integer", + "description": "Day of the invoice", + "name": "day", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Product Plan ID used when the invoice was generated", + "name": "productPlanId", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully paid invoice.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "boolean" + } + } + } + ] + } + }, + "500": { + "description": "Failed to pay invoice.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/billing/resource-pricing": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Retrieve the pricing information for resources", + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Get resource pricing", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/ResourcePricing" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/billing/session": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Creates a new session for the billing manager using the provided organization ID.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Create a new session", + "responses": { + "200": { + "description": "Successfully retrieved session.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Failed to retrieve session.", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/billing/status": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Retrieves the marketplace status of each platform and currently active payment method for an organization.", + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Retrieve organization's marketplace status and currently active payment method", + "parameters": [ + { + "type": "string", + "description": "Bearer token", + "name": "Authorization", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "number" + } + } + } + ] + } + }, + "500": { + "description": "Failed to retrieve billing status", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/billing/validation": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Validates if the payment can be processed for the organization", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Billing" + ], + "summary": "Validate payment", + "responses": { + "200": { + "description": "Successful payment validation check", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "boolean" + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/cloud-providers": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List all cloud provider belonging to the org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "List all cloud provider belonging to the org", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/CloudProviderResource" + } + } + } + } + ] + } + } + } + }, + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Create a new cloud provider", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "Create a new cloud provider", + "parameters": [ + { + "description": "Create Cloud Provider Resource Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudProviderResourceRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/CloudProviderResource" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/cloud-providers/public": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List of public cloud providers", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "List of public cloud providers", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/PublicCloudProviderResource" + } + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/cloud-providers/validate": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Validate the cloud provider request", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "Validate the cloud provider request", + "parameters": [ + { + "description": "Validate Cloud Provider Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ValidateCloudProviderRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully validated Cloud Provider", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/cloud-providers/{cloudProviderID}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get a cloud provider by ID", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "Get a cloud provider by ID", + "parameters": [ + { + "type": "string", + "description": "Cloud Provider ID", + "name": "cloudProviderID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/CloudProviderResource" + } + } + } + ] + } + } + } + }, + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update a cloud provider", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "Update a cloud provider", + "parameters": [ + { + "type": "string", + "description": "Cloud Provider ID", + "name": "cloudProviderID", + "in": "path", + "required": true + }, + { + "description": "Update Cloud Provider Resource Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateCloudProviderResourceRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/CloudProviderResource" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete a cloud provider", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "Delete a cloud provider", + "parameters": [ + { + "type": "string", + "description": "Cloud Provider ID", + "name": "cloudProviderID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Upgrade a cloud provider", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "CloudProvider" + ], + "summary": "Upgrade a cloud provider", + "parameters": [ + { + "type": "string", + "description": "Cloud Provider ID", + "name": "cloudProviderID", + "in": "path", + "required": true + }, + { + "description": "Upgrade Cloud Provider Resource Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpgradeCloudProviderResourceRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/installed-addons": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List all installed add-ons for the organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "List all installed add-ons", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/installed-addons/{installedAddonsID}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get details of an installed add-on by its ID.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "Get installed add-on by ID", + "parameters": [ + { + "type": "string", + "description": "Installed Add-on ID", + "name": "installedAddonsID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List configurations for a specific installed add-on.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Add-ons" + ], + "summary": "List Add-on Configurations", + "parameters": [ + { + "type": "string", + "description": "Installed Add-on ID", + "name": "installedAddonsID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Configuration Name", + "name": "configName", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "400": { + "description": "Failed to parse addons_id.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + }, + "500": { + "description": "Failed to get internal addons configurations.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/org": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update organization details such as name, display name, and logo URL", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Org" + ], + "summary": "Update organization details", + "parameters": [ + { + "description": "Organization request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/OrgRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully updated the org.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/org/api-keys": { + "get": { + "description": "List all external organization API keys.", + "produces": [ + "application/json" + ], + "tags": [ + "APIKey" + ], + "summary": "List External Org API Keys", + "responses": { + "200": { + "description": "Successfully listed the external org API keys.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/APIKey" + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "post": { + "description": "Create a new external organization API key with an optional lifetime.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APIKey" + ], + "summary": "Create External Org API Key", + "parameters": [ + { + "description": "Create API Key Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateAPIKeyRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully created the external org API key.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/APIKey" + } + } + } + ] + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "delete": { + "description": "Delete an external organization API key by its name.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "APIKey" + ], + "summary": "Delete External Org API Key", + "parameters": [ + { + "description": "Delete API Key Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteAPIKeyRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully deleted the external org API key.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/org/quota": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get the quota details for a specific organization by its ID", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Org" + ], + "summary": "Retrieve organization quota", + "responses": { + "200": { + "description": "Successfully get org quota", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/OrgQuota" + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/org/self": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List of orgs that the user has access to", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Org" + ], + "summary": "List of orgs that the user has access to", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Organization" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/pooled-workgroups/acquire": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Acquire pooled workgroup in your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "Acquire pooled workgroup in your org", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get workgroups for your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "Get workgroups for your org", + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/Workgroup" + } + } + } + } + ] + } + } + } + }, + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Create workgroups in your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "Create workgroups in your org", + "parameters": [ + { + "description": "Create workgroup request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWorkgroupRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get workgroup detail in your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "Get workgroup detail in your org", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + } + } + ] + } + } + } + }, + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update workgroups in your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "Update workgroups in your org", + "parameters": [ + { + "description": "Update workgroup request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateWorkgroupRequest" + } + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get workgroup detail in your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "delete workgroup detail in your org", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List all allowed IPs in the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "List Allowed IPs", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/AllowedIP" + } + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + }, + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Add a new allowed IP to the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "Add Allowed IP", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "description": "Allowed IP request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/AllowedIP" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/AllowedIP" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/current": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get the current IP and check if it is allowed in the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "Get Current IP", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "object", + "properties": { + " IsAllowed": { + "type": "boolean" + }, + "CurrentIP": { + "type": "string" + } + } + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/disable": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Disable the allow list for the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "Disable Allow List", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/enable": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Enable the allow list for the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "Enable Allow List", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update an existing allowed IP in the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "Update Allowed IP", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Allowed IP ID", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "Allowed IP request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/AllowedIP" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/AllowedIP" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete an existing allowed IP from the workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "AllowedIP" + ], + "summary": "Delete Allowed IP", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Allowed IP ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get database in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Database" + ], + "summary": "Get database in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Database ID", + "name": "databaseID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/TGDatabase" + } + } + } + ] + } + } + } + }, + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update database in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Database" + ], + "summary": "Update database in workgroup", + "parameters": [ + { + "description": "Update database request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateTGDatabaseRequest" + } + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Database ID", + "name": "databaseID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/TGDatabase" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete database in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Database" + ], + "summary": "Delete database in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Database ID", + "name": "databaseID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Create workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Create workspace in workgroup", + "parameters": [ + { + "description": "Create workspace request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWorkspaceRequest" + } + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workspace" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Get workspace in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workspace" + } + } + } + ] + } + } + } + }, + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Update workspace in workgroup", + "parameters": [ + { + "description": "Update workspace request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateWorkspaceRequest" + } + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/Workspace" + } + } + } + ] + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Delete workspace in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List all backups for a workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Backup" + ], + "summary": "List backups", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully listed the backups.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/Backup" + } + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete a backup for a workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Backup" + ], + "summary": "Delete a backup", + "parameters": [ + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "description": "Delete Backup Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteBackupRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully deleted the backup.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Restore a backup for a workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Backup" + ], + "summary": "Restore a backup", + "parameters": [ + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "description": "Restore Backup Request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/RestoreBackupRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully restored the backup.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get the backup schedule for a workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Backup" + ], + "summary": "Get backup schedule", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully got the backup schedule.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/BackupSchedule" + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Set a backup schedule for a workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Backup" + ], + "summary": "Set backup schedule", + "parameters": [ + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "description": "Backup Schedule", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/BackupSchedule" + } + } + ], + "responses": { + "200": { + "description": "Successfully set the backup schedule.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get the status of a backup restore job", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Backup" + ], + "summary": "Get backup restore status", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Job ID", + "name": "job", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully got the backup restore status.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/BackupRestoreStatus" + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List all in-database GSQL users in the specified workspace and workgroup.", + "produces": [ + "application/json" + ], + "tags": [ + "DatabaseUser" + ], + "summary": "List in-database GSQL users", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Successfully listed the in-database GSQL users.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/IAMUser" + } + } + } + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update the password of an in-database GSQL user in the specified workspace and workgroup.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "DatabaseUser" + ], + "summary": "Update in-database GSQL user password", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "description": "In-database user request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InDatabaseUserRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully updated the in-database GSQL password.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Create a new in-database GSQL user in the specified workspace and workgroup.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "DatabaseUser" + ], + "summary": "Create in-database GSQL user", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "description": "In-database user request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InDatabaseUserRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully created the in-database GSQL user.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/IAMUser" + } + } + } + ] + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete an in-database GSQL user in the specified workspace and workgroup.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "DatabaseUser" + ], + "summary": "Delete in-database GSQL user", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "description": "In-database user request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/InDatabaseUserRequest" + } + } + ], + "responses": { + "200": { + "description": "Successfully deleted the in-database GSQL user.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Handle MCP chat requests and return streaming responses via Server-Sent Events", + "consumes": [ + "application/json" + ], + "produces": [ + "text/event-stream" + ], + "tags": [ + "MCP" + ], + "summary": "MCP Chat for onboarding", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Thread ID", + "name": "ThreadID", + "in": "header", + "required": true + }, + { + "description": "MCP chat request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/ServerMCPChatRequest" + } + } + ], + "responses": { + "200": { + "description": "Server-Sent Events stream", + "schema": { + "type": "string" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Pause workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Pause workspace in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Refresh workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Refresh workspace in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Resume workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Resume workspace in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Retrieve the schedule for a given workspace", + "produces": [ + "application/json" + ], + "tags": [ + "WorkspaceSchedule" + ], + "summary": "Retrieve workspace schedule", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceSchedule" + } + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Create a new workspace schedule for a given workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "WorkspaceSchedule" + ], + "summary": "Create a new workspace schedule", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "description": "Workspace Schedule", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkspaceSchedule" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/WorkspaceSchedule" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}": { + "put": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Update an existing workspace schedule for a given workspace", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "WorkspaceSchedule" + ], + "summary": "Update an existing workspace schedule", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Schedule ID", + "name": "scheduleID", + "in": "path", + "required": true + }, + { + "description": "Workspace Schedule", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkspaceSchedule" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Delete an existing workspace schedule for a given workspace", + "produces": [ + "application/json" + ], + "tags": [ + "WorkspaceSchedule" + ], + "summary": "Delete an existing workspace schedule", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Schedule ID", + "name": "scheduleID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "type": "string" + } + } + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade": { + "post": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Upgrade workspace in workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "Upgrade workspace in workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + }, + { + "description": "Upgrade workspace request", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpgradeWorkspaceRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/controller/v4/v2/workspaces/meta": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get regions/tgVersions/workspaceTypes supported for your org", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Org" + ], + "summary": "Get an metadata for your org", + "parameters": [ + { + "type": "boolean", + "description": "When true, tgVersions only include versions with allow_upgrade; when false or omitted (default), all create-allowed versions for the org are returned", + "name": "upgrade", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/WorkspaceMetadata" + } + } + } + ] + } + } + } + } + }, + "/controller/v4/v2/workspaces/upgrade-next-window": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "List workspaces upgrading in next window", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workspace" + ], + "summary": "List workspaces upgrading in next window", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + } + } + }, + "/metrics/{workgroupID}/{workspaceID}": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Returns the latest tigergraph_* samples for the given workspace as Prometheus text exposition format", + "produces": [ + "text/plain" + ], + "tags": [ + "Workspace" + ], + "summary": "Scrape workspace metrics in Prometheus exposition format", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Workspace ID", + "name": "workspaceID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Prometheus exposition format", + "schema": { + "type": "string" + } + } + } + } + }, + "/observability/{workgroupID}/metrics": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Get workspace metrics in a given workgroup", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Workgroup" + ], + "summary": "Get workspace metrics in a given workgroup", + "parameters": [ + { + "type": "string", + "description": "Workgroup ID", + "name": "workgroupID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "type": "object", + "properties": { + "Result": { + "$ref": "#/definitions/observability.WorkgroupMetric" + } + } + } + ] + } + } + } + } + }, + "/users": { + "get": { + "description": "List of users in the org. Note: this endpoint is not APIKEY compatible", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Org" + ], + "summary": "List of users in the org", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/OrgListUserResponse" + } + } + } + } + }, + "/users/{userId}/roles": { + "put": { + "description": "Updates the role of an org user. Note: this endpoint is not APIKEY compatible", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Org" + ], + "summary": "Update the role of an org user", + "parameters": [ + { + "type": "string", + "description": "Id of the user", + "name": "userId", + "in": "path", + "required": true + }, + { + "description": "Roles of the user", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PutOrgUsersRoles" + } + } + ], + "responses": { + "204": { + "description": "No Content" + } + } + } + } + }, + "definitions": { + "APIKey": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "description": { + "type": "string" + }, + "expires_at": { + "type": "string" + }, + "key_name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "plaintext_key": { + "type": "string" + }, + "redacted_key": { + "type": "string" + }, + "user_id": { + "type": "string" + } + } + }, + "AddOnPricing": { + "type": "object", + "properties": { + "platform": { + "type": "string" + }, + "price_per_hour": { + "type": "number" + }, + "region": { + "type": "string" + }, + "type": { + "type": "string" + }, + "workspace_type": { + "type": "string" + } + } + }, + "AgentConfig": { + "type": "object", + "properties": { + "catalog_activity_update_interval_seconds": { + "type": "integer" + }, + "enable_topology_force_update": { + "type": "boolean" + }, + "heartbeat_interval_seconds": { + "type": "integer" + }, + "query_activity_update_interval_seconds": { + "type": "integer" + }, + "topology_update_interval_seconds": { + "type": "integer" + } + } + }, + "AllowedIP": { + "type": "object", + "required": [ + "cidr" + ], + "properties": { + "cidr": { + "type": "string" + }, + "id": { + "type": "string" + }, + "note": { + "type": "string" + } + } + }, + "Backup": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "is_automatic": { + "type": "boolean" + }, + "size_bytes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "time": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "BackupRestoreStatus": { + "type": "object", + "properties": { + "created_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "output": { + "type": "string" + }, + "status": { + "type": "string" + } + } + }, + "BackupSchedule": { + "type": "object", + "required": [ + "schedule" + ], + "properties": { + "max_backup_files": { + "type": "integer" + }, + "max_reserved_days": { + "type": "integer" + }, + "max_retry": { + "type": "integer" + }, + "pause": { + "type": "boolean" + }, + "schedule": { + "type": "string" + } + } + }, + "CloudProviderOptions": { + "type": "object", + "properties": { + "account_id": { + "type": "string" + }, + "secure_connection": { + "type": "boolean" + } + } + }, + "CloudProviderResource": { + "type": "object", + "properties": { + "api_tokens": { + "type": "array", + "items": { + "type": "string" + } + }, + "availability_zones": { + "type": "array", + "items": { + "type": "string" + } + }, + "cluster_enabled_log_types": { + "type": "array", + "items": { + "$ref": "#/definitions/constants.ClusterLogType" + } + }, + "component_versions": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "created_by": { + "type": "string" + }, + "eks_id": { + "type": "string" + }, + "endpoint_service_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "last_error": { + "type": "string" + }, + "name": { + "type": "string" + }, + "node_group_config": { + "$ref": "#/definitions/aws.NodeGroupConfig" + }, + "options": { + "$ref": "#/definitions/CloudProviderOptions" + }, + "org_id": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "role_external_id": { + "type": "string" + }, + "security_group_id": { + "type": "string" + }, + "short_id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subnet_id": { + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "string" + }, + "version_number": { + "type": "integer" + }, + "vpc_id": { + "type": "string" + }, + "vpc_owned_by_tg": { + "type": "boolean" + }, + "work_dir": { + "type": "string" + } + } + }, + "CreateAPIKeyRequest": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "life_time_in_seconds": { + "type": "integer" + } + } + }, + "CreateCloudProviderResourceRequest": { + "type": "object", + "properties": { + "created_by": { + "type": "string" + }, + "name": { + "type": "string" + }, + "options": { + "$ref": "#/definitions/CloudProviderOptions" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "role_external_id": { + "type": "string" + }, + "type": { + "description": "Type is used by two sets of API and will be set to 'private' when called by the Admin API\nand 'public' when called by the public cloud provider creation API.", + "type": "string" + } + } + }, + "CreateConfigRequest": { + "type": "object", + "required": [ + "config_name", + "config_value" + ], + "properties": { + "config_name": { + "type": "string" + }, + "config_value": { + "type": "string" + } + } + }, + "CreateWorkgroupRequest": { + "type": "object", + "required": [ + "cloud_provider_id" + ], + "properties": { + "cloud_provider_id": { + "type": "string" + }, + "enable_application_log": { + "type": "boolean" + }, + "enable_encryption": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "platform": { + "$ref": "#/definitions/Platform" + }, + "region": { + "type": "string" + }, + "shared_storage": { + "type": "boolean" + } + } + }, + "CreateWorkspaceRequest": { + "description": "Create Workspace Request", + "type": "object", + "properties": { + "addons": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + } + }, + "auto_stop_minutes": { + "type": "integer" + }, + "enable_auto_start": { + "type": "boolean" + }, + "enable_ha": { + "type": "boolean" + }, + "is_rw": { + "type": "boolean" + }, + "maintenance_window_day_of_week": { + "type": "integer" + }, + "maintenance_window_hour_of_day": { + "type": "integer" + }, + "maintenance_window_interval_weeks": { + "type": "integer" + }, + "maintenance_window_time_zone": { + "type": "string" + }, + "name": { + "type": "string" + }, + "solution_install_request": { + "$ref": "#/definitions/SolutionInstallRequest" + }, + "tg_database_id": { + "type": "string" + }, + "tg_version": { + "type": "string" + }, + "update_strategy": { + "type": "string" + }, + "workspace_type_name": { + "description": "Workspace Type Name TG-0/TG-2", + "type": "string" + }, + "x_test_env": { + "type": "string" + } + } + }, + "CustomerCreditCard": { + "type": "object", + "properties": { + "brand": { + "type": "string" + }, + "card_id": { + "type": "string" + }, + "expire_month": { + "type": "integer" + }, + "expire_year": { + "type": "integer" + }, + "last_4_digits": { + "type": "string" + }, + "name_on_card": { + "type": "string" + }, + "org_id": { + "type": "string" + } + } + }, + "CustomerResponse": { + "type": "object", + "properties": { + "address": { + "$ref": "#/definitions/UpdateAddressRequest" + }, + "customer_email": { + "type": "string" + }, + "customer_id": { + "type": "string" + }, + "customer_name": { + "type": "string" + } + } + }, + "DataStoragePricing": { + "type": "object", + "properties": { + "platform": { + "type": "string" + }, + "price_per_month": { + "type": "number" + }, + "region": { + "type": "string" + } + } + }, + "DeleteAPIKeyRequest": { + "type": "object", + "properties": { + "key_name": { + "type": "string" + } + } + }, + "DeleteBackupRequest": { + "type": "object", + "required": [ + "backup_id" + ], + "properties": { + "backup_id": { + "type": "string" + } + } + }, + "Error": { + "type": "object", + "properties": { + "FieldName": { + "type": "string" + }, + "Reason": { + "type": "string" + }, + "Type": { + "$ref": "#/definitions/ErrorType" + } + } + }, + "ErrorType": { + "type": "string", + "enum": [ + "Internal-Error", + "Bad-Request", + "Not-Found", + "Forbidden", + "Unauthorized", + "API-Disabled", + "Quota-Exceed", + "Unknown" + ], + "x-enum-varnames": [ + "ErrInternal", + "ErrBadRequest", + "ErrNotFound", + "ErrForbidden", + "ErrUnauthorized", + "ErrAPIDisabled", + "ErrQuotaExceed", + "ErrUnknown" + ] + }, + "FeatureFlag": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean" + }, + "feature_name": { + "type": "string" + } + } + }, + "FolderStatistics": { + "type": "object", + "properties": { + "backup_size": { + "type": "integer" + }, + "billed_size": { + "type": "integer" + }, + "log_size": { + "type": "integer" + }, + "milvus_size": { + "type": "integer" + }, + "total_size": { + "type": "integer" + }, + "workspaces": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceSize" + } + } + } + }, + "GetCustomerCreditCardsResponse": { + "type": "object", + "properties": { + "credit_cards": { + "type": "array", + "items": { + "$ref": "#/definitions/CustomerCreditCard" + } + }, + "default_card": { + "type": "string" + } + } + }, + "IAMUser": { + "type": "object", + "properties": { + "auth0UserID": { + "type": "string" + }, + "created": { + "type": "string" + }, + "description": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "firstName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/tgIAM.Metadata" + }, + "path": { + "type": "string" + }, + "role": { + "type": "string" + }, + "tenantID": { + "type": "string" + }, + "trn": { + "type": "string" + }, + "updated": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "InDatabaseUserRequest": { + "type": "object", + "properties": { + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "OrgListUserResponse": { + "type": "object", + "properties": { + "auth0UserID": { + "type": "string" + }, + "authID": { + "type": "string" + }, + "created": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "firstName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/OrgMetadata" + }, + "path": { + "type": "string" + }, + "roles": { + "type": "array", + "items": { + "$ref": "#/definitions/OrgRole" + } + }, + "tenantID": { + "type": "string" + }, + "trn": { + "type": "string" + }, + "updated": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "OrgMetadata": { + "type": "object", + "properties": { + "attachedTo": { + "type": "array", + "items": { + "type": "string" + } + }, + "lastLogin": { + "type": "string" + } + } + }, + "OrgQuota": { + "type": "object", + "properties": { + "max_workspace_memory": { + "type": "string" + }, + "max_workspace_type": { + "type": "string" + }, + "memory_limit": { + "type": "string" + }, + "memory_usage_in_bytes": { + "type": "integer" + }, + "org_id": { + "type": "string" + }, + "ro_workspace_count_limit": { + "type": "integer" + }, + "ro_workspace_count_usage": { + "type": "integer" + }, + "rw_workspace_count_limit": { + "type": "integer" + }, + "rw_workspace_count_usage": { + "type": "integer" + }, + "tier": { + "type": "string" + }, + "workspace_auto_backup_count_limit": { + "type": "integer" + }, + "workspace_auto_backup_retention_in_days": { + "type": "integer" + }, + "workspace_manual_backup_count_limit": { + "type": "integer" + } + } + }, + "OrgRequest": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string" + }, + "orgDisplayName": { + "type": "string" + }, + "orgID": { + "type": "string" + }, + "orgName": { + "type": "string" + } + } + }, + "OrgRole": { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "tenantID": { + "type": "string" + }, + "trn": { + "type": "string" + } + } + }, + "Organization": { + "type": "object", + "properties": { + "create_time": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "delinquent_since": { + "type": "string" + }, + "feature_flag": { + "type": "array", + "items": { + "$ref": "#/definitions/FeatureFlag" + } + }, + "logo_url": { + "type": "string" + }, + "org_display_name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + } + } + }, + "Platform": { + "type": "string", + "enum": [ + "aws", + "azure", + "gcp" + ], + "x-enum-varnames": [ + "PlatformAWS", + "PlatformAzure", + "PlatformGCP" + ] + }, + "PublicCloudProviderResource": { + "type": "object", + "properties": { + "component_versions": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "status": { + "type": "string" + }, + "version": { + "type": "string" + }, + "version_number": { + "type": "integer" + } + } + }, + "PutOrgUsersRoles": { + "type": "object", + "properties": { + "roles": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Region": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "RequestAddonRequest": { + "type": "object", + "properties": { + "addon_name": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "ResourcePricing": { + "type": "object", + "properties": { + "addon_pricing": { + "type": "array", + "items": { + "$ref": "#/definitions/AddOnPricing" + } + }, + "data_storage_pricing": { + "type": "array", + "items": { + "$ref": "#/definitions/DataStoragePricing" + } + }, + "workspace_pricing": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspacePricing" + } + } + } + }, + "Response": { + "type": "object", + "properties": { + "Error": { + "type": "boolean" + }, + "ErrorDetails": { + "type": "array", + "items": { + "$ref": "#/definitions/Error" + } + }, + "Message": { + "type": "string" + }, + "RequestID": { + "type": "string" + }, + "Result": { + "type": "object" + } + } + }, + "RestoreBackupRequest": { + "type": "object", + "required": [ + "backup_id" + ], + "properties": { + "backup_id": { + "type": "string" + } + } + }, + "ServerMCPChatRequest": { + "type": "object", + "properties": { + "authorization": { + "type": "string" + }, + "debug": { + "type": "boolean" + }, + "message": {}, + "thread_id": { + "type": "string" + }, + "type": { + "type": "string" + }, + "workspace_id": { + "type": "string" + } + } + }, + "SolutionInstallRequest": { + "type": "object", + "properties": { + "addons": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + } + }, + "data_source_origin": { + "type": "string" + }, + "name": { + "type": "string" + }, + "solution_catalog_id": { + "type": "string" + } + } + }, + "TGDatabase": { + "type": "object", + "properties": { + "create_time": { + "type": "string" + }, + "database_id": { + "type": "string" + }, + "folder_statistics": { + "$ref": "#/definitions/FolderStatistics" + }, + "name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + }, + "region": { + "type": "string" + }, + "tg_version": { + "type": "string" + }, + "workgroup_id": { + "type": "string" + }, + "workspaces": { + "type": "array", + "items": { + "$ref": "#/definitions/Workspace" + } + } + } + }, + "TGVersion": { + "type": "object", + "properties": { + "allow_create": { + "type": "boolean" + }, + "allow_upgrade": { + "type": "boolean" + }, + "channel": { + "type": "string" + }, + "end_of_life": { + "type": "string" + }, + "image": { + "type": "string" + }, + "incompatible_upgrades_from": { + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "orgs": { + "description": "For customized versions", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "UpdateAddressRequest": { + "type": "object", + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "line1": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "UpdateCloudProviderResourceRequest": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "UpdateConfigRequest": { + "type": "object", + "required": [ + "config_value" + ], + "properties": { + "config_value": { + "type": "string" + } + } + }, + "UpdateTGDatabaseRequest": { + "type": "object", + "required": [ + "tg_database_name" + ], + "properties": { + "tg_database_name": { + "type": "string" + } + } + }, + "UpdateWorkgroupRequest": { + "type": "object", + "properties": { + "enable_application_log": { + "type": "boolean" + }, + "encryption_method": { + "$ref": "#/definitions/data.EncryptionMethod" + }, + "workgroup_name": { + "type": "string" + } + } + }, + "UpdateWorkspaceRequest": { + "type": "object", + "properties": { + "addons": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + } + }, + "agent_config": { + "$ref": "#/definitions/AgentConfig" + }, + "auto_stop_minutes": { + "type": "integer", + "minimum": 0 + }, + "auto_upgrade_state": { + "type": "string" + }, + "desired_tg_version": { + "type": "string" + }, + "enable_auto_start": { + "type": "boolean" + }, + "enable_ha": { + "type": "boolean" + }, + "maintenance_window_day_of_week": { + "type": "integer" + }, + "maintenance_window_hour_of_day": { + "type": "integer" + }, + "maintenance_window_interval_weeks": { + "type": "integer" + }, + "maintenance_window_time_zone": { + "type": "string" + }, + "pause": { + "type": "boolean" + }, + "update_strategy": { + "type": "string" + }, + "workspace_name": { + "type": "string" + }, + "workspace_type_name": { + "type": "string" + } + } + }, + "UpgradeCloudProviderComponent": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "UpgradeCloudProviderResourceRequest": { + "type": "object", + "properties": { + "cluster_enabled_log_types": { + "type": "array", + "items": { + "$ref": "#/definitions/constants.ClusterLogType" + } + }, + "components": { + "type": "array", + "items": { + "$ref": "#/definitions/UpgradeCloudProviderComponent" + } + }, + "node_group_config": { + "$ref": "#/definitions/aws.NodeGroupConfig" + } + } + }, + "UpgradeWorkspaceRequest": { + "description": "Upgrade Workspace Request", + "type": "object", + "properties": { + "desired_version": { + "type": "string" + }, + "scheduled": { + "type": "boolean" + } + } + }, + "ValidateCloudProviderRequest": { + "type": "object", + "required": [ + "platform", + "region", + "role_arn" + ], + "properties": { + "account_id": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "role_external_id": { + "type": "string" + }, + "secure_connection": { + "type": "boolean" + } + } + }, + "Workgroup": { + "type": "object", + "properties": { + "cloud_provider_id": { + "type": "string" + }, + "cloud_provider_name": { + "type": "string" + }, + "cloud_provider_status": { + "type": "string" + }, + "cloud_provider_type": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "enable_allow_list": { + "type": "boolean" + }, + "enable_application_log": { + "type": "boolean" + }, + "encryption_method": { + "$ref": "#/definitions/data.EncryptionMethod" + }, + "is_current_ip_allowed": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + }, + "platform": { + "$ref": "#/definitions/Platform" + }, + "region": { + "type": "string" + }, + "shared_storage": { + "type": "boolean" + }, + "tg_databases": { + "type": "array", + "items": { + "$ref": "#/definitions/TGDatabase" + } + }, + "workgroup_id": { + "type": "string" + }, + "workspaces": { + "type": "array", + "items": { + "$ref": "#/definitions/Workspace" + } + } + } + }, + "Workspace": { + "type": "object", + "properties": { + "addons": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + } + }, + "agent_config": { + "$ref": "#/definitions/AgentConfig" + }, + "auto_stop_minutes": { + "type": "integer" + }, + "auto_upgrade_state": { + "type": "string" + }, + "cloud_provider_id": { + "type": "string" + }, + "cloud_provider_name": { + "type": "string" + }, + "cloud_provider_short_id": { + "type": "string" + }, + "condition_type": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "database_id": { + "type": "string" + }, + "database_name": { + "type": "string" + }, + "deleted_at": { + "type": "string" + }, + "desired_tg_version": { + "type": "string" + }, + "display_status": { + "type": "string" + }, + "edge_count": { + "type": "integer" + }, + "enable_auto_start": { + "type": "boolean" + }, + "enable_copilot": { + "type": "boolean" + }, + "enable_ha": { + "type": "boolean" + }, + "err_message": { + "type": "string" + }, + "folder_statistics": { + "$ref": "#/definitions/FolderStatistics" + }, + "graph_topology_size_bytes": { + "type": "integer" + }, + "is_rw": { + "type": "boolean" + }, + "last_maintenance": { + "type": "string" + }, + "last_modified_time": { + "type": "string" + }, + "maintenance_window_day_of_week": { + "type": "integer" + }, + "maintenance_window_hour_of_day": { + "type": "integer" + }, + "maintenance_window_interval_weeks": { + "type": "integer" + }, + "maintenance_window_time_zone": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nginx_host": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + }, + "refresh_message": { + "type": "string" + }, + "refresh_status": { + "type": "string" + }, + "region": { + "type": "string" + }, + "replicas": { + "type": "integer" + }, + "snapshot_time": { + "type": "string" + }, + "solution_catalog_id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tg_version": { + "type": "string" + }, + "update_strategy": { + "type": "string" + }, + "version_number": { + "type": "integer" + }, + "vertex_count": { + "type": "integer" + }, + "workgroup_id": { + "type": "string" + }, + "workgroup_name": { + "type": "string" + }, + "workspace_id": { + "type": "string" + }, + "workspace_type": { + "$ref": "#/definitions/WorkspaceType" + } + } + }, + "WorkspaceAddonsRequest": { + "type": "object", + "required": [ + "addons_id", + "enable" + ], + "properties": { + "addons_id": { + "type": "string" + }, + "enable": { + "type": "boolean" + }, + "enable_configuration": { + "type": "object", + "additionalProperties": true + }, + "is_free": { + "type": "boolean" + }, + "unique_name": { + "type": "string" + }, + "workspace_id": { + "type": "string" + } + } + }, + "WorkspaceMetadata": { + "type": "object", + "properties": { + "regions": { + "type": "array", + "items": { + "$ref": "#/definitions/Region" + } + }, + "tgVersions": { + "type": "array", + "items": { + "$ref": "#/definitions/TGVersion" + } + }, + "workspaceTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/WorkspaceType" + } + } + } + }, + "WorkspacePricing": { + "type": "object", + "properties": { + "cloud_provider": { + "type": "string" + }, + "ha": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "price_per_hour": { + "type": "number" + }, + "region": { + "type": "string" + }, + "workspace_type": { + "type": "string" + } + } + }, + "WorkspaceSchedule": { + "type": "object", + "required": [ + "repeat", + "time", + "timezone", + "workspace_id" + ], + "properties": { + "date": { + "type": "string" + }, + "id": { + "type": "string" + }, + "repeat": { + "type": "string" + }, + "repeat_on": { + "type": "string" + }, + "time": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "workspace_id": { + "type": "string" + }, + "workspace_type_name": { + "type": "string" + } + } + }, + "WorkspaceSize": { + "type": "object", + "properties": { + "size": { + "type": "integer" + }, + "workspace_id": { + "type": "string" + } + } + }, + "WorkspaceType": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "ha": { + "type": "integer" + }, + "memory": { + "type": "string" + }, + "partition": { + "type": "integer" + }, + "typeName": { + "type": "string" + } + } + }, + "aws.NodeGroup": { + "type": "object", + "properties": { + "max_size": { + "type": "integer" + }, + "min_size": { + "type": "integer" + }, + "overprovisioning_factor": { + "type": "integer" + } + } + }, + "aws.NodeGroupConfig": { + "type": "object", + "properties": { + "ng_16": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_32": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_48": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_64": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_system": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "prefetch_image_list": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "constants.ClusterLogType": { + "type": "string", + "enum": [ + "api", + "audit", + "authenticator", + "controllerManager", + "scheduler" + ], + "x-enum-varnames": [ + "ClusterLogTypeAPIServer", + "ClusterLogTypeAudit", + "ClusterLogTypeAuthenticator", + "ClusterLogTypeControllerManager", + "ClusterLogTypeScheduler" + ] + }, + "data.EncryptionMethod": { + "type": "string", + "enum": [ + "TMK" + ], + "x-enum-varnames": [ + "TigerGraphManagedKey" + ] + }, + "observability.MetricValue": { + "description": "Workspace metric value", + "type": "object", + "properties": { + "avgValue": { + "description": "Avg value", + "type": "number" + } + } + }, + "observability.WorkgroupMetric": { + "description": "Metrics for workspaces in a workgroup", + "type": "object", + "properties": { + "workgroupID": { + "description": "Workgroup ID", + "type": "string" + }, + "workspaceMetrics": { + "description": "Workspace metrics", + "type": "array", + "items": { + "$ref": "#/definitions/observability.WorkspaceMetric" + } + } + } + }, + "observability.WorkspaceMetric": { + "description": "Workspace metric", + "type": "object", + "properties": { + "metrics": { + "description": "Workspace metric map, key is metric name,\nvalue is the certain value for the metric name in the key", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/observability.MetricValue" + } + }, + "workspaceID": { + "description": "Workspace ID", + "type": "string" + } + } + }, + "tgIAM.Metadata": { + "type": "object", + "additionalProperties": true + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "description": "Authorization for TigerGraph Savanna", + "type": "apiKey", + "name": "x-api-key", + "in": "header" + } + } +} From 0af2d21ec6b8b94c030219d83f147042f3f2b67e Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:41:26 +0530 Subject: [PATCH 06/22] docs(savanna): regenerate REST API pages from expanded catalog Add billing, add-ons, cloud provider, API key, and MCP endpoints; refresh nav, definitions, and org user paths from the updated catalog. --- .../modules/rest-api/_catalog/endpoints.adoc | 4 +- modules/savanna/modules/rest-api/nav.adoc | 57 +- .../modules/rest-api/pages/definitions.adoc | 997 ++++++++++++++++++ .../endpoints/acquire-a-pooled-workgroup.adoc | 25 + .../chat-with-mcp-for-onboarding.adoc | 52 + .../endpoints/create-a-billing-session.adoc | 26 + .../endpoints/create-a-cloud-provider.adoc | 37 + .../create-an-add-on-configuration.adoc | 44 + .../create-an-organization-api-key.adoc | 39 + .../endpoints/delete-a-cloud-provider.adoc | 37 + .../pages/endpoints/delete-a-credit-card.adoc | 39 + .../delete-an-add-on-configuration.adoc | 44 + .../delete-an-organization-api-key.adoc | 39 + .../pages/endpoints/get-a-cloud-provider.adoc | 37 + .../pages/endpoints/get-add-on-metadata.adoc | 27 + .../endpoints/get-an-installed-add-on.adoc | 39 + .../pages/endpoints/get-billing-status.adoc | 34 + .../endpoints/get-customer-information.adoc | 22 + .../endpoints/get-organization-credits.adoc | 34 + .../endpoints/get-organization-quota.adoc | 26 + .../pages/endpoints/get-resource-pricing.adoc | 22 + .../endpoints/get-workgroup-metrics.adoc | 37 + .../endpoints/get-workspace-metrics.adoc | 38 + .../pages/endpoints/install-an-add-on.adoc | 44 + .../list-accessible-organizations.adoc | 26 + .../endpoints/list-add-on-configurations.adoc | 44 + .../endpoints/list-all-cloud-providers.adoc | 25 + .../pages/endpoints/list-cloud-providers.adoc | 25 + .../endpoints/list-installed-add-ons.adoc | 26 + .../pages/endpoints/list-org-users.adoc | 2 +- .../endpoints/list-organization-api-keys.adoc | 22 + .../list-public-cloud-providers.adoc | 25 + .../list-upcoming-workspace-upgrades.adoc | 25 + .../list-workspaces-for-an-add-on.adoc | 39 + .../pages/endpoints/pay-an-invoice.adoc | 53 + .../pages/endpoints/request-an-add-on.adoc | 39 + .../endpoints/update-a-cloud-provider.adoc | 42 + .../pages/endpoints/update-a-users-role.adoc | 2 +- .../update-an-add-on-configuration.adoc | 49 + .../update-organization-details.adoc | 39 + .../endpoints/update-the-default-card.adoc | 39 + .../endpoints/upgrade-a-cloud-provider.adoc | 42 + .../pages/endpoints/upgrade-a-workspace.adoc | 47 + .../endpoints/validate-a-cloud-provider.adoc | 37 + .../pages/endpoints/validate-payment.adoc | 26 + 45 files changed, 2464 insertions(+), 10 deletions(-) create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc diff --git a/modules/savanna/modules/rest-api/_catalog/endpoints.adoc b/modules/savanna/modules/rest-api/_catalog/endpoints.adoc index f309f6f9..203120e4 100644 --- a/modules/savanna/modules/rest-api/_catalog/endpoints.adoc +++ b/modules/savanna/modules/rest-api/_catalog/endpoints.adoc @@ -2425,7 +2425,7 @@ __optional__|string [[_https_api_tgcloud_io_users_get]] == List of users in the org .... -GET https://api.tgcloud.io/controller/v4/v2/users +GET https://api.tgcloud.io/users .... [discrete] @@ -2460,7 +2460,7 @@ List of users in the org. Note: this endpoint is not APIKEY compatible [[_https_api_tgcloud_io_users_userid_roles_put]] == Update the role of an org user .... -PUT https://api.tgcloud.io/controller/v4/v2/users/{userId}/roles +PUT https://api.tgcloud.io/users/{userId}/roles .... [discrete] diff --git a/modules/savanna/modules/rest-api/nav.adoc b/modules/savanna/modules/rest-api/nav.adoc index 2c41bf04..7a7c4c61 100644 --- a/modules/savanna/modules/rest-api/nav.adoc +++ b/modules/savanna/modules/rest-api/nav.adoc @@ -4,20 +4,35 @@ ** xref:rest-api:create-api-key.adoc[Create an API key] ** xref:rest-api:data-plane-apis.adoc[Data-plane APIs] ** xref:rest-api:index-previous.adoc[Overview (previous)] +** Cloud providers +*** xref:rest-api:endpoints/create-a-cloud-provider.adoc[POST Create a cloud provider] +*** xref:rest-api:endpoints/list-cloud-providers.adoc[GET List cloud providers] +*** xref:rest-api:endpoints/list-public-cloud-providers.adoc[GET List public cloud providers] +*** xref:rest-api:endpoints/list-all-cloud-providers.adoc[GET List all cloud providers] +*** xref:rest-api:endpoints/get-a-cloud-provider.adoc[GET Get a cloud provider] +*** xref:rest-api:endpoints/update-a-cloud-provider.adoc[PUT Update a cloud provider] +*** xref:rest-api:endpoints/delete-a-cloud-provider.adoc[DELETE Delete a cloud provider] +*** xref:rest-api:endpoints/validate-a-cloud-provider.adoc[POST Validate a cloud provider] +*** xref:rest-api:endpoints/upgrade-a-cloud-provider.adoc[PUT Upgrade a cloud provider] ** Workgroups *** xref:rest-api:endpoints/create-a-workgroup.adoc[POST Create a workgroup] *** xref:rest-api:endpoints/list-workgroups.adoc[GET List workgroups] *** xref:rest-api:endpoints/get-a-workgroup.adoc[GET Get a workgroup] *** xref:rest-api:endpoints/update-a-workgroup.adoc[PUT Update a workgroup] *** xref:rest-api:endpoints/delete-a-workgroup.adoc[DELETE Delete a workgroup] +*** xref:rest-api:endpoints/acquire-a-pooled-workgroup.adoc[GET Acquire a pooled workgroup] +*** xref:rest-api:endpoints/get-workgroup-metrics.adoc[GET Get workgroup metrics] ** Workspaces *** xref:rest-api:endpoints/create-a-workspace.adoc[POST Create a workspace] *** xref:rest-api:endpoints/get-a-workspace.adoc[GET Get a workspace] *** xref:rest-api:endpoints/update-a-workspace.adoc[PUT Update a workspace] *** xref:rest-api:endpoints/delete-a-workspace.adoc[DELETE Delete a workspace] +*** xref:rest-api:endpoints/resume-a-workspace.adoc[POST Resume a workspace] *** xref:rest-api:endpoints/pause-a-workspace.adoc[POST Pause a workspace] *** xref:rest-api:endpoints/refresh-a-workspace.adoc[POST Refresh a workspace] -*** xref:rest-api:endpoints/resume-a-workspace.adoc[POST Resume a workspace] +*** xref:rest-api:endpoints/upgrade-a-workspace.adoc[POST Upgrade a workspace] +*** xref:rest-api:endpoints/list-upcoming-workspace-upgrades.adoc[GET List upcoming workspace upgrades] +*** xref:rest-api:endpoints/get-workspace-metrics.adoc[GET Get workspace metrics] ** Workspace schedules *** xref:rest-api:endpoints/create-a-workspace-schedule.adoc[POST Create a workspace schedule] *** xref:rest-api:endpoints/get-workspace-schedules.adoc[GET Get workspace schedules] @@ -28,27 +43,57 @@ *** xref:rest-api:endpoints/update-a-database.adoc[PUT Update a database] *** xref:rest-api:endpoints/delete-a-database.adoc[DELETE Delete a database] ** Backups -*** xref:rest-api:endpoints/delete-a-backup.adoc[DELETE Delete a backup] -*** xref:rest-api:endpoints/restore-a-backup.adoc[POST Restore a backup] -*** xref:rest-api:endpoints/set-backup-schedule.adoc[POST Set backup schedule] *** xref:rest-api:endpoints/list-backups.adoc[GET List backups] +*** xref:rest-api:endpoints/restore-a-backup.adoc[POST Restore a backup] *** xref:rest-api:endpoints/get-restore-status.adoc[GET Get restore status] +*** xref:rest-api:endpoints/delete-a-backup.adoc[DELETE Delete a backup] *** xref:rest-api:endpoints/get-backup-schedule.adoc[GET Get backup schedule] +*** xref:rest-api:endpoints/set-backup-schedule.adoc[POST Set backup schedule] ** IP allow list *** xref:rest-api:endpoints/add-an-allowed-ip.adoc[POST Add an allowed IP] *** xref:rest-api:endpoints/list-allowed-ips.adoc[GET List allowed IPs] *** xref:rest-api:endpoints/get-current-ip.adoc[GET Get current IP] -*** xref:rest-api:endpoints/disable-the-allow-list.adoc[PUT Disable the allow list] -*** xref:rest-api:endpoints/enable-the-allow-list.adoc[PUT Enable the allow list] *** xref:rest-api:endpoints/update-an-allowed-ip.adoc[PUT Update an allowed IP] *** xref:rest-api:endpoints/delete-an-allowed-ip.adoc[DELETE Delete an allowed IP] +*** xref:rest-api:endpoints/enable-the-allow-list.adoc[PUT Enable the allow list] +*** xref:rest-api:endpoints/disable-the-allow-list.adoc[PUT Disable the allow list] ** In-database users *** xref:rest-api:endpoints/create-an-in-database-user.adoc[POST Create an in-database user] *** xref:rest-api:endpoints/list-in-database-users.adoc[GET List in-database users] *** xref:rest-api:endpoints/update-a-user-password.adoc[PUT Update a user password] *** xref:rest-api:endpoints/delete-an-in-database-user.adoc[DELETE Delete an in-database user] +** Add-ons +*** xref:rest-api:endpoints/request-an-add-on.adoc[POST Request an add-on] +*** xref:rest-api:endpoints/install-an-add-on.adoc[POST Install an add-on] +*** xref:rest-api:endpoints/list-installed-add-ons.adoc[GET List installed add-ons] +*** xref:rest-api:endpoints/get-an-installed-add-on.adoc[GET Get an installed add-on] +*** xref:rest-api:endpoints/list-workspaces-for-an-add-on.adoc[GET List workspaces for an add-on] +*** xref:rest-api:endpoints/create-an-add-on-configuration.adoc[POST Create an add-on configuration] +*** xref:rest-api:endpoints/list-add-on-configurations.adoc[GET List add-on configurations] +*** xref:rest-api:endpoints/update-an-add-on-configuration.adoc[PUT Update an add-on configuration] +*** xref:rest-api:endpoints/delete-an-add-on-configuration.adoc[DELETE Delete an add-on configuration] +*** xref:rest-api:endpoints/get-add-on-metadata.adoc[GET Get add-on metadata] +** Billing +*** xref:rest-api:endpoints/get-organization-credits.adoc[GET Get organization credits] +*** xref:rest-api:endpoints/get-customer-information.adoc[GET Get customer information] +*** xref:rest-api:endpoints/update-the-default-card.adoc[POST Update the default card] +*** xref:rest-api:endpoints/delete-a-credit-card.adoc[DELETE Delete a credit card] +*** xref:rest-api:endpoints/pay-an-invoice.adoc[POST Pay an invoice] +*** xref:rest-api:endpoints/get-resource-pricing.adoc[GET Get resource pricing] +*** xref:rest-api:endpoints/create-a-billing-session.adoc[POST Create a billing session] +*** xref:rest-api:endpoints/get-billing-status.adoc[GET Get billing status] +*** xref:rest-api:endpoints/validate-payment.adoc[GET Validate payment] +** API keys +*** xref:rest-api:endpoints/create-an-organization-api-key.adoc[POST Create an organization API key] +*** xref:rest-api:endpoints/list-organization-api-keys.adoc[GET List organization API keys] +*** xref:rest-api:endpoints/delete-an-organization-api-key.adoc[DELETE Delete an organization API key] ** Organization *** xref:rest-api:endpoints/get-org-metadata.adoc[GET Get org metadata] *** xref:rest-api:endpoints/list-org-users.adoc[GET List org users] *** xref:rest-api:endpoints/update-a-users-role.adoc[PUT Update a user's role] +*** xref:rest-api:endpoints/update-organization-details.adoc[PUT Update organization details] +*** xref:rest-api:endpoints/get-organization-quota.adoc[GET Get organization quota] +*** xref:rest-api:endpoints/list-accessible-organizations.adoc[GET List accessible organizations] +** MCP +*** xref:rest-api:endpoints/chat-with-mcp-for-onboarding.adoc[POST Chat with MCP for onboarding] ** xref:rest-api:definitions.adoc[Definitions] diff --git a/modules/savanna/modules/rest-api/pages/definitions.adoc b/modules/savanna/modules/rest-api/pages/definitions.adoc index acdee9fd..a320e880 100644 --- a/modules/savanna/modules/rest-api/pages/definitions.adoc +++ b/modules/savanna/modules/rest-api/pages/definitions.adoc @@ -931,3 +931,1000 @@ __optional__|string + +[[_apikey]] +=== APIKey + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**created_at** + +__optional__ +|string +|**creator** + +__optional__ +|string +|**description** + +__optional__ +|string +|**expires_at** + +__optional__ +|string +|**key_name** + +__optional__ +|string +|**org_id** + +__optional__ +|string +|**plaintext_key** + +__optional__ +|string +|**redacted_key** + +__optional__ +|string +|**user_id** + +__optional__ +|string +|=== + +[[_addonpricing]] +=== AddOnPricing + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**platform** + +__optional__ +|string +|**price_per_hour** + +__optional__ +|number +|**region** + +__optional__ +|string +|**type** + +__optional__ +|string +|**workspace_type** + +__optional__ +|string +|=== + +[[_cloudprovideroptions]] +=== CloudProviderOptions + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**account_id** + +__optional__ +|string +|**secure_connection** + +__optional__ +|boolean +|=== + +[[_cloudproviderresource]] +=== CloudProviderResource + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**api_tokens** + +__optional__ +|< string > array +|**availability_zones** + +__optional__ +|< string > array +|**cluster_enabled_log_types** + +__optional__ +|< xref:rest-api:definitions.adoc#_constants_clusterlogtype[constants.ClusterLogType] > array +|**component_versions** + +__optional__ +|string +|**created_at** + +__optional__ +|string +|**created_by** + +__optional__ +|string +|**eks_id** + +__optional__ +|string +|**endpoint_service_name** + +__optional__ +|string +|**id** + +__optional__ +|string +|**last_error** + +__optional__ +|string +|**name** + +__optional__ +|string +|**node_group_config** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroupconfig[aws.NodeGroupConfig] +|**options** + +__optional__ +|xref:rest-api:definitions.adoc#_cloudprovideroptions[CloudProviderOptions] +|**org_id** + +__optional__ +|string +|**platform** + +__optional__ +|string +|**region** + +__optional__ +|string +|**role_arn** + +__optional__ +|string +|**role_external_id** + +__optional__ +|string +|**security_group_id** + +__optional__ +|string +|**short_id** + +__optional__ +|string +|**status** + +__optional__ +|string +|**subnet_id** + +__optional__ +|< string > array +|**type** + +__optional__ +|string +|**updated_at** + +__optional__ +|string +|**version** + +__optional__ +|string +|**version_number** + +__optional__ +|integer +|**vpc_id** + +__optional__ +|string +|**vpc_owned_by_tg** + +__optional__ +|boolean +|**work_dir** + +__optional__ +|string +|=== + +[[_createapikeyrequest]] +=== CreateAPIKeyRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**description** + +__optional__ +|string +|**life_time_in_seconds** + +__optional__ +|integer +|=== + +[[_createcloudproviderresourcerequest]] +=== CreateCloudProviderResourceRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**created_by** + +__optional__ +|string +|**name** + +__optional__ +|string +|**options** + +__optional__ +|xref:rest-api:definitions.adoc#_cloudprovideroptions[CloudProviderOptions] +|**platform** + +__optional__ +|string +|**region** + +__optional__ +|string +|**role_arn** + +__optional__ +|string +|**role_external_id** + +__optional__ +|string +|**type** + +__optional__ +|string +|=== + +[[_createconfigrequest]] +=== CreateConfigRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**config_name** + +__required__ +|string +|**config_value** + +__required__ +|string +|=== + +[[_customercreditcard]] +=== CustomerCreditCard + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**brand** + +__optional__ +|string +|**card_id** + +__optional__ +|string +|**expire_month** + +__optional__ +|integer +|**expire_year** + +__optional__ +|integer +|**last_4_digits** + +__optional__ +|string +|**name_on_card** + +__optional__ +|string +|**org_id** + +__optional__ +|string +|=== + +[[_customerresponse]] +=== CustomerResponse + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**address** + +__optional__ +|xref:rest-api:definitions.adoc#_updateaddressrequest[UpdateAddressRequest] +|**customer_email** + +__optional__ +|string +|**customer_id** + +__optional__ +|string +|**customer_name** + +__optional__ +|string +|=== + +[[_datastoragepricing]] +=== DataStoragePricing + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**platform** + +__optional__ +|string +|**price_per_month** + +__optional__ +|number +|**region** + +__optional__ +|string +|=== + +[[_deleteapikeyrequest]] +=== DeleteAPIKeyRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**key_name** + +__optional__ +|string +|=== + +[[_error]] +=== Error + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**FieldName** + +__optional__ +|string +|**Reason** + +__optional__ +|string +|**Type** + +__optional__ +|xref:rest-api:definitions.adoc#_errortype[ErrorType] +|=== + +[[_errortype]] +=== ErrorType + +Type: string + +[[_featureflag]] +=== FeatureFlag + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**enabled** + +__optional__ +|boolean +|**feature_name** + +__optional__ +|string +|=== + +[[_getcustomercreditcardsresponse]] +=== GetCustomerCreditCardsResponse + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**credit_cards** + +__optional__ +|< xref:rest-api:definitions.adoc#_customercreditcard[CustomerCreditCard] > array +|**default_card** + +__optional__ +|string +|=== + +[[_iamuser]] +=== IAMUser + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**auth0UserID** + +__optional__ +|string +|**created** + +__optional__ +|string +|**description** + +__optional__ +|string +|**email** + +__optional__ +|string +|**enabled** + +__optional__ +|boolean +|**firstName** + +__optional__ +|string +|**id** + +__optional__ +|string +|**lastName** + +__optional__ +|string +|**metadata** + +__optional__ +|xref:rest-api:definitions.adoc#_tgiam_metadata[tgIAM.Metadata] +|**path** + +__optional__ +|string +|**role** + +__optional__ +|string +|**tenantID** + +__optional__ +|string +|**trn** + +__optional__ +|string +|**updated** + +__optional__ +|string +|**username** + +__optional__ +|string +|=== + +[[_orglistuserresponse]] +=== OrgListUserResponse + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**auth0UserID** + +__optional__ +|string +|**authID** + +__optional__ +|string +|**created** + +__optional__ +|string +|**email** + +__optional__ +|string +|**enabled** + +__optional__ +|boolean +|**firstName** + +__optional__ +|string +|**id** + +__optional__ +|string +|**lastName** + +__optional__ +|string +|**metadata** + +__optional__ +|xref:rest-api:definitions.adoc#_orgmetadata[OrgMetadata] +|**path** + +__optional__ +|string +|**roles** + +__optional__ +|< xref:rest-api:definitions.adoc#_orgrole[OrgRole] > array +|**tenantID** + +__optional__ +|string +|**trn** + +__optional__ +|string +|**updated** + +__optional__ +|string +|**username** + +__optional__ +|string +|=== + +[[_orgmetadata]] +=== OrgMetadata + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**attachedTo** + +__optional__ +|< string > array +|**lastLogin** + +__optional__ +|string +|=== + +[[_orgquota]] +=== OrgQuota + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**max_workspace_memory** + +__optional__ +|string +|**max_workspace_type** + +__optional__ +|string +|**memory_limit** + +__optional__ +|string +|**memory_usage_in_bytes** + +__optional__ +|integer +|**org_id** + +__optional__ +|string +|**ro_workspace_count_limit** + +__optional__ +|integer +|**ro_workspace_count_usage** + +__optional__ +|integer +|**rw_workspace_count_limit** + +__optional__ +|integer +|**rw_workspace_count_usage** + +__optional__ +|integer +|**tier** + +__optional__ +|string +|**workspace_auto_backup_count_limit** + +__optional__ +|integer +|**workspace_auto_backup_retention_in_days** + +__optional__ +|integer +|**workspace_manual_backup_count_limit** + +__optional__ +|integer +|=== + +[[_orgrequest]] +=== OrgRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**logoUrl** + +__optional__ +|string +|**orgDisplayName** + +__optional__ +|string +|**orgID** + +__optional__ +|string +|**orgName** + +__optional__ +|string +|=== + +[[_orgrole]] +=== OrgRole + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**displayName** + +__optional__ +|string +|**id** + +__optional__ +|string +|**name** + +__optional__ +|string +|**path** + +__optional__ +|string +|**tenantID** + +__optional__ +|string +|**trn** + +__optional__ +|string +|=== + +[[_organization]] +=== Organization + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**create_time** + +__optional__ +|string +|**creator** + +__optional__ +|string +|**delinquent_since** + +__optional__ +|string +|**feature_flag** + +__optional__ +|< xref:rest-api:definitions.adoc#_featureflag[FeatureFlag] > array +|**logo_url** + +__optional__ +|string +|**org_display_name** + +__optional__ +|string +|**org_id** + +__optional__ +|string +|**org_name** + +__optional__ +|string +|=== + +[[_platform]] +=== Platform + +Type: string + +[[_publiccloudproviderresource]] +=== PublicCloudProviderResource + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**component_versions** + +__optional__ +|string +|**id** + +__optional__ +|string +|**name** + +__optional__ +|string +|**org_id** + +__optional__ +|string +|**platform** + +__optional__ +|string +|**region** + +__optional__ +|string +|**status** + +__optional__ +|string +|**version** + +__optional__ +|string +|**version_number** + +__optional__ +|integer +|=== + +[[_putorgusersroles]] +=== PutOrgUsersRoles + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**roles** + +__optional__ +|< string > array +|=== + +[[_requestaddonrequest]] +=== RequestAddonRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**addon_name** + +__optional__ +|string +|**message** + +__optional__ +|string +|=== + +[[_resourcepricing]] +=== ResourcePricing + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**addon_pricing** + +__optional__ +|< xref:rest-api:definitions.adoc#_addonpricing[AddOnPricing] > array +|**data_storage_pricing** + +__optional__ +|< xref:rest-api:definitions.adoc#_datastoragepricing[DataStoragePricing] > array +|**workspace_pricing** + +__optional__ +|< xref:rest-api:definitions.adoc#_workspacepricing[WorkspacePricing] > array +|=== + +[[_response]] +=== Response + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**Error** + +__optional__ +|boolean +|**ErrorDetails** + +__optional__ +|< xref:rest-api:definitions.adoc#_error[Error] > array +|**Message** + +__optional__ +|string +|**RequestID** + +__optional__ +|string +|**Result** + +__optional__ +|object +|=== + +[[_servermcpchatrequest]] +=== ServerMCPChatRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**authorization** + +__optional__ +|string +|**debug** + +__optional__ +|boolean +|**message** + +__optional__ +|object +|**thread_id** + +__optional__ +|string +|**type** + +__optional__ +|string +|**workspace_id** + +__optional__ +|string +|=== + +[[_updateaddressrequest]] +=== UpdateAddressRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**city** + +__optional__ +|string +|**country** + +__optional__ +|string +|**line1** + +__optional__ +|string +|**postalCode** + +__optional__ +|string +|**state** + +__optional__ +|string +|=== + +[[_updatecloudproviderresourcerequest]] +=== UpdateCloudProviderResourceRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**name** + +__optional__ +|string +|**version** + +__optional__ +|string +|=== + +[[_updateconfigrequest]] +=== UpdateConfigRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**config_value** + +__required__ +|string +|=== + +[[_upgradecloudprovidercomponent]] +=== UpgradeCloudProviderComponent + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**name** + +__optional__ +|string +|**version** + +__optional__ +|string +|=== + +[[_upgradecloudproviderresourcerequest]] +=== UpgradeCloudProviderResourceRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**cluster_enabled_log_types** + +__optional__ +|< xref:rest-api:definitions.adoc#_constants_clusterlogtype[constants.ClusterLogType] > array +|**components** + +__optional__ +|< xref:rest-api:definitions.adoc#_upgradecloudprovidercomponent[UpgradeCloudProviderComponent] > array +|**node_group_config** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroupconfig[aws.NodeGroupConfig] +|=== + +[[_upgradeworkspacerequest]] +=== UpgradeWorkspaceRequest + +Upgrade Workspace Request + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**desired_version** + +__optional__ +|string +|**scheduled** + +__optional__ +|boolean +|=== + +[[_validatecloudproviderrequest]] +=== ValidateCloudProviderRequest + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**account_id** + +__optional__ +|string +|**platform** + +__required__ +|string +|**region** + +__required__ +|string +|**role_arn** + +__required__ +|string +|**role_external_id** + +__optional__ +|string +|**secure_connection** + +__optional__ +|boolean +|=== + +[[_workspacemetadata]] +=== WorkspaceMetadata + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**regions** + +__optional__ +|< xref:rest-api:definitions.adoc#_region[Region] > array +|**tgVersions** + +__optional__ +|< xref:rest-api:definitions.adoc#_tgversion[TGVersion] > array +|**workspaceTypes** + +__optional__ +|< xref:rest-api:definitions.adoc#_workspacetype[WorkspaceType] > array +|=== + +[[_workspacepricing]] +=== WorkspacePricing + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**cloud_provider** + +__optional__ +|string +|**ha** + +__optional__ +|string +|**platform** + +__optional__ +|string +|**price_per_hour** + +__optional__ +|number +|**region** + +__optional__ +|string +|**workspace_type** + +__optional__ +|string +|=== + +[[_aws_nodegroup]] +=== aws.NodeGroup + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**max_size** + +__optional__ +|integer +|**min_size** + +__optional__ +|integer +|**overprovisioning_factor** + +__optional__ +|integer +|=== + +[[_aws_nodegroupconfig]] +=== aws.NodeGroupConfig + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**ng_16** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] +|**ng_32** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] +|**ng_48** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] +|**ng_64** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] +|**ng_system** + +__optional__ +|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] +|**prefetch_image_list** + +__optional__ +|< string > array +|=== + +[[_constants_clusterlogtype]] +=== constants.ClusterLogType + +Type: string + +[[_data_encryptionmethod]] +=== data.EncryptionMethod + +Type: string + +[[_observability_metricvalue]] +=== observability.MetricValue + +Workspace metric value + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**avgValue** + +__optional__ +|number +|=== + +[[_observability_workgroupmetric]] +=== observability.WorkgroupMetric + +Metrics for workspaces in a workgroup + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**workgroupID** + +__optional__ +|string +|**workspaceMetrics** + +__optional__ +|< xref:rest-api:definitions.adoc#_observability_workspacemetric[observability.WorkspaceMetric] > array +|=== + +[[_observability_workspacemetric]] +=== observability.WorkspaceMetric + +Workspace metric + +[options="header", cols=".^3a,.^4a"] +|=== +|Name|Schema +|**metrics** + +__optional__ +|object +|**workspaceID** + +__optional__ +|string +|=== + +[[_tgiam_metadata]] +=== tgIAM.Metadata + +Type: object diff --git a/modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc new file mode 100644 index 00000000..8712c2b4 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc @@ -0,0 +1,25 @@ += Acquire a pooled workgroup +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/pooled-workgroups/acquire +.... + +Acquire pooled workgroup in your org + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc b/modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc new file mode 100644 index 00000000..4ac0e0ef --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc @@ -0,0 +1,52 @@ += Chat with MCP for onboarding +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat +.... + +Handle MCP chat requests and return streaming responses via Server-Sent Events + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**workgroupID** + +__required__ +|Workgroup ID +|string +|**Path** +|**workspaceID** + +__required__ +|Workspace ID +|string +|**Header** +|**ThreadID** + +__required__ +|Thread ID +|string +|**Body** +|**request** + +__required__ +|MCP chat request +|xref:rest-api:definitions.adoc#_servermcpchatrequest[ServerMCPChatRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Server-Sent Events stream|string +|=== + +== Consumes + +* `application/json` + +== Produces + +* `text/event-stream` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc new file mode 100644 index 00000000..c8e7936d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc @@ -0,0 +1,26 @@ += Create a billing session +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/billing/session +.... + +Creates a new session for the billing manager using the provided organization ID. + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully retrieved session.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to retrieve session.|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc new file mode 100644 index 00000000..d139cc68 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc @@ -0,0 +1,37 @@ += Create a cloud provider +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/cloud-providers +.... + +Create a new cloud provider + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body** +|**request** + +__required__ +|Create Cloud Provider Resource Request +|xref:rest-api:definitions.adoc#_createcloudproviderresourcerequest[CreateCloudProviderResourceRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc new file mode 100644 index 00000000..2dffdc23 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc @@ -0,0 +1,44 @@ += Create an add-on configuration +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/add-ons/{installedAddonsID}/configs +.... + +Create a new configuration for a specific installed add-on. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**installedAddonsID** + +__required__ +|Installed Add-on ID +|string +|**Body** +|**body** + +__required__ +|Create Configuration Request +|xref:rest-api:definitions.adoc#_createconfigrequest[CreateConfigRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad creation input.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to create configuration.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc new file mode 100644 index 00000000..6318ae67 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc @@ -0,0 +1,39 @@ += Create an organization API key +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/org/api-keys +.... + +Create a new external organization API key with an optional lifetime. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body** +|**request** + +__required__ +|Create API Key Request +|xref:rest-api:definitions.adoc#_createapikeyrequest[CreateAPIKeyRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully created the external org API key.|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad request|xref:rest-api:definitions.adoc#_response[Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc new file mode 100644 index 00000000..e6bcf08d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc @@ -0,0 +1,37 @@ += Delete a cloud provider +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +DELETE /controller/v4/v2/cloud-providers/{cloudProviderID} +.... + +Delete a cloud provider + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**cloudProviderID** + +__required__ +|Cloud Provider ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc new file mode 100644 index 00000000..8a9de997 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc @@ -0,0 +1,39 @@ += Delete a credit card +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +DELETE /controller/v4/v2/billing/credit-cards/{cardID} +.... + +Deletes a customer's credit card by card ID. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**cardID** + +__required__ +|Card ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully deleted customer's card.|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|CardID is not provided.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Unable to delete customer's card.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc new file mode 100644 index 00000000..02013183 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc @@ -0,0 +1,44 @@ += Delete an add-on configuration +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +DELETE /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID} +.... + +Delete a specific configuration for an add-on. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**installedAddonsID** + +__required__ +|Installed Add-on ID +|string +|**Path** +|**configID** + +__required__ +|Configuration ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad delete input.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to delete configuration.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc new file mode 100644 index 00000000..2fec586f --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc @@ -0,0 +1,39 @@ += Delete an organization API key +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +DELETE /controller/v4/v2/org/api-keys +.... + +Delete an external organization API key by its name. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body** +|**request** + +__required__ +|Delete API Key Request +|xref:rest-api:definitions.adoc#_deleteapikeyrequest[DeleteAPIKeyRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully deleted the external org API key.|xref:rest-api:definitions.adoc#_response[Response] +|**400**|Bad request|xref:rest-api:definitions.adoc#_response[Response] +|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc new file mode 100644 index 00000000..1a68f9b9 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc @@ -0,0 +1,37 @@ += Get a cloud provider +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/cloud-providers/{cloudProviderID} +.... + +Get a cloud provider by ID + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**cloudProviderID** + +__required__ +|Cloud Provider ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc new file mode 100644 index 00000000..32cebf2d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc @@ -0,0 +1,27 @@ += Get add-on metadata +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/addons/meta +.... + +Get metadata for add-ons. + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc new file mode 100644 index 00000000..81b385f7 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc @@ -0,0 +1,39 @@ += Get an installed add-on +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/installed-addons/{installedAddonsID} +.... + +Get details of an installed add-on by its ID. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**installedAddonsID** + +__required__ +|Installed Add-on ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc new file mode 100644 index 00000000..28bb5d87 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc @@ -0,0 +1,34 @@ += Get billing status +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/billing/status +.... + +Retrieves the marketplace status of each platform and currently active payment method for an organization. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Header** +|**Authorization** + +__required__ +|Bearer token +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to retrieve billing status|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc new file mode 100644 index 00000000..d6df1152 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc @@ -0,0 +1,22 @@ += Get customer information +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/billing/credit-cards +.... + +Retrieves the Amberlfo customer information based on the organization ID. + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully retrieved customer.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Unable to retrieve customer.|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc new file mode 100644 index 00000000..6ab52547 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc @@ -0,0 +1,34 @@ += Get organization credits +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/billing/credit +.... + +Fetches the total credits available for the specified organization. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Header** +|**Authorization** + +__required__ +|Bearer token +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to retrieve credits|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc new file mode 100644 index 00000000..37420a81 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc @@ -0,0 +1,26 @@ += Get organization quota +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/org/quota +.... + +Get the quota details for a specific organization by its ID + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully get org quota|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc new file mode 100644 index 00000000..9a83dc21 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc @@ -0,0 +1,22 @@ += Get resource pricing +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/billing/resource-pricing +.... + +Retrieve the pricing information for resources + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc new file mode 100644 index 00000000..d6700c5d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc @@ -0,0 +1,37 @@ += Get workgroup metrics +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /observability/{workgroupID}/metrics +.... + +Get workspace metrics in a given workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**workgroupID** + +__required__ +|Workgroup ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc new file mode 100644 index 00000000..f57de007 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc @@ -0,0 +1,38 @@ += Get workspace metrics +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /metrics/{workgroupID}/{workspaceID} +.... + +Returns the latest tigergraph_* samples for the given workspace as Prometheus text exposition format + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**workgroupID** + +__required__ +|Workgroup ID +|string +|**Path** +|**workspaceID** + +__required__ +|Workspace ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Prometheus exposition format|string +|=== + +== Produces + +* `text/plain` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc new file mode 100644 index 00000000..ea3ec9f0 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc @@ -0,0 +1,44 @@ += Install an add-on +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/addons/{addonsID}/install +.... + +Installs an add-on by ID. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**addonsID** + +__required__ +|Add-on ID +|string +|**Query** +|**enable** + +__required__ +|Enable or disable add-on +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc new file mode 100644 index 00000000..c73bcf8d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc @@ -0,0 +1,26 @@ += List accessible organizations +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/org/self +.... + +List of orgs that the user has access to + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc new file mode 100644 index 00000000..d5afb29b --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc @@ -0,0 +1,44 @@ += List add-on configurations +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName} +.... + +List configurations for a specific installed add-on. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**installedAddonsID** + +__required__ +|Installed Add-on ID +|string +|**Path** +|**configName** + +__required__ +|Configuration Name +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Failed to parse addons_id.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to get internal addons configurations.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc new file mode 100644 index 00000000..477a8de7 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc @@ -0,0 +1,25 @@ += List all cloud providers +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /cloud-providers/all +.... + +List all cloud provider + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc new file mode 100644 index 00000000..948ca1a9 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc @@ -0,0 +1,25 @@ += List cloud providers +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/cloud-providers +.... + +List all cloud provider belonging to the org + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc new file mode 100644 index 00000000..cff73de7 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc @@ -0,0 +1,26 @@ += List installed add-ons +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/installed-addons +.... + +List all installed add-ons for the organization. + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc index c1e52cfd..6485a84a 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc @@ -3,7 +3,7 @@ [.api-request] .... -GET /controller/v4/v2/users +GET /users .... List of users in the org. Note: this endpoint is not APIKEY compatible diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc new file mode 100644 index 00000000..c6ceb2d1 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc @@ -0,0 +1,22 @@ += List organization API keys +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/org/api-keys +.... + +List all external organization API keys. + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully listed the external org API keys.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc new file mode 100644 index 00000000..5a4d88af --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc @@ -0,0 +1,25 @@ += List public cloud providers +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/cloud-providers/public +.... + +List of public cloud providers + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc new file mode 100644 index 00000000..6840c5e6 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc @@ -0,0 +1,25 @@ += List upcoming workspace upgrades +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/workspaces/upgrade-next-window +.... + +List workspaces upgrading in next window + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc new file mode 100644 index 00000000..27bbe87c --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc @@ -0,0 +1,39 @@ += List workspaces for an add-on +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/addons/{addonsID}/workspaces +.... + +Retrieves a list of workspaces associated with a specific addons ID. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**addonsID** + +__required__ +|Addons ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc b/modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc new file mode 100644 index 00000000..e3efee49 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc @@ -0,0 +1,53 @@ += Pay an invoice +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/billing/payment/invoice +.... + +Send invoice for payment + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Query** +|**year** + +__required__ +|Year of the invoice +|integer +|**Query** +|**month** + +__required__ +|Month of the invoice +|integer +|**Query** +|**day** + +__required__ +|Day of the invoice +|integer +|**Query** +|**productPlanId** + +__required__ +|Product Plan ID used when the invoice was generated +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully paid invoice.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to pay invoice.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc new file mode 100644 index 00000000..231a7374 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc @@ -0,0 +1,39 @@ += Request an add-on +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/addons/request +.... + +Request an add-on by providing the addon name and a message. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body** +|**request** + +__required__ +|Request body +|xref:rest-api:definitions.adoc#_requestaddonrequest[RequestAddonRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully request addon.|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Invalid request body.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to request addon.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc new file mode 100644 index 00000000..64999da6 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc @@ -0,0 +1,42 @@ += Update a cloud provider +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +PUT /controller/v4/v2/cloud-providers/{cloudProviderID} +.... + +Update a cloud provider + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**cloudProviderID** + +__required__ +|Cloud Provider ID +|string +|**Body** +|**request** + +__required__ +|Update Cloud Provider Resource Request +|xref:rest-api:definitions.adoc#_updatecloudproviderresourcerequest[UpdateCloudProviderResourceRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc index c2392f57..d720703c 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc @@ -3,7 +3,7 @@ [.api-request] .... -PUT /controller/v4/v2/users/{userId}/roles +PUT /users/{userId}/roles .... Updates the role of an org user. Note: this endpoint is not APIKEY compatible diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc new file mode 100644 index 00000000..9e7c72bf --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc @@ -0,0 +1,49 @@ += Update an add-on configuration +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +PUT /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID} +.... + +Update an existing configuration for an add-on. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**installedAddonsID** + +__required__ +|Installed Add-on ID +|string +|**Path** +|**configID** + +__required__ +|Configuration ID +|string +|**Body** +|**body** + +__required__ +|Update Configuration Request +|xref:rest-api:definitions.adoc#_updateconfigrequest[UpdateConfigRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad update input.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Failed to update configuration.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc new file mode 100644 index 00000000..bba97fd2 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc @@ -0,0 +1,39 @@ += Update organization details +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +PUT /controller/v4/v2/org +.... + +Update organization details such as name, display name, and logo URL + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body** +|**request** + +__required__ +|Organization request +|xref:rest-api:definitions.adoc#_orgrequest[OrgRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully updated the org.|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc new file mode 100644 index 00000000..d264f574 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc @@ -0,0 +1,39 @@ += Update the default card +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/billing/credit-cards/{cardID} +.... + +Updates the default credit card for a customer based on the provided card ID. + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**cardID** + +__required__ +|Card ID +|string +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully updated customer's default card.|xref:rest-api:definitions.adoc#_response[Response] + object +|**400**|CardID is not provided.|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Unable to update customer's default card.|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc new file mode 100644 index 00000000..874dc111 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc @@ -0,0 +1,42 @@ += Upgrade a cloud provider +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +PUT /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade +.... + +Upgrade a cloud provider + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**cloudProviderID** + +__required__ +|Cloud Provider ID +|string +|**Body** +|**request** + +__required__ +|Upgrade Cloud Provider Resource Request +|xref:rest-api:definitions.adoc#_upgradecloudproviderresourcerequest[UpgradeCloudProviderResourceRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc new file mode 100644 index 00000000..e699dff6 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc @@ -0,0 +1,47 @@ += Upgrade a workspace +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade +.... + +Upgrade workspace in workgroup + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Path** +|**workgroupID** + +__required__ +|Workgroup ID +|string +|**Path** +|**workspaceID** + +__required__ +|Workspace ID +|string +|**Body** +|**request** + +__required__ +|Upgrade workspace request +|xref:rest-api:definitions.adoc#_upgradeworkspacerequest[UpgradeWorkspaceRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc new file mode 100644 index 00000000..aefe3a53 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc @@ -0,0 +1,37 @@ += Validate a cloud provider +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +POST /controller/v4/v2/cloud-providers/validate +.... + +Validate the cloud provider request + +== Parameters + +[options="header", cols=".^2a,.^3a,.^9a,.^4a"] +|=== +|Type|Name|Description|Schema +|**Body** +|**request** + +__required__ +|Validate Cloud Provider Request +|xref:rest-api:definitions.adoc#_validatecloudproviderrequest[ValidateCloudProviderRequest] +|=== + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successfully validated Cloud Provider|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc b/modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc new file mode 100644 index 00000000..c2dd35c8 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc @@ -0,0 +1,26 @@ += Validate payment +// Generated by lib/split-endpoints.js from _catalog/openapi.json. + +[.api-request] +.... +GET /controller/v4/v2/billing/validation +.... + +Validates if the payment can be processed for the organization + +== Responses + +[options="header", cols=".^2a,.^14a,.^4a"] +|=== +|HTTP Code|Description|Schema +|**200**|Successful payment validation check|xref:rest-api:definitions.adoc#_response[Response] + object +|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] + object +|=== + +== Consumes + +* `application/json` + +== Produces + +* `application/json` From 7a83075ebfe6ead5daa8640226c2c8972914f385 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:49:40 +0530 Subject: [PATCH 07/22] build(savanna): allowlist public endpoints in catalog splitter Drop OpenAPI snapshot ingestion and only emit pages for routes explicitly listed in LABELS so internal Swagger surface is not published by default. --- lib/split-endpoints.js | 179 +- .../modules/rest-api/_catalog/openapi.json | 6461 ----------------- 2 files changed, 12 insertions(+), 6628 deletions(-) delete mode 100644 modules/savanna/modules/rest-api/_catalog/openapi.json diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index cfd21ee2..87df51a3 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -4,9 +4,8 @@ * Splits the generated Savanna control-plane catalog into one page per * endpoint, then writes the module nav. * - * Sources are endpoints.adoc (curated existing pages) and openapi.json (the - * complete live API snapshot) in modules/savanna/modules/rest-api/_catalog. - * Refresh the snapshot when the API changes, then run `npm run endpoints:split`. + * Source of truth is the catalog in modules/savanna/modules/rest-api/_catalog. + * Replace it when the API is regenerated, then run `npm run endpoints:split`. * Everything under pages/endpoints/ is overwritten, so edit the catalog. * * Usage: node lib/split-endpoints.js [--check] @@ -17,15 +16,12 @@ const path = require('path') const MODULE_DIR = path.join(__dirname, '..', 'modules/savanna/modules/rest-api') const CATALOG = path.join(MODULE_DIR, '_catalog/endpoints.adoc') -const OPENAPI = path.join(MODULE_DIR, '_catalog/openapi.json') const PAGES_DIR = path.join(MODULE_DIR, 'pages') const ENDPOINTS_DIR = path.join(PAGES_DIR, 'endpoints') const NAV = path.join(MODULE_DIR, 'nav.adoc') -const DEFINITIONS = path.join(PAGES_DIR, 'definitions.adoc') // Swagger tag -> nav group, in the order the groups should appear. const GROUPS = [ - ['CloudProvider', 'Cloud providers'], ['Workgroup', 'Workgroups'], ['Workspace', 'Workspaces'], ['WorkspaceSchedule', 'Workspace schedules'], @@ -33,15 +29,10 @@ const GROUPS = [ ['Backup', 'Backups'], ['AllowedIP', 'IP allow list'], ['DatabaseUser', 'In-database users'], - ['Add-ons', 'Add-ons'], - ['Billing', 'Billing'], - ['APIKey', 'API keys'], ['Org', 'Organization'], - ['MCP', 'MCP'], ] const GENERATED = '// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead.' -const GENERATED_OPENAPI = '// Generated by lib/split-endpoints.js from _catalog/openapi.json.' function slugify (label) { return label @@ -51,26 +42,16 @@ function slugify (label) { .replace(/^-|-$/g, '') } -// Friendly endpoint names, keyed by request line. Object order is also the -// nav order within each group (create / list / get / update / delete, then -// extra actions). The catalog's own titles are swagger summaries. +// This map is the explicit public API allowlist as well as the source of +// friendly names. Object order is the nav order within each resource group. +// Do not add a route merely because it appears in the service Swagger file: +// only supported customer-facing contracts belong here. const LABELS = { - 'POST /controller/v4/v2/cloud-providers': 'Create a cloud provider', - 'GET /controller/v4/v2/cloud-providers': 'List cloud providers', - 'GET /controller/v4/v2/cloud-providers/public': 'List public cloud providers', - 'GET /cloud-providers/all': 'List all cloud providers', - 'GET /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Get a cloud provider', - 'PUT /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Update a cloud provider', - 'DELETE /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Delete a cloud provider', - 'POST /controller/v4/v2/cloud-providers/validate': 'Validate a cloud provider', - 'PUT /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade': 'Upgrade a cloud provider', 'POST /controller/v4/v2/workgroups': 'Create a workgroup', 'GET /controller/v4/v2/workgroups': 'List workgroups', 'GET /controller/v4/v2/workgroups/{workgroupID}': 'Get a workgroup', 'PUT /controller/v4/v2/workgroups/{workgroupID}': 'Update a workgroup', 'DELETE /controller/v4/v2/workgroups/{workgroupID}': 'Delete a workgroup', - 'GET /controller/v4/v2/pooled-workgroups/acquire': 'Acquire a pooled workgroup', - 'GET /observability/{workgroupID}/metrics': 'Get workgroup metrics', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces': 'Create a workspace', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Get a workspace', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Update a workspace', @@ -78,9 +59,6 @@ const LABELS = { 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume': 'Resume a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause': 'Pause a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh': 'Refresh a workspace', - 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade': 'Upgrade a workspace', - 'GET /controller/v4/v2/workspaces/upgrade-next-window': 'List upcoming workspace upgrades', - 'GET /metrics/{workgroupID}/{workspaceID}': 'Get workspace metrics', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Create a workspace schedule', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Get workspace schedules', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}': 'Update a workspace schedule', @@ -105,38 +83,13 @@ const LABELS = { 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'List in-database users', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Update a user password', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Delete an in-database user', - 'POST /controller/v4/v2/addons/request': 'Request an add-on', - 'POST /controller/v4/v2/addons/{addonsID}/install': 'Install an add-on', - 'GET /controller/v4/v2/installed-addons': 'List installed add-ons', - 'GET /controller/v4/v2/installed-addons/{installedAddonsID}': 'Get an installed add-on', - 'GET /controller/v4/v2/addons/{addonsID}/workspaces': 'List workspaces for an add-on', - 'POST /controller/v4/v2/add-ons/{installedAddonsID}/configs': 'Create an add-on configuration', - 'GET /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}': 'List add-on configurations', - 'PUT /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}': 'Update an add-on configuration', - 'DELETE /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}': 'Delete an add-on configuration', - 'GET /controller/v4/v2/addons/meta': 'Get add-on metadata', - 'GET /controller/v4/v2/billing/credit': 'Get organization credits', - 'GET /controller/v4/v2/billing/credit-cards': 'Get customer information', - 'POST /controller/v4/v2/billing/credit-cards/{cardID}': 'Update the default card', - 'DELETE /controller/v4/v2/billing/credit-cards/{cardID}': 'Delete a credit card', - 'POST /controller/v4/v2/billing/payment/invoice': 'Pay an invoice', - 'GET /controller/v4/v2/billing/resource-pricing': 'Get resource pricing', - 'POST /controller/v4/v2/billing/session': 'Create a billing session', - 'GET /controller/v4/v2/billing/status': 'Get billing status', - 'GET /controller/v4/v2/billing/validation': 'Validate payment', - 'POST /controller/v4/v2/org/api-keys': 'Create an organization API key', - 'GET /controller/v4/v2/org/api-keys': 'List organization API keys', - 'DELETE /controller/v4/v2/org/api-keys': 'Delete an organization API key', 'GET /controller/v4/v2/workspaces/meta': 'Get org metadata', 'GET /users': 'List org users', 'PUT /users/{userId}/roles': "Update a user's role", - 'PUT /controller/v4/v2/org': 'Update organization details', - 'GET /controller/v4/v2/org/quota': 'Get organization quota', - 'GET /controller/v4/v2/org/self': 'List accessible organizations', - 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat': 'Chat with MCP for onboarding', } -const LABEL_ORDER = Object.fromEntries(Object.keys(LABELS).map((key, i) => [key, i])) +const PUBLIC_ENDPOINTS = new Set(Object.keys(LABELS)) +const LABEL_ORDER = Object.fromEntries([...PUBLIC_ENDPOINTS].map((request, index) => [request, index])) function parseCatalog (text) { const lines = text.split('\n') @@ -174,113 +127,6 @@ function parseCatalog (text) { return endpoints } -function schemaName (ref) { - return ref.slice(ref.lastIndexOf('/') + 1) -} - -function definitionAnchor (name) { - return '_' + name.toLowerCase().replace(/[^a-z0-9]+/g, '_') -} - -function escapeCell (value) { - return String(value || '').replace(/\r?\n/g, ' ').replace(/\|/g, '\\|').trim() -} - -function renderSchema (schema) { - if (!schema) return '—' - if (schema.$ref) { - const name = schemaName(schema.$ref) - return 'xref:rest-api:definitions.adoc#' + definitionAnchor(name) + '[' + name + ']' - } - if (schema.allOf) return schema.allOf.map(renderSchema).join(' + ') - if (schema.type === 'array') return '< ' + renderSchema(schema.items || {}) + ' > array' - if (schema.type === 'object' && schema.additionalProperties) { - return 'object' - } - return schema.type ? schema.type + (schema.format ? ' (' + schema.format + ')' : '') : 'object' -} - -function renderOperationBody (operation) { - const out = [escapeCell(operation.description || operation.summary)] - const parameters = operation.parameters || [] - if (parameters.length) { - out.push('', '== Parameters', '', '[options="header", cols=".^2a,.^3a,.^9a,.^4a"]', '|===') - out.push('|Type|Name|Description|Schema') - for (const parameter of parameters) { - out.push( - '|**' + escapeCell(parameter.in === 'body' ? 'Body' : parameter.in[0].toUpperCase() + parameter.in.slice(1)) + '**', - '|**' + escapeCell(parameter.name) + '** +', - parameter.required ? '__required__' : '__optional__', - '|' + escapeCell(parameter.description), - '|' + renderSchema(parameter.schema || parameter) - ) - } - out.push('|===') - } - out.push('', '== Responses', '', '[options="header", cols=".^2a,.^14a,.^4a"]', '|===') - out.push('|HTTP Code|Description|Schema') - for (const [code, response] of Object.entries(operation.responses || {})) { - out.push('|**' + code + '**|' + escapeCell(response.description) + '|' + renderSchema(response.schema)) - } - out.push('|===') - if (operation.consumes && operation.consumes.length) { - out.push('', '== Consumes', '', ...operation.consumes.map((type) => '* `' + type + '`')) - } - if (operation.produces && operation.produces.length) { - out.push('', '== Produces', '', ...operation.produces.map((type) => '* `' + type + '`')) - } - return out.join('\n') -} - -function addOpenApiEndpoints (endpoints, spec) { - const existing = new Set(endpoints.map((endpoint) => endpoint.method + ' ' + endpoint.path)) - for (const [apiPath, pathItem] of Object.entries(spec.paths || {})) { - for (const [method, operation] of Object.entries(pathItem)) { - const upperMethod = method.toUpperCase() - if (!['GET', 'POST', 'PUT', 'PATCH', 'DELETE'].includes(upperMethod)) continue - const request = upperMethod + ' ' + apiPath - if (existing.has(request)) continue - endpoints.push({ - method: upperMethod, - path: apiPath, - tags: operation.tags || [], - body: renderOperationBody(operation).split('\n'), - openapi: true, - }) - } - } -} - -function renderDefinition (name, schema) { - const out = ['', '[[' + definitionAnchor(name) + ']]', '=== ' + name, ''] - if (schema.description) out.push(escapeCell(schema.description), '') - const properties = schema.properties || {} - const required = new Set(schema.required || []) - if (Object.keys(properties).length) { - out.push('[options="header", cols=".^3a,.^4a"]', '|===', '|Name|Schema') - for (const [propertyName, propertySchema] of Object.entries(properties)) { - out.push( - '|**' + escapeCell(propertyName) + '** +', - required.has(propertyName) ? '__required__' : '__optional__', - '|' + renderSchema(propertySchema) - ) - } - out.push('|===') - } else { - out.push('Type: ' + renderSchema(schema)) - } - return out.join('\n') + '\n' -} - -function appendMissingDefinitions (spec) { - let text = fs.readFileSync(DEFINITIONS, 'utf8') - for (const [name, schema] of Object.entries(spec.definitions || {})) { - if (text.includes('[[' + definitionAnchor(name) + ']]')) continue - text += renderDefinition(name, schema) - } - fs.writeFileSync(DEFINITIONS, text) -} - /** Rewrites catalog markup for a standalone page. */ function renderBody (body) { return body @@ -302,7 +148,7 @@ function renderBody (body) { function renderPage (endpoint, label) { return [ '= ' + label, - endpoint.openapi ? GENERATED_OPENAPI : GENERATED, + GENERATED, '', '[.api-request]', '....', @@ -357,9 +203,7 @@ function rewriteIncomingLinks (endpoints) { } function main () { - const spec = JSON.parse(fs.readFileSync(OPENAPI, 'utf8')) const endpoints = parseCatalog(fs.readFileSync(CATALOG, 'utf8')) - addOpenApiEndpoints(endpoints, spec) const groupTitles = new Map(GROUPS) const grouped = new Map(GROUPS.map(([, title]) => [title, []])) const slugs = new Set() @@ -369,7 +213,9 @@ function main () { if (!groupTitles.has(tag)) throw new Error('unmapped tag "' + tag + '" for ' + endpoint.anchor) if (!endpoint.method) throw new Error('no request line for ' + endpoint.anchor) const request = endpoint.method + ' ' + endpoint.path - if (!LABELS[request]) throw new Error('no label for "' + request + '", add one to LABELS') + if (!PUBLIC_ENDPOINTS.has(request)) { + throw new Error('"' + request + '" is not in the public API allowlist') + } endpoint.label = LABELS[request] endpoint.slug = slugify(endpoint.label) if (slugs.has(endpoint.slug)) throw new Error('duplicate slug ' + endpoint.slug) @@ -386,7 +232,6 @@ function main () { fs.writeFileSync(path.join(ENDPOINTS_DIR, endpoint.slug + '.adoc'), renderPage(endpoint, endpoint.label)) } fs.writeFileSync(NAV, renderNav(grouped)) - appendMissingDefinitions(spec) const rewritten = rewriteIncomingLinks(endpoints) console.log('wrote ' + endpoints.length + ' endpoint pages and nav') diff --git a/modules/savanna/modules/rest-api/_catalog/openapi.json b/modules/savanna/modules/rest-api/_catalog/openapi.json deleted file mode 100644 index 5aec61ae..00000000 --- a/modules/savanna/modules/rest-api/_catalog/openapi.json +++ /dev/null @@ -1,6461 +0,0 @@ -{ - "schemes": [], - "swagger": "2.0", - "info": { - "description": "This is a sample TigerGraph Savanna controller server api.", - "title": "TigerGraph Savanna Controller API", - "contact": {}, - "version": "2.0" - }, - "host": "api.tgcloud.io", - "basePath": "/controller/v4/v2", - "paths": { - "/cloud-providers/all": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List all cloud provider", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "List all cloud provider for admin", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/CloudProviderResource" - } - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/add-ons/{installedAddonsID}/configs": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Create a new configuration for a specific installed add-on.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Create Add-on Configuration", - "parameters": [ - { - "type": "string", - "description": "Installed Add-on ID", - "name": "installedAddonsID", - "in": "path", - "required": true - }, - { - "description": "Create Configuration Request", - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/CreateConfigRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "400": { - "description": "Bad creation input.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "500": { - "description": "Failed to create configuration.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update an existing configuration for an add-on.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Update Add-on Configuration", - "parameters": [ - { - "type": "string", - "description": "Installed Add-on ID", - "name": "installedAddonsID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Configuration ID", - "name": "configID", - "in": "path", - "required": true - }, - { - "description": "Update Configuration Request", - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpdateConfigRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "400": { - "description": "Bad update input.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "500": { - "description": "Failed to update configuration.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete a specific configuration for an add-on.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Delete Add-on Configuration", - "parameters": [ - { - "type": "string", - "description": "Installed Add-on ID", - "name": "installedAddonsID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Configuration ID", - "name": "configID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "boolean" - } - } - } - ] - } - }, - "400": { - "description": "Bad delete input.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "500": { - "description": "Failed to delete configuration.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/addons/meta": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get metadata for add-ons.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Get add-ons meta", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/addons/request": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Request an add-on by providing the addon name and a message.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Request an add-on", - "parameters": [ - { - "description": "Request body", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/RequestAddonRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully request addon.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "400": { - "description": "Invalid request body.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Failed to request addon.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/addons/{addonsID}/install": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Installs an add-on by ID.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Installs an add-on", - "parameters": [ - { - "type": "string", - "description": "Add-on ID", - "name": "addonsID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Enable or disable add-on", - "name": "enable", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/addons/{addonsID}/workspaces": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Retrieves a list of workspaces associated with a specific addons ID.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "List Workspaces by add-ons ID", - "parameters": [ - { - "type": "string", - "description": "Addons ID", - "name": "addonsID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/Workspace" - } - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/billing/credit": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Fetches the total credits available for the specified organization.", - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Retrieve organization credits", - "parameters": [ - { - "type": "string", - "description": "Bearer token", - "name": "Authorization", - "in": "header", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "number" - } - } - } - ] - } - }, - "500": { - "description": "Failed to retrieve credits", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/billing/credit-cards": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Retrieves the Amberlfo customer information based on the organization ID.", - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Get Customer Information", - "responses": { - "200": { - "description": "Successfully retrieved customer.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/CustomerResponse" - } - } - } - ] - } - }, - "500": { - "description": "Unable to retrieve customer.", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/billing/credit-cards/{cardID}": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Updates the default credit card for a customer based on the provided card ID.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Update Customer Default Card", - "parameters": [ - { - "type": "string", - "description": "Card ID", - "name": "cardID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully updated customer's default card.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "400": { - "description": "CardID is not provided.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Unable to update customer's default card.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Deletes a customer's credit card by card ID.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Delete a customer's credit card", - "parameters": [ - { - "type": "string", - "description": "Card ID", - "name": "cardID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully deleted customer's card.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "400": { - "description": "CardID is not provided.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Unable to delete customer's card.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/billing/payment/invoice": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Send invoice for payment", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Pay invoice", - "parameters": [ - { - "type": "integer", - "description": "Year of the invoice", - "name": "year", - "in": "query", - "required": true - }, - { - "type": "integer", - "description": "Month of the invoice", - "name": "month", - "in": "query", - "required": true - }, - { - "type": "integer", - "description": "Day of the invoice", - "name": "day", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Product Plan ID used when the invoice was generated", - "name": "productPlanId", - "in": "query", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully paid invoice.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "boolean" - } - } - } - ] - } - }, - "500": { - "description": "Failed to pay invoice.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/billing/resource-pricing": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Retrieve the pricing information for resources", - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Get resource pricing", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/ResourcePricing" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/billing/session": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Creates a new session for the billing manager using the provided organization ID.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Create a new session", - "responses": { - "200": { - "description": "Successfully retrieved session.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Failed to retrieve session.", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/billing/status": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Retrieves the marketplace status of each platform and currently active payment method for an organization.", - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Retrieve organization's marketplace status and currently active payment method", - "parameters": [ - { - "type": "string", - "description": "Bearer token", - "name": "Authorization", - "in": "header", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "number" - } - } - } - ] - } - }, - "500": { - "description": "Failed to retrieve billing status", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/billing/validation": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Validates if the payment can be processed for the organization", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Billing" - ], - "summary": "Validate payment", - "responses": { - "200": { - "description": "Successful payment validation check", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "boolean" - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/cloud-providers": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List all cloud provider belonging to the org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "List all cloud provider belonging to the org", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/CloudProviderResource" - } - } - } - } - ] - } - } - } - }, - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Create a new cloud provider", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "Create a new cloud provider", - "parameters": [ - { - "description": "Create Cloud Provider Resource Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/CreateCloudProviderResourceRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/CloudProviderResource" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/cloud-providers/public": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List of public cloud providers", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "List of public cloud providers", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/PublicCloudProviderResource" - } - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/cloud-providers/validate": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Validate the cloud provider request", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "Validate the cloud provider request", - "parameters": [ - { - "description": "Validate Cloud Provider Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ValidateCloudProviderRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully validated Cloud Provider", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/cloud-providers/{cloudProviderID}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get a cloud provider by ID", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "Get a cloud provider by ID", - "parameters": [ - { - "type": "string", - "description": "Cloud Provider ID", - "name": "cloudProviderID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/CloudProviderResource" - } - } - } - ] - } - } - } - }, - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update a cloud provider", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "Update a cloud provider", - "parameters": [ - { - "type": "string", - "description": "Cloud Provider ID", - "name": "cloudProviderID", - "in": "path", - "required": true - }, - { - "description": "Update Cloud Provider Resource Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpdateCloudProviderResourceRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/CloudProviderResource" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete a cloud provider", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "Delete a cloud provider", - "parameters": [ - { - "type": "string", - "description": "Cloud Provider ID", - "name": "cloudProviderID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Upgrade a cloud provider", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "CloudProvider" - ], - "summary": "Upgrade a cloud provider", - "parameters": [ - { - "type": "string", - "description": "Cloud Provider ID", - "name": "cloudProviderID", - "in": "path", - "required": true - }, - { - "description": "Upgrade Cloud Provider Resource Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpgradeCloudProviderResourceRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/installed-addons": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List all installed add-ons for the organization.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "List all installed add-ons", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/installed-addons/{installedAddonsID}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get details of an installed add-on by its ID.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "Get installed add-on by ID", - "parameters": [ - { - "type": "string", - "description": "Installed Add-on ID", - "name": "installedAddonsID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List configurations for a specific installed add-on.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Add-ons" - ], - "summary": "List Add-on Configurations", - "parameters": [ - { - "type": "string", - "description": "Installed Add-on ID", - "name": "installedAddonsID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Configuration Name", - "name": "configName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "400": { - "description": "Failed to parse addons_id.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - }, - "500": { - "description": "Failed to get internal addons configurations.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/org": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update organization details such as name, display name, and logo URL", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Org" - ], - "summary": "Update organization details", - "parameters": [ - { - "description": "Organization request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/OrgRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully updated the org.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/org/api-keys": { - "get": { - "description": "List all external organization API keys.", - "produces": [ - "application/json" - ], - "tags": [ - "APIKey" - ], - "summary": "List External Org API Keys", - "responses": { - "200": { - "description": "Successfully listed the external org API keys.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/APIKey" - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "post": { - "description": "Create a new external organization API key with an optional lifetime.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "APIKey" - ], - "summary": "Create External Org API Key", - "parameters": [ - { - "description": "Create API Key Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/CreateAPIKeyRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully created the external org API key.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/APIKey" - } - } - } - ] - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "delete": { - "description": "Delete an external organization API key by its name.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "APIKey" - ], - "summary": "Delete External Org API Key", - "parameters": [ - { - "description": "Delete API Key Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/DeleteAPIKeyRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully deleted the external org API key.", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/org/quota": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get the quota details for a specific organization by its ID", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Org" - ], - "summary": "Retrieve organization quota", - "responses": { - "200": { - "description": "Successfully get org quota", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/OrgQuota" - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/org/self": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List of orgs that the user has access to", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Org" - ], - "summary": "List of orgs that the user has access to", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Organization" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/pooled-workgroups/acquire": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Acquire pooled workgroup in your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "Acquire pooled workgroup in your org", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workgroup" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get workgroups for your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "Get workgroups for your org", - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/Workgroup" - } - } - } - } - ] - } - } - } - }, - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Create workgroups in your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "Create workgroups in your org", - "parameters": [ - { - "description": "Create workgroup request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/CreateWorkgroupRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workgroup" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get workgroup detail in your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "Get workgroup detail in your org", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workgroup" - } - } - } - ] - } - } - } - }, - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update workgroups in your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "Update workgroups in your org", - "parameters": [ - { - "description": "Update workgroup request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpdateWorkgroupRequest" - } - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workgroup" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get workgroup detail in your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "delete workgroup detail in your org", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/allow_list": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List all allowed IPs in the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "List Allowed IPs", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/AllowedIP" - } - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - }, - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Add a new allowed IP to the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "Add Allowed IP", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "description": "Allowed IP request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AllowedIP" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/AllowedIP" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/allow_list/current": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get the current IP and check if it is allowed in the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "Get Current IP", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "object", - "properties": { - " IsAllowed": { - "type": "boolean" - }, - "CurrentIP": { - "type": "string" - } - } - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/allow_list/disable": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Disable the allow list for the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "Disable Allow List", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/allow_list/enable": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Enable the allow list for the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "Enable Allow List", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update an existing allowed IP in the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "Update Allowed IP", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Allowed IP ID", - "name": "id", - "in": "path", - "required": true - }, - { - "description": "Allowed IP request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/AllowedIP" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/AllowedIP" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete an existing allowed IP from the workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "AllowedIP" - ], - "summary": "Delete Allowed IP", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Allowed IP ID", - "name": "id", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get database in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Database" - ], - "summary": "Get database in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Database ID", - "name": "databaseID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/TGDatabase" - } - } - } - ] - } - } - } - }, - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update database in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Database" - ], - "summary": "Update database in workgroup", - "parameters": [ - { - "description": "Update database request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpdateTGDatabaseRequest" - } - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Database ID", - "name": "databaseID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/TGDatabase" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete database in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Database" - ], - "summary": "Delete database in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Database ID", - "name": "databaseID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Create workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Create workspace in workgroup", - "parameters": [ - { - "description": "Create workspace request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/CreateWorkspaceRequest" - } - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workspace" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Get workspace in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workspace" - } - } - } - ] - } - } - } - }, - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Update workspace in workgroup", - "parameters": [ - { - "description": "Update workspace request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpdateWorkspaceRequest" - } - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/Workspace" - } - } - } - ] - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Delete workspace in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List all backups for a workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Backup" - ], - "summary": "List backups", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully listed the backups.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/Backup" - } - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete a backup for a workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Backup" - ], - "summary": "Delete a backup", - "parameters": [ - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "description": "Delete Backup Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/DeleteBackupRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully deleted the backup.", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Restore a backup for a workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Backup" - ], - "summary": "Restore a backup", - "parameters": [ - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "description": "Restore Backup Request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/RestoreBackupRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully restored the backup.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get the backup schedule for a workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Backup" - ], - "summary": "Get backup schedule", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully got the backup schedule.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/BackupSchedule" - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Set a backup schedule for a workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Backup" - ], - "summary": "Set backup schedule", - "parameters": [ - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "description": "Backup Schedule", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/BackupSchedule" - } - } - ], - "responses": { - "200": { - "description": "Successfully set the backup schedule.", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get the status of a backup restore job", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Backup" - ], - "summary": "Get backup restore status", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Job ID", - "name": "job", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully got the backup restore status.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/BackupRestoreStatus" - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List all in-database GSQL users in the specified workspace and workgroup.", - "produces": [ - "application/json" - ], - "tags": [ - "DatabaseUser" - ], - "summary": "List in-database GSQL users", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Successfully listed the in-database GSQL users.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/IAMUser" - } - } - } - } - ] - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update the password of an in-database GSQL user in the specified workspace and workgroup.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DatabaseUser" - ], - "summary": "Update in-database GSQL user password", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "description": "In-database user request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/InDatabaseUserRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully updated the in-database GSQL password.", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Create a new in-database GSQL user in the specified workspace and workgroup.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DatabaseUser" - ], - "summary": "Create in-database GSQL user", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "description": "In-database user request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/InDatabaseUserRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully created the in-database GSQL user.", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/IAMUser" - } - } - } - ] - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete an in-database GSQL user in the specified workspace and workgroup.", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "DatabaseUser" - ], - "summary": "Delete in-database GSQL user", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "description": "In-database user request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/InDatabaseUserRequest" - } - } - ], - "responses": { - "200": { - "description": "Successfully deleted the in-database GSQL user.", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "400": { - "description": "Bad request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal server error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Handle MCP chat requests and return streaming responses via Server-Sent Events", - "consumes": [ - "application/json" - ], - "produces": [ - "text/event-stream" - ], - "tags": [ - "MCP" - ], - "summary": "MCP Chat for onboarding", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Thread ID", - "name": "ThreadID", - "in": "header", - "required": true - }, - { - "description": "MCP chat request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/ServerMCPChatRequest" - } - } - ], - "responses": { - "200": { - "description": "Server-Sent Events stream", - "schema": { - "type": "string" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Pause workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Pause workspace in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Refresh workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Refresh workspace in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Resume workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Resume workspace in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Retrieve the schedule for a given workspace", - "produces": [ - "application/json" - ], - "tags": [ - "WorkspaceSchedule" - ], - "summary": "Retrieve workspace schedule", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceSchedule" - } - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Create a new workspace schedule for a given workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "WorkspaceSchedule" - ], - "summary": "Create a new workspace schedule", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "description": "Workspace Schedule", - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/WorkspaceSchedule" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/WorkspaceSchedule" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}": { - "put": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Update an existing workspace schedule for a given workspace", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "WorkspaceSchedule" - ], - "summary": "Update an existing workspace schedule", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Schedule ID", - "name": "scheduleID", - "in": "path", - "required": true - }, - { - "description": "Workspace Schedule", - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/WorkspaceSchedule" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/Response" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - }, - "delete": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Delete an existing workspace schedule for a given workspace", - "produces": [ - "application/json" - ], - "tags": [ - "WorkspaceSchedule" - ], - "summary": "Delete an existing workspace schedule", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Schedule ID", - "name": "scheduleID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "type": "string" - } - } - } - ] - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade": { - "post": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Upgrade workspace in workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "Upgrade workspace in workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - }, - { - "description": "Upgrade workspace request", - "name": "request", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/UpgradeWorkspaceRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/controller/v4/v2/workspaces/meta": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get regions/tgVersions/workspaceTypes supported for your org", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Org" - ], - "summary": "Get an metadata for your org", - "parameters": [ - { - "type": "boolean", - "description": "When true, tgVersions only include versions with allow_upgrade; when false or omitted (default), all create-allowed versions for the org are returned", - "name": "upgrade", - "in": "query" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/WorkspaceMetadata" - } - } - } - ] - } - } - } - } - }, - "/controller/v4/v2/workspaces/upgrade-next-window": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "List workspaces upgrading in next window", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workspace" - ], - "summary": "List workspaces upgrading in next window", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Response" - } - } - } - } - }, - "/metrics/{workgroupID}/{workspaceID}": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Returns the latest tigergraph_* samples for the given workspace as Prometheus text exposition format", - "produces": [ - "text/plain" - ], - "tags": [ - "Workspace" - ], - "summary": "Scrape workspace metrics in Prometheus exposition format", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Workspace ID", - "name": "workspaceID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "Prometheus exposition format", - "schema": { - "type": "string" - } - } - } - } - }, - "/observability/{workgroupID}/metrics": { - "get": { - "security": [ - { - "ApiKeyAuth": [] - } - ], - "description": "Get workspace metrics in a given workgroup", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Workgroup" - ], - "summary": "Get workspace metrics in a given workgroup", - "parameters": [ - { - "type": "string", - "description": "Workgroup ID", - "name": "workgroupID", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "allOf": [ - { - "$ref": "#/definitions/Response" - }, - { - "type": "object", - "properties": { - "Result": { - "$ref": "#/definitions/observability.WorkgroupMetric" - } - } - } - ] - } - } - } - } - }, - "/users": { - "get": { - "description": "List of users in the org. Note: this endpoint is not APIKEY compatible", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Org" - ], - "summary": "List of users in the org", - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/OrgListUserResponse" - } - } - } - } - }, - "/users/{userId}/roles": { - "put": { - "description": "Updates the role of an org user. Note: this endpoint is not APIKEY compatible", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "tags": [ - "Org" - ], - "summary": "Update the role of an org user", - "parameters": [ - { - "type": "string", - "description": "Id of the user", - "name": "userId", - "in": "path", - "required": true - }, - { - "description": "Roles of the user", - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/PutOrgUsersRoles" - } - } - ], - "responses": { - "204": { - "description": "No Content" - } - } - } - } - }, - "definitions": { - "APIKey": { - "type": "object", - "properties": { - "created_at": { - "type": "string" - }, - "creator": { - "type": "string" - }, - "description": { - "type": "string" - }, - "expires_at": { - "type": "string" - }, - "key_name": { - "type": "string" - }, - "org_id": { - "type": "string" - }, - "plaintext_key": { - "type": "string" - }, - "redacted_key": { - "type": "string" - }, - "user_id": { - "type": "string" - } - } - }, - "AddOnPricing": { - "type": "object", - "properties": { - "platform": { - "type": "string" - }, - "price_per_hour": { - "type": "number" - }, - "region": { - "type": "string" - }, - "type": { - "type": "string" - }, - "workspace_type": { - "type": "string" - } - } - }, - "AgentConfig": { - "type": "object", - "properties": { - "catalog_activity_update_interval_seconds": { - "type": "integer" - }, - "enable_topology_force_update": { - "type": "boolean" - }, - "heartbeat_interval_seconds": { - "type": "integer" - }, - "query_activity_update_interval_seconds": { - "type": "integer" - }, - "topology_update_interval_seconds": { - "type": "integer" - } - } - }, - "AllowedIP": { - "type": "object", - "required": [ - "cidr" - ], - "properties": { - "cidr": { - "type": "string" - }, - "id": { - "type": "string" - }, - "note": { - "type": "string" - } - } - }, - "Backup": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "is_automatic": { - "type": "boolean" - }, - "size_bytes": { - "type": "string" - }, - "status": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "time": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "BackupRestoreStatus": { - "type": "object", - "properties": { - "created_at": { - "type": "string" - }, - "name": { - "type": "string" - }, - "output": { - "type": "string" - }, - "status": { - "type": "string" - } - } - }, - "BackupSchedule": { - "type": "object", - "required": [ - "schedule" - ], - "properties": { - "max_backup_files": { - "type": "integer" - }, - "max_reserved_days": { - "type": "integer" - }, - "max_retry": { - "type": "integer" - }, - "pause": { - "type": "boolean" - }, - "schedule": { - "type": "string" - } - } - }, - "CloudProviderOptions": { - "type": "object", - "properties": { - "account_id": { - "type": "string" - }, - "secure_connection": { - "type": "boolean" - } - } - }, - "CloudProviderResource": { - "type": "object", - "properties": { - "api_tokens": { - "type": "array", - "items": { - "type": "string" - } - }, - "availability_zones": { - "type": "array", - "items": { - "type": "string" - } - }, - "cluster_enabled_log_types": { - "type": "array", - "items": { - "$ref": "#/definitions/constants.ClusterLogType" - } - }, - "component_versions": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "created_by": { - "type": "string" - }, - "eks_id": { - "type": "string" - }, - "endpoint_service_name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "last_error": { - "type": "string" - }, - "name": { - "type": "string" - }, - "node_group_config": { - "$ref": "#/definitions/aws.NodeGroupConfig" - }, - "options": { - "$ref": "#/definitions/CloudProviderOptions" - }, - "org_id": { - "type": "string" - }, - "platform": { - "type": "string" - }, - "region": { - "type": "string" - }, - "role_arn": { - "type": "string" - }, - "role_external_id": { - "type": "string" - }, - "security_group_id": { - "type": "string" - }, - "short_id": { - "type": "string" - }, - "status": { - "type": "string" - }, - "subnet_id": { - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "type": "string" - }, - "updated_at": { - "type": "string" - }, - "version": { - "type": "string" - }, - "version_number": { - "type": "integer" - }, - "vpc_id": { - "type": "string" - }, - "vpc_owned_by_tg": { - "type": "boolean" - }, - "work_dir": { - "type": "string" - } - } - }, - "CreateAPIKeyRequest": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "life_time_in_seconds": { - "type": "integer" - } - } - }, - "CreateCloudProviderResourceRequest": { - "type": "object", - "properties": { - "created_by": { - "type": "string" - }, - "name": { - "type": "string" - }, - "options": { - "$ref": "#/definitions/CloudProviderOptions" - }, - "platform": { - "type": "string" - }, - "region": { - "type": "string" - }, - "role_arn": { - "type": "string" - }, - "role_external_id": { - "type": "string" - }, - "type": { - "description": "Type is used by two sets of API and will be set to 'private' when called by the Admin API\nand 'public' when called by the public cloud provider creation API.", - "type": "string" - } - } - }, - "CreateConfigRequest": { - "type": "object", - "required": [ - "config_name", - "config_value" - ], - "properties": { - "config_name": { - "type": "string" - }, - "config_value": { - "type": "string" - } - } - }, - "CreateWorkgroupRequest": { - "type": "object", - "required": [ - "cloud_provider_id" - ], - "properties": { - "cloud_provider_id": { - "type": "string" - }, - "enable_application_log": { - "type": "boolean" - }, - "enable_encryption": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "platform": { - "$ref": "#/definitions/Platform" - }, - "region": { - "type": "string" - }, - "shared_storage": { - "type": "boolean" - } - } - }, - "CreateWorkspaceRequest": { - "description": "Create Workspace Request", - "type": "object", - "properties": { - "addons": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceAddonsRequest" - } - }, - "auto_stop_minutes": { - "type": "integer" - }, - "enable_auto_start": { - "type": "boolean" - }, - "enable_ha": { - "type": "boolean" - }, - "is_rw": { - "type": "boolean" - }, - "maintenance_window_day_of_week": { - "type": "integer" - }, - "maintenance_window_hour_of_day": { - "type": "integer" - }, - "maintenance_window_interval_weeks": { - "type": "integer" - }, - "maintenance_window_time_zone": { - "type": "string" - }, - "name": { - "type": "string" - }, - "solution_install_request": { - "$ref": "#/definitions/SolutionInstallRequest" - }, - "tg_database_id": { - "type": "string" - }, - "tg_version": { - "type": "string" - }, - "update_strategy": { - "type": "string" - }, - "workspace_type_name": { - "description": "Workspace Type Name TG-0/TG-2", - "type": "string" - }, - "x_test_env": { - "type": "string" - } - } - }, - "CustomerCreditCard": { - "type": "object", - "properties": { - "brand": { - "type": "string" - }, - "card_id": { - "type": "string" - }, - "expire_month": { - "type": "integer" - }, - "expire_year": { - "type": "integer" - }, - "last_4_digits": { - "type": "string" - }, - "name_on_card": { - "type": "string" - }, - "org_id": { - "type": "string" - } - } - }, - "CustomerResponse": { - "type": "object", - "properties": { - "address": { - "$ref": "#/definitions/UpdateAddressRequest" - }, - "customer_email": { - "type": "string" - }, - "customer_id": { - "type": "string" - }, - "customer_name": { - "type": "string" - } - } - }, - "DataStoragePricing": { - "type": "object", - "properties": { - "platform": { - "type": "string" - }, - "price_per_month": { - "type": "number" - }, - "region": { - "type": "string" - } - } - }, - "DeleteAPIKeyRequest": { - "type": "object", - "properties": { - "key_name": { - "type": "string" - } - } - }, - "DeleteBackupRequest": { - "type": "object", - "required": [ - "backup_id" - ], - "properties": { - "backup_id": { - "type": "string" - } - } - }, - "Error": { - "type": "object", - "properties": { - "FieldName": { - "type": "string" - }, - "Reason": { - "type": "string" - }, - "Type": { - "$ref": "#/definitions/ErrorType" - } - } - }, - "ErrorType": { - "type": "string", - "enum": [ - "Internal-Error", - "Bad-Request", - "Not-Found", - "Forbidden", - "Unauthorized", - "API-Disabled", - "Quota-Exceed", - "Unknown" - ], - "x-enum-varnames": [ - "ErrInternal", - "ErrBadRequest", - "ErrNotFound", - "ErrForbidden", - "ErrUnauthorized", - "ErrAPIDisabled", - "ErrQuotaExceed", - "ErrUnknown" - ] - }, - "FeatureFlag": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean" - }, - "feature_name": { - "type": "string" - } - } - }, - "FolderStatistics": { - "type": "object", - "properties": { - "backup_size": { - "type": "integer" - }, - "billed_size": { - "type": "integer" - }, - "log_size": { - "type": "integer" - }, - "milvus_size": { - "type": "integer" - }, - "total_size": { - "type": "integer" - }, - "workspaces": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceSize" - } - } - } - }, - "GetCustomerCreditCardsResponse": { - "type": "object", - "properties": { - "credit_cards": { - "type": "array", - "items": { - "$ref": "#/definitions/CustomerCreditCard" - } - }, - "default_card": { - "type": "string" - } - } - }, - "IAMUser": { - "type": "object", - "properties": { - "auth0UserID": { - "type": "string" - }, - "created": { - "type": "string" - }, - "description": { - "type": "string" - }, - "email": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "firstName": { - "type": "string" - }, - "id": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/tgIAM.Metadata" - }, - "path": { - "type": "string" - }, - "role": { - "type": "string" - }, - "tenantID": { - "type": "string" - }, - "trn": { - "type": "string" - }, - "updated": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "InDatabaseUserRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "OrgListUserResponse": { - "type": "object", - "properties": { - "auth0UserID": { - "type": "string" - }, - "authID": { - "type": "string" - }, - "created": { - "type": "string" - }, - "email": { - "type": "string" - }, - "enabled": { - "type": "boolean" - }, - "firstName": { - "type": "string" - }, - "id": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "metadata": { - "$ref": "#/definitions/OrgMetadata" - }, - "path": { - "type": "string" - }, - "roles": { - "type": "array", - "items": { - "$ref": "#/definitions/OrgRole" - } - }, - "tenantID": { - "type": "string" - }, - "trn": { - "type": "string" - }, - "updated": { - "type": "string" - }, - "username": { - "type": "string" - } - } - }, - "OrgMetadata": { - "type": "object", - "properties": { - "attachedTo": { - "type": "array", - "items": { - "type": "string" - } - }, - "lastLogin": { - "type": "string" - } - } - }, - "OrgQuota": { - "type": "object", - "properties": { - "max_workspace_memory": { - "type": "string" - }, - "max_workspace_type": { - "type": "string" - }, - "memory_limit": { - "type": "string" - }, - "memory_usage_in_bytes": { - "type": "integer" - }, - "org_id": { - "type": "string" - }, - "ro_workspace_count_limit": { - "type": "integer" - }, - "ro_workspace_count_usage": { - "type": "integer" - }, - "rw_workspace_count_limit": { - "type": "integer" - }, - "rw_workspace_count_usage": { - "type": "integer" - }, - "tier": { - "type": "string" - }, - "workspace_auto_backup_count_limit": { - "type": "integer" - }, - "workspace_auto_backup_retention_in_days": { - "type": "integer" - }, - "workspace_manual_backup_count_limit": { - "type": "integer" - } - } - }, - "OrgRequest": { - "type": "object", - "properties": { - "logoUrl": { - "type": "string" - }, - "orgDisplayName": { - "type": "string" - }, - "orgID": { - "type": "string" - }, - "orgName": { - "type": "string" - } - } - }, - "OrgRole": { - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "tenantID": { - "type": "string" - }, - "trn": { - "type": "string" - } - } - }, - "Organization": { - "type": "object", - "properties": { - "create_time": { - "type": "string" - }, - "creator": { - "type": "string" - }, - "delinquent_since": { - "type": "string" - }, - "feature_flag": { - "type": "array", - "items": { - "$ref": "#/definitions/FeatureFlag" - } - }, - "logo_url": { - "type": "string" - }, - "org_display_name": { - "type": "string" - }, - "org_id": { - "type": "string" - }, - "org_name": { - "type": "string" - } - } - }, - "Platform": { - "type": "string", - "enum": [ - "aws", - "azure", - "gcp" - ], - "x-enum-varnames": [ - "PlatformAWS", - "PlatformAzure", - "PlatformGCP" - ] - }, - "PublicCloudProviderResource": { - "type": "object", - "properties": { - "component_versions": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "org_id": { - "type": "string" - }, - "platform": { - "type": "string" - }, - "region": { - "type": "string" - }, - "status": { - "type": "string" - }, - "version": { - "type": "string" - }, - "version_number": { - "type": "integer" - } - } - }, - "PutOrgUsersRoles": { - "type": "object", - "properties": { - "roles": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "Region": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "RequestAddonRequest": { - "type": "object", - "properties": { - "addon_name": { - "type": "string" - }, - "message": { - "type": "string" - } - } - }, - "ResourcePricing": { - "type": "object", - "properties": { - "addon_pricing": { - "type": "array", - "items": { - "$ref": "#/definitions/AddOnPricing" - } - }, - "data_storage_pricing": { - "type": "array", - "items": { - "$ref": "#/definitions/DataStoragePricing" - } - }, - "workspace_pricing": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspacePricing" - } - } - } - }, - "Response": { - "type": "object", - "properties": { - "Error": { - "type": "boolean" - }, - "ErrorDetails": { - "type": "array", - "items": { - "$ref": "#/definitions/Error" - } - }, - "Message": { - "type": "string" - }, - "RequestID": { - "type": "string" - }, - "Result": { - "type": "object" - } - } - }, - "RestoreBackupRequest": { - "type": "object", - "required": [ - "backup_id" - ], - "properties": { - "backup_id": { - "type": "string" - } - } - }, - "ServerMCPChatRequest": { - "type": "object", - "properties": { - "authorization": { - "type": "string" - }, - "debug": { - "type": "boolean" - }, - "message": {}, - "thread_id": { - "type": "string" - }, - "type": { - "type": "string" - }, - "workspace_id": { - "type": "string" - } - } - }, - "SolutionInstallRequest": { - "type": "object", - "properties": { - "addons": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceAddonsRequest" - } - }, - "data_source_origin": { - "type": "string" - }, - "name": { - "type": "string" - }, - "solution_catalog_id": { - "type": "string" - } - } - }, - "TGDatabase": { - "type": "object", - "properties": { - "create_time": { - "type": "string" - }, - "database_id": { - "type": "string" - }, - "folder_statistics": { - "$ref": "#/definitions/FolderStatistics" - }, - "name": { - "type": "string" - }, - "org_id": { - "type": "string" - }, - "org_name": { - "type": "string" - }, - "region": { - "type": "string" - }, - "tg_version": { - "type": "string" - }, - "workgroup_id": { - "type": "string" - }, - "workspaces": { - "type": "array", - "items": { - "$ref": "#/definitions/Workspace" - } - } - } - }, - "TGVersion": { - "type": "object", - "properties": { - "allow_create": { - "type": "boolean" - }, - "allow_upgrade": { - "type": "boolean" - }, - "channel": { - "type": "string" - }, - "end_of_life": { - "type": "string" - }, - "image": { - "type": "string" - }, - "incompatible_upgrades_from": { - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "orgs": { - "description": "For customized versions", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "UpdateAddressRequest": { - "type": "object", - "properties": { - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "line1": { - "type": "string" - }, - "postalCode": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "UpdateCloudProviderResourceRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "UpdateConfigRequest": { - "type": "object", - "required": [ - "config_value" - ], - "properties": { - "config_value": { - "type": "string" - } - } - }, - "UpdateTGDatabaseRequest": { - "type": "object", - "required": [ - "tg_database_name" - ], - "properties": { - "tg_database_name": { - "type": "string" - } - } - }, - "UpdateWorkgroupRequest": { - "type": "object", - "properties": { - "enable_application_log": { - "type": "boolean" - }, - "encryption_method": { - "$ref": "#/definitions/data.EncryptionMethod" - }, - "workgroup_name": { - "type": "string" - } - } - }, - "UpdateWorkspaceRequest": { - "type": "object", - "properties": { - "addons": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceAddonsRequest" - } - }, - "agent_config": { - "$ref": "#/definitions/AgentConfig" - }, - "auto_stop_minutes": { - "type": "integer", - "minimum": 0 - }, - "auto_upgrade_state": { - "type": "string" - }, - "desired_tg_version": { - "type": "string" - }, - "enable_auto_start": { - "type": "boolean" - }, - "enable_ha": { - "type": "boolean" - }, - "maintenance_window_day_of_week": { - "type": "integer" - }, - "maintenance_window_hour_of_day": { - "type": "integer" - }, - "maintenance_window_interval_weeks": { - "type": "integer" - }, - "maintenance_window_time_zone": { - "type": "string" - }, - "pause": { - "type": "boolean" - }, - "update_strategy": { - "type": "string" - }, - "workspace_name": { - "type": "string" - }, - "workspace_type_name": { - "type": "string" - } - } - }, - "UpgradeCloudProviderComponent": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "UpgradeCloudProviderResourceRequest": { - "type": "object", - "properties": { - "cluster_enabled_log_types": { - "type": "array", - "items": { - "$ref": "#/definitions/constants.ClusterLogType" - } - }, - "components": { - "type": "array", - "items": { - "$ref": "#/definitions/UpgradeCloudProviderComponent" - } - }, - "node_group_config": { - "$ref": "#/definitions/aws.NodeGroupConfig" - } - } - }, - "UpgradeWorkspaceRequest": { - "description": "Upgrade Workspace Request", - "type": "object", - "properties": { - "desired_version": { - "type": "string" - }, - "scheduled": { - "type": "boolean" - } - } - }, - "ValidateCloudProviderRequest": { - "type": "object", - "required": [ - "platform", - "region", - "role_arn" - ], - "properties": { - "account_id": { - "type": "string" - }, - "platform": { - "type": "string" - }, - "region": { - "type": "string" - }, - "role_arn": { - "type": "string" - }, - "role_external_id": { - "type": "string" - }, - "secure_connection": { - "type": "boolean" - } - } - }, - "Workgroup": { - "type": "object", - "properties": { - "cloud_provider_id": { - "type": "string" - }, - "cloud_provider_name": { - "type": "string" - }, - "cloud_provider_status": { - "type": "string" - }, - "cloud_provider_type": { - "type": "string" - }, - "creator": { - "type": "string" - }, - "enable_allow_list": { - "type": "boolean" - }, - "enable_application_log": { - "type": "boolean" - }, - "encryption_method": { - "$ref": "#/definitions/data.EncryptionMethod" - }, - "is_current_ip_allowed": { - "type": "boolean" - }, - "name": { - "type": "string" - }, - "org_id": { - "type": "string" - }, - "org_name": { - "type": "string" - }, - "platform": { - "$ref": "#/definitions/Platform" - }, - "region": { - "type": "string" - }, - "shared_storage": { - "type": "boolean" - }, - "tg_databases": { - "type": "array", - "items": { - "$ref": "#/definitions/TGDatabase" - } - }, - "workgroup_id": { - "type": "string" - }, - "workspaces": { - "type": "array", - "items": { - "$ref": "#/definitions/Workspace" - } - } - } - }, - "Workspace": { - "type": "object", - "properties": { - "addons": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceAddonsRequest" - } - }, - "agent_config": { - "$ref": "#/definitions/AgentConfig" - }, - "auto_stop_minutes": { - "type": "integer" - }, - "auto_upgrade_state": { - "type": "string" - }, - "cloud_provider_id": { - "type": "string" - }, - "cloud_provider_name": { - "type": "string" - }, - "cloud_provider_short_id": { - "type": "string" - }, - "condition_type": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "creator": { - "type": "string" - }, - "database_id": { - "type": "string" - }, - "database_name": { - "type": "string" - }, - "deleted_at": { - "type": "string" - }, - "desired_tg_version": { - "type": "string" - }, - "display_status": { - "type": "string" - }, - "edge_count": { - "type": "integer" - }, - "enable_auto_start": { - "type": "boolean" - }, - "enable_copilot": { - "type": "boolean" - }, - "enable_ha": { - "type": "boolean" - }, - "err_message": { - "type": "string" - }, - "folder_statistics": { - "$ref": "#/definitions/FolderStatistics" - }, - "graph_topology_size_bytes": { - "type": "integer" - }, - "is_rw": { - "type": "boolean" - }, - "last_maintenance": { - "type": "string" - }, - "last_modified_time": { - "type": "string" - }, - "maintenance_window_day_of_week": { - "type": "integer" - }, - "maintenance_window_hour_of_day": { - "type": "integer" - }, - "maintenance_window_interval_weeks": { - "type": "integer" - }, - "maintenance_window_time_zone": { - "type": "string" - }, - "name": { - "type": "string" - }, - "nginx_host": { - "type": "string" - }, - "org_id": { - "type": "string" - }, - "org_name": { - "type": "string" - }, - "refresh_message": { - "type": "string" - }, - "refresh_status": { - "type": "string" - }, - "region": { - "type": "string" - }, - "replicas": { - "type": "integer" - }, - "snapshot_time": { - "type": "string" - }, - "solution_catalog_id": { - "type": "string" - }, - "status": { - "type": "string" - }, - "tg_version": { - "type": "string" - }, - "update_strategy": { - "type": "string" - }, - "version_number": { - "type": "integer" - }, - "vertex_count": { - "type": "integer" - }, - "workgroup_id": { - "type": "string" - }, - "workgroup_name": { - "type": "string" - }, - "workspace_id": { - "type": "string" - }, - "workspace_type": { - "$ref": "#/definitions/WorkspaceType" - } - } - }, - "WorkspaceAddonsRequest": { - "type": "object", - "required": [ - "addons_id", - "enable" - ], - "properties": { - "addons_id": { - "type": "string" - }, - "enable": { - "type": "boolean" - }, - "enable_configuration": { - "type": "object", - "additionalProperties": true - }, - "is_free": { - "type": "boolean" - }, - "unique_name": { - "type": "string" - }, - "workspace_id": { - "type": "string" - } - } - }, - "WorkspaceMetadata": { - "type": "object", - "properties": { - "regions": { - "type": "array", - "items": { - "$ref": "#/definitions/Region" - } - }, - "tgVersions": { - "type": "array", - "items": { - "$ref": "#/definitions/TGVersion" - } - }, - "workspaceTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/WorkspaceType" - } - } - } - }, - "WorkspacePricing": { - "type": "object", - "properties": { - "cloud_provider": { - "type": "string" - }, - "ha": { - "type": "string" - }, - "platform": { - "type": "string" - }, - "price_per_hour": { - "type": "number" - }, - "region": { - "type": "string" - }, - "workspace_type": { - "type": "string" - } - } - }, - "WorkspaceSchedule": { - "type": "object", - "required": [ - "repeat", - "time", - "timezone", - "workspace_id" - ], - "properties": { - "date": { - "type": "string" - }, - "id": { - "type": "string" - }, - "repeat": { - "type": "string" - }, - "repeat_on": { - "type": "string" - }, - "time": { - "type": "string" - }, - "timezone": { - "type": "string" - }, - "workspace_id": { - "type": "string" - }, - "workspace_type_name": { - "type": "string" - } - } - }, - "WorkspaceSize": { - "type": "object", - "properties": { - "size": { - "type": "integer" - }, - "workspace_id": { - "type": "string" - } - } - }, - "WorkspaceType": { - "type": "object", - "properties": { - "cpu": { - "type": "string" - }, - "ha": { - "type": "integer" - }, - "memory": { - "type": "string" - }, - "partition": { - "type": "integer" - }, - "typeName": { - "type": "string" - } - } - }, - "aws.NodeGroup": { - "type": "object", - "properties": { - "max_size": { - "type": "integer" - }, - "min_size": { - "type": "integer" - }, - "overprovisioning_factor": { - "type": "integer" - } - } - }, - "aws.NodeGroupConfig": { - "type": "object", - "properties": { - "ng_16": { - "$ref": "#/definitions/aws.NodeGroup" - }, - "ng_32": { - "$ref": "#/definitions/aws.NodeGroup" - }, - "ng_48": { - "$ref": "#/definitions/aws.NodeGroup" - }, - "ng_64": { - "$ref": "#/definitions/aws.NodeGroup" - }, - "ng_system": { - "$ref": "#/definitions/aws.NodeGroup" - }, - "prefetch_image_list": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "constants.ClusterLogType": { - "type": "string", - "enum": [ - "api", - "audit", - "authenticator", - "controllerManager", - "scheduler" - ], - "x-enum-varnames": [ - "ClusterLogTypeAPIServer", - "ClusterLogTypeAudit", - "ClusterLogTypeAuthenticator", - "ClusterLogTypeControllerManager", - "ClusterLogTypeScheduler" - ] - }, - "data.EncryptionMethod": { - "type": "string", - "enum": [ - "TMK" - ], - "x-enum-varnames": [ - "TigerGraphManagedKey" - ] - }, - "observability.MetricValue": { - "description": "Workspace metric value", - "type": "object", - "properties": { - "avgValue": { - "description": "Avg value", - "type": "number" - } - } - }, - "observability.WorkgroupMetric": { - "description": "Metrics for workspaces in a workgroup", - "type": "object", - "properties": { - "workgroupID": { - "description": "Workgroup ID", - "type": "string" - }, - "workspaceMetrics": { - "description": "Workspace metrics", - "type": "array", - "items": { - "$ref": "#/definitions/observability.WorkspaceMetric" - } - } - } - }, - "observability.WorkspaceMetric": { - "description": "Workspace metric", - "type": "object", - "properties": { - "metrics": { - "description": "Workspace metric map, key is metric name,\nvalue is the certain value for the metric name in the key", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/observability.MetricValue" - } - }, - "workspaceID": { - "description": "Workspace ID", - "type": "string" - } - } - }, - "tgIAM.Metadata": { - "type": "object", - "additionalProperties": true - } - }, - "securityDefinitions": { - "ApiKeyAuth": { - "description": "Authorization for TigerGraph Savanna", - "type": "apiKey", - "name": "x-api-key", - "in": "header" - } - } -} From fcb2e375fd394547cf4d38cd4b1f0cce5863c568 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 22:49:43 +0530 Subject: [PATCH 08/22] docs(savanna): regenerate REST API reference for allowlisted endpoints Remove billing, add-on, cloud provider, and other internal-only pages and refresh nav and definitions to match the curated control-plane catalog. --- modules/savanna/modules/rest-api/nav.adoc | 45 - .../modules/rest-api/pages/definitions.adoc | 1000 ----------------- .../endpoints/acquire-a-pooled-workgroup.adoc | 25 - .../chat-with-mcp-for-onboarding.adoc | 52 - .../endpoints/create-a-billing-session.adoc | 26 - .../endpoints/create-a-cloud-provider.adoc | 37 - .../create-an-add-on-configuration.adoc | 44 - .../create-an-organization-api-key.adoc | 39 - .../endpoints/delete-a-cloud-provider.adoc | 37 - .../pages/endpoints/delete-a-credit-card.adoc | 39 - .../delete-an-add-on-configuration.adoc | 44 - .../delete-an-organization-api-key.adoc | 39 - .../pages/endpoints/get-a-cloud-provider.adoc | 37 - .../pages/endpoints/get-add-on-metadata.adoc | 27 - .../endpoints/get-an-installed-add-on.adoc | 39 - .../pages/endpoints/get-billing-status.adoc | 34 - .../endpoints/get-customer-information.adoc | 22 - .../endpoints/get-organization-credits.adoc | 34 - .../endpoints/get-organization-quota.adoc | 26 - .../pages/endpoints/get-resource-pricing.adoc | 22 - .../endpoints/get-workgroup-metrics.adoc | 37 - .../endpoints/get-workspace-metrics.adoc | 38 - .../pages/endpoints/install-an-add-on.adoc | 44 - .../list-accessible-organizations.adoc | 26 - .../endpoints/list-add-on-configurations.adoc | 44 - .../endpoints/list-all-cloud-providers.adoc | 25 - .../pages/endpoints/list-cloud-providers.adoc | 25 - .../endpoints/list-installed-add-ons.adoc | 26 - .../endpoints/list-organization-api-keys.adoc | 22 - .../list-public-cloud-providers.adoc | 25 - .../list-upcoming-workspace-upgrades.adoc | 25 - .../list-workspaces-for-an-add-on.adoc | 39 - .../pages/endpoints/pay-an-invoice.adoc | 53 - .../pages/endpoints/request-an-add-on.adoc | 39 - .../endpoints/update-a-cloud-provider.adoc | 42 - .../update-an-add-on-configuration.adoc | 49 - .../update-organization-details.adoc | 39 - .../endpoints/update-the-default-card.adoc | 39 - .../endpoints/upgrade-a-cloud-provider.adoc | 42 - .../pages/endpoints/upgrade-a-workspace.adoc | 47 - .../endpoints/validate-a-cloud-provider.adoc | 37 - .../pages/endpoints/validate-payment.adoc | 26 - 42 files changed, 2457 deletions(-) delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc delete mode 100644 modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc diff --git a/modules/savanna/modules/rest-api/nav.adoc b/modules/savanna/modules/rest-api/nav.adoc index 7a7c4c61..4cfdf0d2 100644 --- a/modules/savanna/modules/rest-api/nav.adoc +++ b/modules/savanna/modules/rest-api/nav.adoc @@ -4,24 +4,12 @@ ** xref:rest-api:create-api-key.adoc[Create an API key] ** xref:rest-api:data-plane-apis.adoc[Data-plane APIs] ** xref:rest-api:index-previous.adoc[Overview (previous)] -** Cloud providers -*** xref:rest-api:endpoints/create-a-cloud-provider.adoc[POST Create a cloud provider] -*** xref:rest-api:endpoints/list-cloud-providers.adoc[GET List cloud providers] -*** xref:rest-api:endpoints/list-public-cloud-providers.adoc[GET List public cloud providers] -*** xref:rest-api:endpoints/list-all-cloud-providers.adoc[GET List all cloud providers] -*** xref:rest-api:endpoints/get-a-cloud-provider.adoc[GET Get a cloud provider] -*** xref:rest-api:endpoints/update-a-cloud-provider.adoc[PUT Update a cloud provider] -*** xref:rest-api:endpoints/delete-a-cloud-provider.adoc[DELETE Delete a cloud provider] -*** xref:rest-api:endpoints/validate-a-cloud-provider.adoc[POST Validate a cloud provider] -*** xref:rest-api:endpoints/upgrade-a-cloud-provider.adoc[PUT Upgrade a cloud provider] ** Workgroups *** xref:rest-api:endpoints/create-a-workgroup.adoc[POST Create a workgroup] *** xref:rest-api:endpoints/list-workgroups.adoc[GET List workgroups] *** xref:rest-api:endpoints/get-a-workgroup.adoc[GET Get a workgroup] *** xref:rest-api:endpoints/update-a-workgroup.adoc[PUT Update a workgroup] *** xref:rest-api:endpoints/delete-a-workgroup.adoc[DELETE Delete a workgroup] -*** xref:rest-api:endpoints/acquire-a-pooled-workgroup.adoc[GET Acquire a pooled workgroup] -*** xref:rest-api:endpoints/get-workgroup-metrics.adoc[GET Get workgroup metrics] ** Workspaces *** xref:rest-api:endpoints/create-a-workspace.adoc[POST Create a workspace] *** xref:rest-api:endpoints/get-a-workspace.adoc[GET Get a workspace] @@ -30,9 +18,6 @@ *** xref:rest-api:endpoints/resume-a-workspace.adoc[POST Resume a workspace] *** xref:rest-api:endpoints/pause-a-workspace.adoc[POST Pause a workspace] *** xref:rest-api:endpoints/refresh-a-workspace.adoc[POST Refresh a workspace] -*** xref:rest-api:endpoints/upgrade-a-workspace.adoc[POST Upgrade a workspace] -*** xref:rest-api:endpoints/list-upcoming-workspace-upgrades.adoc[GET List upcoming workspace upgrades] -*** xref:rest-api:endpoints/get-workspace-metrics.adoc[GET Get workspace metrics] ** Workspace schedules *** xref:rest-api:endpoints/create-a-workspace-schedule.adoc[POST Create a workspace schedule] *** xref:rest-api:endpoints/get-workspace-schedules.adoc[GET Get workspace schedules] @@ -62,38 +47,8 @@ *** xref:rest-api:endpoints/list-in-database-users.adoc[GET List in-database users] *** xref:rest-api:endpoints/update-a-user-password.adoc[PUT Update a user password] *** xref:rest-api:endpoints/delete-an-in-database-user.adoc[DELETE Delete an in-database user] -** Add-ons -*** xref:rest-api:endpoints/request-an-add-on.adoc[POST Request an add-on] -*** xref:rest-api:endpoints/install-an-add-on.adoc[POST Install an add-on] -*** xref:rest-api:endpoints/list-installed-add-ons.adoc[GET List installed add-ons] -*** xref:rest-api:endpoints/get-an-installed-add-on.adoc[GET Get an installed add-on] -*** xref:rest-api:endpoints/list-workspaces-for-an-add-on.adoc[GET List workspaces for an add-on] -*** xref:rest-api:endpoints/create-an-add-on-configuration.adoc[POST Create an add-on configuration] -*** xref:rest-api:endpoints/list-add-on-configurations.adoc[GET List add-on configurations] -*** xref:rest-api:endpoints/update-an-add-on-configuration.adoc[PUT Update an add-on configuration] -*** xref:rest-api:endpoints/delete-an-add-on-configuration.adoc[DELETE Delete an add-on configuration] -*** xref:rest-api:endpoints/get-add-on-metadata.adoc[GET Get add-on metadata] -** Billing -*** xref:rest-api:endpoints/get-organization-credits.adoc[GET Get organization credits] -*** xref:rest-api:endpoints/get-customer-information.adoc[GET Get customer information] -*** xref:rest-api:endpoints/update-the-default-card.adoc[POST Update the default card] -*** xref:rest-api:endpoints/delete-a-credit-card.adoc[DELETE Delete a credit card] -*** xref:rest-api:endpoints/pay-an-invoice.adoc[POST Pay an invoice] -*** xref:rest-api:endpoints/get-resource-pricing.adoc[GET Get resource pricing] -*** xref:rest-api:endpoints/create-a-billing-session.adoc[POST Create a billing session] -*** xref:rest-api:endpoints/get-billing-status.adoc[GET Get billing status] -*** xref:rest-api:endpoints/validate-payment.adoc[GET Validate payment] -** API keys -*** xref:rest-api:endpoints/create-an-organization-api-key.adoc[POST Create an organization API key] -*** xref:rest-api:endpoints/list-organization-api-keys.adoc[GET List organization API keys] -*** xref:rest-api:endpoints/delete-an-organization-api-key.adoc[DELETE Delete an organization API key] ** Organization *** xref:rest-api:endpoints/get-org-metadata.adoc[GET Get org metadata] *** xref:rest-api:endpoints/list-org-users.adoc[GET List org users] *** xref:rest-api:endpoints/update-a-users-role.adoc[PUT Update a user's role] -*** xref:rest-api:endpoints/update-organization-details.adoc[PUT Update organization details] -*** xref:rest-api:endpoints/get-organization-quota.adoc[GET Get organization quota] -*** xref:rest-api:endpoints/list-accessible-organizations.adoc[GET List accessible organizations] -** MCP -*** xref:rest-api:endpoints/chat-with-mcp-for-onboarding.adoc[POST Chat with MCP for onboarding] ** xref:rest-api:definitions.adoc[Definitions] diff --git a/modules/savanna/modules/rest-api/pages/definitions.adoc b/modules/savanna/modules/rest-api/pages/definitions.adoc index a320e880..c4b8eabc 100644 --- a/modules/savanna/modules/rest-api/pages/definitions.adoc +++ b/modules/savanna/modules/rest-api/pages/definitions.adoc @@ -928,1003 +928,3 @@ __optional__|string |**orgName** + __optional__|string |=== - - - - -[[_apikey]] -=== APIKey - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**created_at** + -__optional__ -|string -|**creator** + -__optional__ -|string -|**description** + -__optional__ -|string -|**expires_at** + -__optional__ -|string -|**key_name** + -__optional__ -|string -|**org_id** + -__optional__ -|string -|**plaintext_key** + -__optional__ -|string -|**redacted_key** + -__optional__ -|string -|**user_id** + -__optional__ -|string -|=== - -[[_addonpricing]] -=== AddOnPricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**platform** + -__optional__ -|string -|**price_per_hour** + -__optional__ -|number -|**region** + -__optional__ -|string -|**type** + -__optional__ -|string -|**workspace_type** + -__optional__ -|string -|=== - -[[_cloudprovideroptions]] -=== CloudProviderOptions - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**account_id** + -__optional__ -|string -|**secure_connection** + -__optional__ -|boolean -|=== - -[[_cloudproviderresource]] -=== CloudProviderResource - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**api_tokens** + -__optional__ -|< string > array -|**availability_zones** + -__optional__ -|< string > array -|**cluster_enabled_log_types** + -__optional__ -|< xref:rest-api:definitions.adoc#_constants_clusterlogtype[constants.ClusterLogType] > array -|**component_versions** + -__optional__ -|string -|**created_at** + -__optional__ -|string -|**created_by** + -__optional__ -|string -|**eks_id** + -__optional__ -|string -|**endpoint_service_name** + -__optional__ -|string -|**id** + -__optional__ -|string -|**last_error** + -__optional__ -|string -|**name** + -__optional__ -|string -|**node_group_config** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroupconfig[aws.NodeGroupConfig] -|**options** + -__optional__ -|xref:rest-api:definitions.adoc#_cloudprovideroptions[CloudProviderOptions] -|**org_id** + -__optional__ -|string -|**platform** + -__optional__ -|string -|**region** + -__optional__ -|string -|**role_arn** + -__optional__ -|string -|**role_external_id** + -__optional__ -|string -|**security_group_id** + -__optional__ -|string -|**short_id** + -__optional__ -|string -|**status** + -__optional__ -|string -|**subnet_id** + -__optional__ -|< string > array -|**type** + -__optional__ -|string -|**updated_at** + -__optional__ -|string -|**version** + -__optional__ -|string -|**version_number** + -__optional__ -|integer -|**vpc_id** + -__optional__ -|string -|**vpc_owned_by_tg** + -__optional__ -|boolean -|**work_dir** + -__optional__ -|string -|=== - -[[_createapikeyrequest]] -=== CreateAPIKeyRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**description** + -__optional__ -|string -|**life_time_in_seconds** + -__optional__ -|integer -|=== - -[[_createcloudproviderresourcerequest]] -=== CreateCloudProviderResourceRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**created_by** + -__optional__ -|string -|**name** + -__optional__ -|string -|**options** + -__optional__ -|xref:rest-api:definitions.adoc#_cloudprovideroptions[CloudProviderOptions] -|**platform** + -__optional__ -|string -|**region** + -__optional__ -|string -|**role_arn** + -__optional__ -|string -|**role_external_id** + -__optional__ -|string -|**type** + -__optional__ -|string -|=== - -[[_createconfigrequest]] -=== CreateConfigRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**config_name** + -__required__ -|string -|**config_value** + -__required__ -|string -|=== - -[[_customercreditcard]] -=== CustomerCreditCard - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**brand** + -__optional__ -|string -|**card_id** + -__optional__ -|string -|**expire_month** + -__optional__ -|integer -|**expire_year** + -__optional__ -|integer -|**last_4_digits** + -__optional__ -|string -|**name_on_card** + -__optional__ -|string -|**org_id** + -__optional__ -|string -|=== - -[[_customerresponse]] -=== CustomerResponse - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**address** + -__optional__ -|xref:rest-api:definitions.adoc#_updateaddressrequest[UpdateAddressRequest] -|**customer_email** + -__optional__ -|string -|**customer_id** + -__optional__ -|string -|**customer_name** + -__optional__ -|string -|=== - -[[_datastoragepricing]] -=== DataStoragePricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**platform** + -__optional__ -|string -|**price_per_month** + -__optional__ -|number -|**region** + -__optional__ -|string -|=== - -[[_deleteapikeyrequest]] -=== DeleteAPIKeyRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**key_name** + -__optional__ -|string -|=== - -[[_error]] -=== Error - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**FieldName** + -__optional__ -|string -|**Reason** + -__optional__ -|string -|**Type** + -__optional__ -|xref:rest-api:definitions.adoc#_errortype[ErrorType] -|=== - -[[_errortype]] -=== ErrorType - -Type: string - -[[_featureflag]] -=== FeatureFlag - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**enabled** + -__optional__ -|boolean -|**feature_name** + -__optional__ -|string -|=== - -[[_getcustomercreditcardsresponse]] -=== GetCustomerCreditCardsResponse - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**credit_cards** + -__optional__ -|< xref:rest-api:definitions.adoc#_customercreditcard[CustomerCreditCard] > array -|**default_card** + -__optional__ -|string -|=== - -[[_iamuser]] -=== IAMUser - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**auth0UserID** + -__optional__ -|string -|**created** + -__optional__ -|string -|**description** + -__optional__ -|string -|**email** + -__optional__ -|string -|**enabled** + -__optional__ -|boolean -|**firstName** + -__optional__ -|string -|**id** + -__optional__ -|string -|**lastName** + -__optional__ -|string -|**metadata** + -__optional__ -|xref:rest-api:definitions.adoc#_tgiam_metadata[tgIAM.Metadata] -|**path** + -__optional__ -|string -|**role** + -__optional__ -|string -|**tenantID** + -__optional__ -|string -|**trn** + -__optional__ -|string -|**updated** + -__optional__ -|string -|**username** + -__optional__ -|string -|=== - -[[_orglistuserresponse]] -=== OrgListUserResponse - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**auth0UserID** + -__optional__ -|string -|**authID** + -__optional__ -|string -|**created** + -__optional__ -|string -|**email** + -__optional__ -|string -|**enabled** + -__optional__ -|boolean -|**firstName** + -__optional__ -|string -|**id** + -__optional__ -|string -|**lastName** + -__optional__ -|string -|**metadata** + -__optional__ -|xref:rest-api:definitions.adoc#_orgmetadata[OrgMetadata] -|**path** + -__optional__ -|string -|**roles** + -__optional__ -|< xref:rest-api:definitions.adoc#_orgrole[OrgRole] > array -|**tenantID** + -__optional__ -|string -|**trn** + -__optional__ -|string -|**updated** + -__optional__ -|string -|**username** + -__optional__ -|string -|=== - -[[_orgmetadata]] -=== OrgMetadata - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**attachedTo** + -__optional__ -|< string > array -|**lastLogin** + -__optional__ -|string -|=== - -[[_orgquota]] -=== OrgQuota - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**max_workspace_memory** + -__optional__ -|string -|**max_workspace_type** + -__optional__ -|string -|**memory_limit** + -__optional__ -|string -|**memory_usage_in_bytes** + -__optional__ -|integer -|**org_id** + -__optional__ -|string -|**ro_workspace_count_limit** + -__optional__ -|integer -|**ro_workspace_count_usage** + -__optional__ -|integer -|**rw_workspace_count_limit** + -__optional__ -|integer -|**rw_workspace_count_usage** + -__optional__ -|integer -|**tier** + -__optional__ -|string -|**workspace_auto_backup_count_limit** + -__optional__ -|integer -|**workspace_auto_backup_retention_in_days** + -__optional__ -|integer -|**workspace_manual_backup_count_limit** + -__optional__ -|integer -|=== - -[[_orgrequest]] -=== OrgRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**logoUrl** + -__optional__ -|string -|**orgDisplayName** + -__optional__ -|string -|**orgID** + -__optional__ -|string -|**orgName** + -__optional__ -|string -|=== - -[[_orgrole]] -=== OrgRole - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**displayName** + -__optional__ -|string -|**id** + -__optional__ -|string -|**name** + -__optional__ -|string -|**path** + -__optional__ -|string -|**tenantID** + -__optional__ -|string -|**trn** + -__optional__ -|string -|=== - -[[_organization]] -=== Organization - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**create_time** + -__optional__ -|string -|**creator** + -__optional__ -|string -|**delinquent_since** + -__optional__ -|string -|**feature_flag** + -__optional__ -|< xref:rest-api:definitions.adoc#_featureflag[FeatureFlag] > array -|**logo_url** + -__optional__ -|string -|**org_display_name** + -__optional__ -|string -|**org_id** + -__optional__ -|string -|**org_name** + -__optional__ -|string -|=== - -[[_platform]] -=== Platform - -Type: string - -[[_publiccloudproviderresource]] -=== PublicCloudProviderResource - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**component_versions** + -__optional__ -|string -|**id** + -__optional__ -|string -|**name** + -__optional__ -|string -|**org_id** + -__optional__ -|string -|**platform** + -__optional__ -|string -|**region** + -__optional__ -|string -|**status** + -__optional__ -|string -|**version** + -__optional__ -|string -|**version_number** + -__optional__ -|integer -|=== - -[[_putorgusersroles]] -=== PutOrgUsersRoles - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**roles** + -__optional__ -|< string > array -|=== - -[[_requestaddonrequest]] -=== RequestAddonRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**addon_name** + -__optional__ -|string -|**message** + -__optional__ -|string -|=== - -[[_resourcepricing]] -=== ResourcePricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**addon_pricing** + -__optional__ -|< xref:rest-api:definitions.adoc#_addonpricing[AddOnPricing] > array -|**data_storage_pricing** + -__optional__ -|< xref:rest-api:definitions.adoc#_datastoragepricing[DataStoragePricing] > array -|**workspace_pricing** + -__optional__ -|< xref:rest-api:definitions.adoc#_workspacepricing[WorkspacePricing] > array -|=== - -[[_response]] -=== Response - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**Error** + -__optional__ -|boolean -|**ErrorDetails** + -__optional__ -|< xref:rest-api:definitions.adoc#_error[Error] > array -|**Message** + -__optional__ -|string -|**RequestID** + -__optional__ -|string -|**Result** + -__optional__ -|object -|=== - -[[_servermcpchatrequest]] -=== ServerMCPChatRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**authorization** + -__optional__ -|string -|**debug** + -__optional__ -|boolean -|**message** + -__optional__ -|object -|**thread_id** + -__optional__ -|string -|**type** + -__optional__ -|string -|**workspace_id** + -__optional__ -|string -|=== - -[[_updateaddressrequest]] -=== UpdateAddressRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**city** + -__optional__ -|string -|**country** + -__optional__ -|string -|**line1** + -__optional__ -|string -|**postalCode** + -__optional__ -|string -|**state** + -__optional__ -|string -|=== - -[[_updatecloudproviderresourcerequest]] -=== UpdateCloudProviderResourceRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**name** + -__optional__ -|string -|**version** + -__optional__ -|string -|=== - -[[_updateconfigrequest]] -=== UpdateConfigRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**config_value** + -__required__ -|string -|=== - -[[_upgradecloudprovidercomponent]] -=== UpgradeCloudProviderComponent - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**name** + -__optional__ -|string -|**version** + -__optional__ -|string -|=== - -[[_upgradecloudproviderresourcerequest]] -=== UpgradeCloudProviderResourceRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**cluster_enabled_log_types** + -__optional__ -|< xref:rest-api:definitions.adoc#_constants_clusterlogtype[constants.ClusterLogType] > array -|**components** + -__optional__ -|< xref:rest-api:definitions.adoc#_upgradecloudprovidercomponent[UpgradeCloudProviderComponent] > array -|**node_group_config** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroupconfig[aws.NodeGroupConfig] -|=== - -[[_upgradeworkspacerequest]] -=== UpgradeWorkspaceRequest - -Upgrade Workspace Request - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**desired_version** + -__optional__ -|string -|**scheduled** + -__optional__ -|boolean -|=== - -[[_validatecloudproviderrequest]] -=== ValidateCloudProviderRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**account_id** + -__optional__ -|string -|**platform** + -__required__ -|string -|**region** + -__required__ -|string -|**role_arn** + -__required__ -|string -|**role_external_id** + -__optional__ -|string -|**secure_connection** + -__optional__ -|boolean -|=== - -[[_workspacemetadata]] -=== WorkspaceMetadata - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**regions** + -__optional__ -|< xref:rest-api:definitions.adoc#_region[Region] > array -|**tgVersions** + -__optional__ -|< xref:rest-api:definitions.adoc#_tgversion[TGVersion] > array -|**workspaceTypes** + -__optional__ -|< xref:rest-api:definitions.adoc#_workspacetype[WorkspaceType] > array -|=== - -[[_workspacepricing]] -=== WorkspacePricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**cloud_provider** + -__optional__ -|string -|**ha** + -__optional__ -|string -|**platform** + -__optional__ -|string -|**price_per_hour** + -__optional__ -|number -|**region** + -__optional__ -|string -|**workspace_type** + -__optional__ -|string -|=== - -[[_aws_nodegroup]] -=== aws.NodeGroup - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**max_size** + -__optional__ -|integer -|**min_size** + -__optional__ -|integer -|**overprovisioning_factor** + -__optional__ -|integer -|=== - -[[_aws_nodegroupconfig]] -=== aws.NodeGroupConfig - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**ng_16** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] -|**ng_32** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] -|**ng_48** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] -|**ng_64** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] -|**ng_system** + -__optional__ -|xref:rest-api:definitions.adoc#_aws_nodegroup[aws.NodeGroup] -|**prefetch_image_list** + -__optional__ -|< string > array -|=== - -[[_constants_clusterlogtype]] -=== constants.ClusterLogType - -Type: string - -[[_data_encryptionmethod]] -=== data.EncryptionMethod - -Type: string - -[[_observability_metricvalue]] -=== observability.MetricValue - -Workspace metric value - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**avgValue** + -__optional__ -|number -|=== - -[[_observability_workgroupmetric]] -=== observability.WorkgroupMetric - -Metrics for workspaces in a workgroup - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**workgroupID** + -__optional__ -|string -|**workspaceMetrics** + -__optional__ -|< xref:rest-api:definitions.adoc#_observability_workspacemetric[observability.WorkspaceMetric] > array -|=== - -[[_observability_workspacemetric]] -=== observability.WorkspaceMetric - -Workspace metric - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**metrics** + -__optional__ -|object -|**workspaceID** + -__optional__ -|string -|=== - -[[_tgiam_metadata]] -=== tgIAM.Metadata - -Type: object diff --git a/modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc deleted file mode 100644 index 8712c2b4..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/acquire-a-pooled-workgroup.adoc +++ /dev/null @@ -1,25 +0,0 @@ -= Acquire a pooled workgroup -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/pooled-workgroups/acquire -.... - -Acquire pooled workgroup in your org - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc b/modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc deleted file mode 100644 index 4ac0e0ef..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/chat-with-mcp-for-onboarding.adoc +++ /dev/null @@ -1,52 +0,0 @@ -= Chat with MCP for onboarding -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat -.... - -Handle MCP chat requests and return streaming responses via Server-Sent Events - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**workgroupID** + -__required__ -|Workgroup ID -|string -|**Path** -|**workspaceID** + -__required__ -|Workspace ID -|string -|**Header** -|**ThreadID** + -__required__ -|Thread ID -|string -|**Body** -|**request** + -__required__ -|MCP chat request -|xref:rest-api:definitions.adoc#_servermcpchatrequest[ServerMCPChatRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Server-Sent Events stream|string -|=== - -== Consumes - -* `application/json` - -== Produces - -* `text/event-stream` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc deleted file mode 100644 index c8e7936d..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-billing-session.adoc +++ /dev/null @@ -1,26 +0,0 @@ -= Create a billing session -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/billing/session -.... - -Creates a new session for the billing manager using the provided organization ID. - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully retrieved session.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to retrieve session.|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc deleted file mode 100644 index d139cc68..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc +++ /dev/null @@ -1,37 +0,0 @@ -= Create a cloud provider -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/cloud-providers -.... - -Create a new cloud provider - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body** -|**request** + -__required__ -|Create Cloud Provider Resource Request -|xref:rest-api:definitions.adoc#_createcloudproviderresourcerequest[CreateCloudProviderResourceRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc deleted file mode 100644 index 2dffdc23..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc +++ /dev/null @@ -1,44 +0,0 @@ -= Create an add-on configuration -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/add-ons/{installedAddonsID}/configs -.... - -Create a new configuration for a specific installed add-on. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**installedAddonsID** + -__required__ -|Installed Add-on ID -|string -|**Body** -|**body** + -__required__ -|Create Configuration Request -|xref:rest-api:definitions.adoc#_createconfigrequest[CreateConfigRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad creation input.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to create configuration.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc deleted file mode 100644 index 6318ae67..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-an-organization-api-key.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Create an organization API key -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/org/api-keys -.... - -Create a new external organization API key with an optional lifetime. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body** -|**request** + -__required__ -|Create API Key Request -|xref:rest-api:definitions.adoc#_createapikeyrequest[CreateAPIKeyRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully created the external org API key.|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad request|xref:rest-api:definitions.adoc#_response[Response] -|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc deleted file mode 100644 index e6bcf08d..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc +++ /dev/null @@ -1,37 +0,0 @@ -= Delete a cloud provider -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -DELETE /controller/v4/v2/cloud-providers/{cloudProviderID} -.... - -Delete a cloud provider - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**cloudProviderID** + -__required__ -|Cloud Provider ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc deleted file mode 100644 index 8a9de997..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-credit-card.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Delete a credit card -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -DELETE /controller/v4/v2/billing/credit-cards/{cardID} -.... - -Deletes a customer's credit card by card ID. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**cardID** + -__required__ -|Card ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully deleted customer's card.|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|CardID is not provided.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Unable to delete customer's card.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc deleted file mode 100644 index 02013183..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc +++ /dev/null @@ -1,44 +0,0 @@ -= Delete an add-on configuration -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -DELETE /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID} -.... - -Delete a specific configuration for an add-on. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**installedAddonsID** + -__required__ -|Installed Add-on ID -|string -|**Path** -|**configID** + -__required__ -|Configuration ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad delete input.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to delete configuration.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc deleted file mode 100644 index 2fec586f..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-organization-api-key.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Delete an organization API key -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -DELETE /controller/v4/v2/org/api-keys -.... - -Delete an external organization API key by its name. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body** -|**request** + -__required__ -|Delete API Key Request -|xref:rest-api:definitions.adoc#_deleteapikeyrequest[DeleteAPIKeyRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully deleted the external org API key.|xref:rest-api:definitions.adoc#_response[Response] -|**400**|Bad request|xref:rest-api:definitions.adoc#_response[Response] -|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc deleted file mode 100644 index 1a68f9b9..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-a-cloud-provider.adoc +++ /dev/null @@ -1,37 +0,0 @@ -= Get a cloud provider -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/cloud-providers/{cloudProviderID} -.... - -Get a cloud provider by ID - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**cloudProviderID** + -__required__ -|Cloud Provider ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc deleted file mode 100644 index 32cebf2d..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-add-on-metadata.adoc +++ /dev/null @@ -1,27 +0,0 @@ -= Get add-on metadata -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/addons/meta -.... - -Get metadata for add-ons. - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc deleted file mode 100644 index 81b385f7..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-an-installed-add-on.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Get an installed add-on -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/installed-addons/{installedAddonsID} -.... - -Get details of an installed add-on by its ID. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**installedAddonsID** + -__required__ -|Installed Add-on ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc deleted file mode 100644 index 28bb5d87..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-billing-status.adoc +++ /dev/null @@ -1,34 +0,0 @@ -= Get billing status -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/billing/status -.... - -Retrieves the marketplace status of each platform and currently active payment method for an organization. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Header** -|**Authorization** + -__required__ -|Bearer token -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to retrieve billing status|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc deleted file mode 100644 index d6df1152..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-customer-information.adoc +++ /dev/null @@ -1,22 +0,0 @@ -= Get customer information -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/billing/credit-cards -.... - -Retrieves the Amberlfo customer information based on the organization ID. - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully retrieved customer.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Unable to retrieve customer.|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc deleted file mode 100644 index 6ab52547..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-organization-credits.adoc +++ /dev/null @@ -1,34 +0,0 @@ -= Get organization credits -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/billing/credit -.... - -Fetches the total credits available for the specified organization. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Header** -|**Authorization** + -__required__ -|Bearer token -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to retrieve credits|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc deleted file mode 100644 index 37420a81..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-organization-quota.adoc +++ /dev/null @@ -1,26 +0,0 @@ -= Get organization quota -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/org/quota -.... - -Get the quota details for a specific organization by its ID - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully get org quota|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc deleted file mode 100644 index 9a83dc21..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-resource-pricing.adoc +++ /dev/null @@ -1,22 +0,0 @@ -= Get resource pricing -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/billing/resource-pricing -.... - -Retrieve the pricing information for resources - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc deleted file mode 100644 index d6700c5d..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-metrics.adoc +++ /dev/null @@ -1,37 +0,0 @@ -= Get workgroup metrics -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /observability/{workgroupID}/metrics -.... - -Get workspace metrics in a given workgroup - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**workgroupID** + -__required__ -|Workgroup ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc deleted file mode 100644 index f57de007..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-metrics.adoc +++ /dev/null @@ -1,38 +0,0 @@ -= Get workspace metrics -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /metrics/{workgroupID}/{workspaceID} -.... - -Returns the latest tigergraph_* samples for the given workspace as Prometheus text exposition format - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**workgroupID** + -__required__ -|Workgroup ID -|string -|**Path** -|**workspaceID** + -__required__ -|Workspace ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Prometheus exposition format|string -|=== - -== Produces - -* `text/plain` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc deleted file mode 100644 index ea3ec9f0..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc +++ /dev/null @@ -1,44 +0,0 @@ -= Install an add-on -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/addons/{addonsID}/install -.... - -Installs an add-on by ID. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**addonsID** + -__required__ -|Add-on ID -|string -|**Query** -|**enable** + -__required__ -|Enable or disable add-on -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc deleted file mode 100644 index c73bcf8d..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-accessible-organizations.adoc +++ /dev/null @@ -1,26 +0,0 @@ -= List accessible organizations -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/org/self -.... - -List of orgs that the user has access to - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc deleted file mode 100644 index d5afb29b..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc +++ /dev/null @@ -1,44 +0,0 @@ -= List add-on configurations -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName} -.... - -List configurations for a specific installed add-on. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**installedAddonsID** + -__required__ -|Installed Add-on ID -|string -|**Path** -|**configName** + -__required__ -|Configuration Name -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Failed to parse addons_id.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to get internal addons configurations.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc deleted file mode 100644 index 477a8de7..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-all-cloud-providers.adoc +++ /dev/null @@ -1,25 +0,0 @@ -= List all cloud providers -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /cloud-providers/all -.... - -List all cloud provider - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc deleted file mode 100644 index 948ca1a9..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc +++ /dev/null @@ -1,25 +0,0 @@ -= List cloud providers -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/cloud-providers -.... - -List all cloud provider belonging to the org - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc deleted file mode 100644 index cff73de7..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc +++ /dev/null @@ -1,26 +0,0 @@ -= List installed add-ons -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/installed-addons -.... - -List all installed add-ons for the organization. - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc deleted file mode 100644 index c6ceb2d1..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-organization-api-keys.adoc +++ /dev/null @@ -1,22 +0,0 @@ -= List organization API keys -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/org/api-keys -.... - -List all external organization API keys. - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully listed the external org API keys.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc deleted file mode 100644 index 5a4d88af..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc +++ /dev/null @@ -1,25 +0,0 @@ -= List public cloud providers -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/cloud-providers/public -.... - -List of public cloud providers - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc deleted file mode 100644 index 6840c5e6..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-upcoming-workspace-upgrades.adoc +++ /dev/null @@ -1,25 +0,0 @@ -= List upcoming workspace upgrades -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/workspaces/upgrade-next-window -.... - -List workspaces upgrading in next window - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc deleted file mode 100644 index 27bbe87c..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-workspaces-for-an-add-on.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= List workspaces for an add-on -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/addons/{addonsID}/workspaces -.... - -Retrieves a list of workspaces associated with a specific addons ID. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**addonsID** + -__required__ -|Addons ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc b/modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc deleted file mode 100644 index e3efee49..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/pay-an-invoice.adoc +++ /dev/null @@ -1,53 +0,0 @@ -= Pay an invoice -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/billing/payment/invoice -.... - -Send invoice for payment - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Query** -|**year** + -__required__ -|Year of the invoice -|integer -|**Query** -|**month** + -__required__ -|Month of the invoice -|integer -|**Query** -|**day** + -__required__ -|Day of the invoice -|integer -|**Query** -|**productPlanId** + -__required__ -|Product Plan ID used when the invoice was generated -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully paid invoice.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to pay invoice.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc deleted file mode 100644 index 231a7374..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/request-an-add-on.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Request an add-on -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/addons/request -.... - -Request an add-on by providing the addon name and a message. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body** -|**request** + -__required__ -|Request body -|xref:rest-api:definitions.adoc#_requestaddonrequest[RequestAddonRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully request addon.|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Invalid request body.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to request addon.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc deleted file mode 100644 index 64999da6..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc +++ /dev/null @@ -1,42 +0,0 @@ -= Update a cloud provider -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -PUT /controller/v4/v2/cloud-providers/{cloudProviderID} -.... - -Update a cloud provider - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**cloudProviderID** + -__required__ -|Cloud Provider ID -|string -|**Body** -|**request** + -__required__ -|Update Cloud Provider Resource Request -|xref:rest-api:definitions.adoc#_updatecloudproviderresourcerequest[UpdateCloudProviderResourceRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc deleted file mode 100644 index 9e7c72bf..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc +++ /dev/null @@ -1,49 +0,0 @@ -= Update an add-on configuration -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -PUT /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID} -.... - -Update an existing configuration for an add-on. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**installedAddonsID** + -__required__ -|Installed Add-on ID -|string -|**Path** -|**configID** + -__required__ -|Configuration ID -|string -|**Body** -|**body** + -__required__ -|Update Configuration Request -|xref:rest-api:definitions.adoc#_updateconfigrequest[UpdateConfigRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad update input.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Failed to update configuration.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc deleted file mode 100644 index bba97fd2..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-organization-details.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Update organization details -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -PUT /controller/v4/v2/org -.... - -Update organization details such as name, display name, and logo URL - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body** -|**request** + -__required__ -|Organization request -|xref:rest-api:definitions.adoc#_orgrequest[OrgRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully updated the org.|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|Bad Request|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal Server Error|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc deleted file mode 100644 index d264f574..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-the-default-card.adoc +++ /dev/null @@ -1,39 +0,0 @@ -= Update the default card -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/billing/credit-cards/{cardID} -.... - -Updates the default credit card for a customer based on the provided card ID. - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**cardID** + -__required__ -|Card ID -|string -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully updated customer's default card.|xref:rest-api:definitions.adoc#_response[Response] + object -|**400**|CardID is not provided.|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Unable to update customer's default card.|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc deleted file mode 100644 index 874dc111..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc +++ /dev/null @@ -1,42 +0,0 @@ -= Upgrade a cloud provider -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -PUT /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade -.... - -Upgrade a cloud provider - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**cloudProviderID** + -__required__ -|Cloud Provider ID -|string -|**Body** -|**request** + -__required__ -|Upgrade Cloud Provider Resource Request -|xref:rest-api:definitions.adoc#_upgradecloudproviderresourcerequest[UpgradeCloudProviderResourceRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc deleted file mode 100644 index e699dff6..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-workspace.adoc +++ /dev/null @@ -1,47 +0,0 @@ -= Upgrade a workspace -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade -.... - -Upgrade workspace in workgroup - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path** -|**workgroupID** + -__required__ -|Workgroup ID -|string -|**Path** -|**workspaceID** + -__required__ -|Workspace ID -|string -|**Body** -|**request** + -__required__ -|Upgrade workspace request -|xref:rest-api:definitions.adoc#_upgradeworkspacerequest[UpgradeWorkspaceRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_response[Response] -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc deleted file mode 100644 index aefe3a53..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc +++ /dev/null @@ -1,37 +0,0 @@ -= Validate a cloud provider -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -POST /controller/v4/v2/cloud-providers/validate -.... - -Validate the cloud provider request - -== Parameters - -[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body** -|**request** + -__required__ -|Validate Cloud Provider Request -|xref:rest-api:definitions.adoc#_validatecloudproviderrequest[ValidateCloudProviderRequest] -|=== - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successfully validated Cloud Provider|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` diff --git a/modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc b/modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc deleted file mode 100644 index c2dd35c8..00000000 --- a/modules/savanna/modules/rest-api/pages/endpoints/validate-payment.adoc +++ /dev/null @@ -1,26 +0,0 @@ -= Validate payment -// Generated by lib/split-endpoints.js from _catalog/openapi.json. - -[.api-request] -.... -GET /controller/v4/v2/billing/validation -.... - -Validates if the payment can be processed for the organization - -== Responses - -[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|Successful payment validation check|xref:rest-api:definitions.adoc#_response[Response] + object -|**500**|Internal server error|xref:rest-api:definitions.adoc#_response[Response] + object -|=== - -== Consumes - -* `application/json` - -== Produces - -* `application/json` From 4d793ce464d2fc2cf6b7a4c553e781f3c1a5508e Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 23:46:26 +0530 Subject: [PATCH 09/22] build(savanna): clarify public endpoint display names Rename several allowlisted routes to more descriptive titles (for example workspace details and list workspace schedules) for nav and page slugs. --- lib/split-endpoints.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index 87df51a3..cb8bcbeb 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -49,43 +49,43 @@ function slugify (label) { const LABELS = { 'POST /controller/v4/v2/workgroups': 'Create a workgroup', 'GET /controller/v4/v2/workgroups': 'List workgroups', - 'GET /controller/v4/v2/workgroups/{workgroupID}': 'Get a workgroup', + 'GET /controller/v4/v2/workgroups/{workgroupID}': 'Get workgroup details', 'PUT /controller/v4/v2/workgroups/{workgroupID}': 'Update a workgroup', 'DELETE /controller/v4/v2/workgroups/{workgroupID}': 'Delete a workgroup', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces': 'Create a workspace', - 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Get a workspace', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Get workspace details', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Update a workspace', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Delete a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume': 'Resume a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause': 'Pause a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh': 'Refresh a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Create a workspace schedule', - 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'Get workspace schedules', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules': 'List workspace schedules', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}': 'Update a workspace schedule', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}': 'Delete a workspace schedule', - 'GET /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Get a database', + 'GET /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Get database details', 'PUT /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Update a database', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}': 'Delete a database', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'List backups', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore': 'Restore a backup', - 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status': 'Get restore status', + 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status': 'Get backup restore status', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups': 'Delete a backup', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule': 'Get backup schedule', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule': 'Set backup schedule', 'POST /controller/v4/v2/workgroups/{workgroupID}/allow_list': 'Add an allowed IP', 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list': 'List allowed IPs', - 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current': 'Get current IP', + 'GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current': 'Check the current IP', 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}': 'Update an allowed IP', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}': 'Delete an allowed IP', 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable': 'Enable the allow list', 'PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable': 'Disable the allow list', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Create an in-database user', 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'List in-database users', - 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Update a user password', + 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': "Update an in-database user's password", 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser': 'Delete an in-database user', - 'GET /controller/v4/v2/workspaces/meta': 'Get org metadata', + 'GET /controller/v4/v2/workspaces/meta': 'Get supported workspace options', 'GET /users': 'List org users', - 'PUT /users/{userId}/roles': "Update a user's role", + 'PUT /users/{userId}/roles': "Update an org user's role", } const PUBLIC_ENDPOINTS = new Set(Object.keys(LABELS)) From 9e0c592168ec02f51f2736295689dcfa9462879c Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Sun, 20 Sep 2026 23:46:29 +0530 Subject: [PATCH 10/22] docs(savanna): regenerate REST API pages after endpoint renames Refresh nav, overview xrefs, and per-endpoint pages to match the updated allowlist titles and slugs. --- modules/savanna/modules/rest-api/nav.adoc | 18 +++++++-------- .../rest-api/pages/data-plane-apis.adoc | 2 +- ...rent-ip.adoc => check-the-current-ip.adoc} | 2 +- ...us.adoc => get-backup-restore-status.adoc} | 2 +- ...atabase.adoc => get-database-details.adoc} | 2 +- ...c => get-supported-workspace-options.adoc} | 2 +- ...kgroup.adoc => get-workgroup-details.adoc} | 2 +- ...kspace.adoc => get-workspace-details.adoc} | 2 +- ...les.adoc => list-workspace-schedules.adoc} | 2 +- ...update-an-in-database-users-password.adoc} | 2 +- ...ole.adoc => update-an-org-users-role.adoc} | 2 +- .../rest-api/pages/index-previous.adoc | 22 +++++++++---------- .../savanna/modules/rest-api/pages/index.adoc | 20 ++++++++--------- 13 files changed, 40 insertions(+), 40 deletions(-) rename modules/savanna/modules/rest-api/pages/endpoints/{get-current-ip.adoc => check-the-current-ip.adoc} (98%) rename modules/savanna/modules/rest-api/pages/endpoints/{get-restore-status.adoc => get-backup-restore-status.adoc} (98%) rename modules/savanna/modules/rest-api/pages/endpoints/{get-a-database.adoc => get-database-details.adoc} (98%) rename modules/savanna/modules/rest-api/pages/endpoints/{get-org-metadata.adoc => get-supported-workspace-options.adoc} (96%) rename modules/savanna/modules/rest-api/pages/endpoints/{get-a-workgroup.adoc => get-workgroup-details.adoc} (97%) rename modules/savanna/modules/rest-api/pages/endpoints/{get-a-workspace.adoc => get-workspace-details.adoc} (98%) rename modules/savanna/modules/rest-api/pages/endpoints/{get-workspace-schedules.adoc => list-workspace-schedules.adoc} (98%) rename modules/savanna/modules/rest-api/pages/endpoints/{update-a-user-password.adoc => update-an-in-database-users-password.adoc} (96%) rename modules/savanna/modules/rest-api/pages/endpoints/{update-a-users-role.adoc => update-an-org-users-role.adoc} (96%) diff --git a/modules/savanna/modules/rest-api/nav.adoc b/modules/savanna/modules/rest-api/nav.adoc index 4cfdf0d2..1768445c 100644 --- a/modules/savanna/modules/rest-api/nav.adoc +++ b/modules/savanna/modules/rest-api/nav.adoc @@ -7,12 +7,12 @@ ** Workgroups *** xref:rest-api:endpoints/create-a-workgroup.adoc[POST Create a workgroup] *** xref:rest-api:endpoints/list-workgroups.adoc[GET List workgroups] -*** xref:rest-api:endpoints/get-a-workgroup.adoc[GET Get a workgroup] +*** xref:rest-api:endpoints/get-workgroup-details.adoc[GET Get workgroup details] *** xref:rest-api:endpoints/update-a-workgroup.adoc[PUT Update a workgroup] *** xref:rest-api:endpoints/delete-a-workgroup.adoc[DELETE Delete a workgroup] ** Workspaces *** xref:rest-api:endpoints/create-a-workspace.adoc[POST Create a workspace] -*** xref:rest-api:endpoints/get-a-workspace.adoc[GET Get a workspace] +*** xref:rest-api:endpoints/get-workspace-details.adoc[GET Get workspace details] *** xref:rest-api:endpoints/update-a-workspace.adoc[PUT Update a workspace] *** xref:rest-api:endpoints/delete-a-workspace.adoc[DELETE Delete a workspace] *** xref:rest-api:endpoints/resume-a-workspace.adoc[POST Resume a workspace] @@ -20,24 +20,24 @@ *** xref:rest-api:endpoints/refresh-a-workspace.adoc[POST Refresh a workspace] ** Workspace schedules *** xref:rest-api:endpoints/create-a-workspace-schedule.adoc[POST Create a workspace schedule] -*** xref:rest-api:endpoints/get-workspace-schedules.adoc[GET Get workspace schedules] +*** xref:rest-api:endpoints/list-workspace-schedules.adoc[GET List workspace schedules] *** xref:rest-api:endpoints/update-a-workspace-schedule.adoc[PUT Update a workspace schedule] *** xref:rest-api:endpoints/delete-a-workspace-schedule.adoc[DELETE Delete a workspace schedule] ** Databases -*** xref:rest-api:endpoints/get-a-database.adoc[GET Get a database] +*** xref:rest-api:endpoints/get-database-details.adoc[GET Get database details] *** xref:rest-api:endpoints/update-a-database.adoc[PUT Update a database] *** xref:rest-api:endpoints/delete-a-database.adoc[DELETE Delete a database] ** Backups *** xref:rest-api:endpoints/list-backups.adoc[GET List backups] *** xref:rest-api:endpoints/restore-a-backup.adoc[POST Restore a backup] -*** xref:rest-api:endpoints/get-restore-status.adoc[GET Get restore status] +*** xref:rest-api:endpoints/get-backup-restore-status.adoc[GET Get backup restore status] *** xref:rest-api:endpoints/delete-a-backup.adoc[DELETE Delete a backup] *** xref:rest-api:endpoints/get-backup-schedule.adoc[GET Get backup schedule] *** xref:rest-api:endpoints/set-backup-schedule.adoc[POST Set backup schedule] ** IP allow list *** xref:rest-api:endpoints/add-an-allowed-ip.adoc[POST Add an allowed IP] *** xref:rest-api:endpoints/list-allowed-ips.adoc[GET List allowed IPs] -*** xref:rest-api:endpoints/get-current-ip.adoc[GET Get current IP] +*** xref:rest-api:endpoints/check-the-current-ip.adoc[GET Check the current IP] *** xref:rest-api:endpoints/update-an-allowed-ip.adoc[PUT Update an allowed IP] *** xref:rest-api:endpoints/delete-an-allowed-ip.adoc[DELETE Delete an allowed IP] *** xref:rest-api:endpoints/enable-the-allow-list.adoc[PUT Enable the allow list] @@ -45,10 +45,10 @@ ** In-database users *** xref:rest-api:endpoints/create-an-in-database-user.adoc[POST Create an in-database user] *** xref:rest-api:endpoints/list-in-database-users.adoc[GET List in-database users] -*** xref:rest-api:endpoints/update-a-user-password.adoc[PUT Update a user password] +*** xref:rest-api:endpoints/update-an-in-database-users-password.adoc[PUT Update an in-database user's password] *** xref:rest-api:endpoints/delete-an-in-database-user.adoc[DELETE Delete an in-database user] ** Organization -*** xref:rest-api:endpoints/get-org-metadata.adoc[GET Get org metadata] +*** xref:rest-api:endpoints/get-supported-workspace-options.adoc[GET Get supported workspace options] *** xref:rest-api:endpoints/list-org-users.adoc[GET List org users] -*** xref:rest-api:endpoints/update-a-users-role.adoc[PUT Update a user's role] +*** xref:rest-api:endpoints/update-an-org-users-role.adoc[PUT Update an org user's role] ** xref:rest-api:definitions.adoc[Definitions] diff --git a/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc b/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc index dbe07abc..35e99171 100644 --- a/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc +++ b/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc @@ -35,7 +35,7 @@ https://.i.tgcloud.io/restpp/... # REST++ interface https://.i.tgcloud.io/gsql/... # GSQL interface ---- -Find your workspace host in the Savanna console from the workspace's *Connect* dialog, or from the control plane with xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace]. +Find your workspace host in the Savanna console from the workspace's *Connect* dialog, or from the control plane with xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details]. == Authentication diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc similarity index 98% rename from modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc index 58bba65d..a5a4d634 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-current-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc @@ -1,4 +1,4 @@ -= Get current IP += Check the current IP // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc similarity index 98% rename from modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc index 9b9ef370..c977cf9d 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-restore-status.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc @@ -1,4 +1,4 @@ -= Get restore status += Get backup restore status // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc similarity index 98% rename from modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc index 70bb1667..55c45c9c 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-a-database.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc @@ -1,4 +1,4 @@ -= Get a database += Get database details // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc similarity index 96% rename from modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc index fd061c02..a8d23921 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-org-metadata.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc @@ -1,4 +1,4 @@ -= Get org metadata += Get supported workspace options // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc similarity index 97% rename from modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc index 2b07a840..c97cbb86 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-a-workgroup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc @@ -1,4 +1,4 @@ -= Get a workgroup += Get workgroup details // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc similarity index 98% rename from modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc index 3f054034..03d99e6f 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc @@ -1,4 +1,4 @@ -= Get a workspace += Get workspace details // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc similarity index 98% rename from modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc index 9a8e4c2e..64c12e1e 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-schedules.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc @@ -1,4 +1,4 @@ -= Get workspace schedules += List workspace schedules // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc similarity index 96% rename from modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc index 371582d3..d66b1342 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-user-password.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc @@ -1,4 +1,4 @@ -= Update a user password += Update an in-database user's password // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc similarity index 96% rename from modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc rename to modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc index d720703c..297407c6 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-users-role.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc @@ -1,4 +1,4 @@ -= Update a user's role += Update an org user's role // Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. [.api-request] diff --git a/modules/savanna/modules/rest-api/pages/index-previous.adoc b/modules/savanna/modules/rest-api/pages/index-previous.adoc index 254b39d9..5c423790 100644 --- a/modules/savanna/modules/rest-api/pages/index-previous.adoc +++ b/modules/savanna/modules/rest-api/pages/index-previous.adoc @@ -117,14 +117,14 @@ Stand up and tear down the workgroups, workspaces, and databases that host your |xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] |POST |Create a workgroup in your org. |xref:savanna:rest-api:endpoints/list-workgroups.adoc[List workgroups] |GET |List the workgroups in your org. -|xref:savanna:rest-api:endpoints/get-a-workgroup.adoc[Get a workgroup] |GET |Retrieve one workgroup's details. +|xref:savanna:rest-api:endpoints/get-workgroup-details.adoc[Get workgroup details] |GET |Retrieve one workgroup with its settings, workspaces, and databases. |xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup] |PUT |Change a workgroup's settings. |xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup] |DELETE |Remove a workgroup. |xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] |POST |Create a workspace in a workgroup. -|xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace] |GET |Retrieve a workspace, including its status. +|xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details] |GET |Retrieve a workspace, including its status. |xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace] |PUT |Resize or reconfigure a workspace. |xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace] |DELETE |Remove a workspace. -|xref:savanna:rest-api:endpoints/get-a-database.adoc[Get a database] |GET |Retrieve a database in a workgroup. +|xref:savanna:rest-api:endpoints/get-database-details.adoc[Get database details] |GET |Retrieve a database in a workgroup. |xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database] |PUT |Change a database's settings. |xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database] |DELETE |Remove a database from a workgroup. |=== @@ -141,7 +141,7 @@ Control when a workspace is running so it is available when you need it and idle |xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace] |POST |Stop a workspace to save cost. |xref:savanna:rest-api:endpoints/refresh-a-workspace.adoc[Refresh a workspace] |POST |Refresh a workspace. |xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule] |POST |Schedule automatic pause and resume. -|xref:savanna:rest-api:endpoints/get-workspace-schedules.adoc[Get workspace schedules] |GET |List a workspace's schedules. +|xref:savanna:rest-api:endpoints/list-workspace-schedules.adoc[List workspace schedules] |GET |List a workspace's schedules. |xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule] |PUT |Change an existing schedule. |xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule] |DELETE |Remove a schedule. |=== @@ -156,7 +156,7 @@ Back up a workspace, restore it, and automate backups on a recurring schedule. |xref:savanna:rest-api:endpoints/list-backups.adoc[List backups] |GET |List a workspace's backups. |xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup] |POST |Restore a workspace from a backup. -|xref:savanna:rest-api:endpoints/get-restore-status.adoc[Get restore status] |GET |Check the status of a restore job. +|xref:savanna:rest-api:endpoints/get-backup-restore-status.adoc[Get backup restore status] |GET |Check the status of a restore job. |xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup] |DELETE |Remove a backup. |xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule] |GET |Retrieve the recurring backup schedule. |xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule] |POST |Create or update the backup schedule. @@ -177,7 +177,7 @@ Restrict network access to a workgroup and manage the database users inside a wo |xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP] |POST |Add an IP or CIDR range to the allow list. |xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs] |GET |List the allow list entries. -|xref:savanna:rest-api:endpoints/get-current-ip.adoc[Get current IP] |GET |Return the caller's public IP. +|xref:savanna:rest-api:endpoints/check-the-current-ip.adoc[Check the current IP] |GET |Return the caller's public IP and whether the allow list permits it. |xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP] |PUT |Edit an allow list entry. |xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP] |DELETE |Remove an allow list entry. |xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list] |PUT |Enforce the IP allow list. @@ -193,7 +193,7 @@ Restrict network access to a workgroup and manage the database users inside a wo |xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user] |POST |Create a GSQL user in a workspace. |xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users] |GET |List the workspace's GSQL users. -|xref:savanna:rest-api:endpoints/update-a-user-password.adoc[Update a user password] |PUT |Change an in-database user's password. +|xref:savanna:rest-api:endpoints/update-an-in-database-users-password.adoc[Update an in-database user's password] |PUT |Change an in-database user's password. |xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user] |DELETE |Remove a GSQL user. |=== @@ -205,9 +205,9 @@ Discover available capacity and manage the people in your org. |=== |Operation |Method |Purpose -|xref:savanna:rest-api:endpoints/get-org-metadata.adoc[Get org metadata] |GET |Discover regions, sizes, and other capacity metadata. +|xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options] |GET |Discover the regions, TigerGraph versions, and workspace types available to your org. |xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users] |GET |List the users in your org. -|xref:savanna:rest-api:endpoints/update-a-users-role.adoc[Update a user's role] |PUT |Change an org user's role. +|xref:savanna:rest-api:endpoints/update-an-org-users-role.adoc[Update an org user's role] |PUT |Change an org user's role. |=== == Get started @@ -215,10 +215,10 @@ Discover available capacity and manage the people in your org. Provision your first workspace end to end, then connect to it on the data plane. . xref:savanna:rest-api:create-api-key.adoc[Create an API key] and export it as `x-api-key`. -. Call xref:savanna:rest-api:endpoints/get-org-metadata.adoc[Get org metadata] to see the regions and sizes available to you. +. Call xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options] to see the regions and workspace types available to you. . xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] in your chosen region. . xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] in that workgroup. -. Poll xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace] until its status is ready. +. Poll xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details] until its status is ready. . xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs] to load data and run GSQL on the data plane. == Reference diff --git a/modules/savanna/modules/rest-api/pages/index.adoc b/modules/savanna/modules/rest-api/pages/index.adoc index 0ffca169..ddbf6d7f 100644 --- a/modules/savanna/modules/rest-api/pages/index.adoc +++ b/modules/savanna/modules/rest-api/pages/index.adoc @@ -31,14 +31,14 @@ Create, update, and delete the workgroups, workspaces, and databases that host y * xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup]: create a workgroup in your organization. * xref:savanna:rest-api:endpoints/list-workgroups.adoc[List workgroups]: list the workgroups in your organization. -* xref:savanna:rest-api:endpoints/get-a-workgroup.adoc[Get a workgroup]: retrieve a single workgroup's details. +* xref:savanna:rest-api:endpoints/get-workgroup-details.adoc[Get workgroup details]: retrieve one workgroup with its settings, workspaces, and databases. * xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup]: change a workgroup's settings. * xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup]: remove a workgroup. * xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace]: create a workspace in a workgroup. -* xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace]: retrieve a workspace, including its status. +* xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details]: retrieve a workspace, including its status. * xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace]: resize or reconfigure a workspace. * xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]: remove a workspace. -* xref:savanna:rest-api:endpoints/get-a-database.adoc[Get a database]: retrieve a database in a workgroup. +* xref:savanna:rest-api:endpoints/get-database-details.adoc[Get database details]: retrieve a database in a workgroup. * xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database]: change a database's settings. * xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database]: remove a database from a workgroup. @@ -50,7 +50,7 @@ Control when a workspace is running so it is available when you need it and idle * xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace]: stop a workspace to save cost. * xref:savanna:rest-api:endpoints/refresh-a-workspace.adoc[Refresh a workspace]: refresh a workspace. * xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]: schedule automatic pause and resume. -* xref:savanna:rest-api:endpoints/get-workspace-schedules.adoc[Get workspace schedules]: list a workspace's schedules. +* xref:savanna:rest-api:endpoints/list-workspace-schedules.adoc[List workspace schedules]: list a workspace's schedules. * xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule]: change an existing schedule. * xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule]: remove a schedule. @@ -60,7 +60,7 @@ Back up a workspace, restore it, and automate backups on a recurring schedule. * xref:savanna:rest-api:endpoints/list-backups.adoc[List backups]: list a workspace's backups. * xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup]: restore a workspace from a backup. -* xref:savanna:rest-api:endpoints/get-restore-status.adoc[Get restore status]: check the status of a restore job. +* xref:savanna:rest-api:endpoints/get-backup-restore-status.adoc[Get backup restore status]: check the status of a restore job. * xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup]: remove a backup. * xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule]: retrieve the recurring backup schedule. * xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule]: create or update the recurring backup schedule. @@ -73,23 +73,23 @@ Restrict network access to a workgroup and manage the database users inside a wo * xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP]: add an IP or CIDR range to the allow list. * xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs]: list the allow list entries. -* xref:savanna:rest-api:endpoints/get-current-ip.adoc[Get current IP]: return the caller's public IP address. +* xref:savanna:rest-api:endpoints/check-the-current-ip.adoc[Check the current IP]: return the caller's public IP and whether the allow list permits it. * xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP]: edit an allow list entry. * xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP]: remove an allow list entry. * xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list]: enforce the IP allow list. * xref:savanna:rest-api:endpoints/disable-the-allow-list.adoc[Disable the allow list]: stop enforcing the IP allow list. * xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]: create a GSQL user in a workspace. * xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users]: list the workspace's GSQL users. -* xref:savanna:rest-api:endpoints/update-a-user-password.adoc[Update a user password]: change an in-database user's password. +* xref:savanna:rest-api:endpoints/update-an-in-database-users-password.adoc[Update an in-database user's password]: set a new password for a GSQL user in a workspace. * xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user]: remove a GSQL user. === Administer your organization Discover available capacity and manage the people in your org. -* xref:savanna:rest-api:endpoints/get-org-metadata.adoc[Get org metadata]: discover the regions, sizes, and capacity available to your org. +* xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options]: discover the regions, TigerGraph versions, and workspace types available to your org. * xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users]: list the users in your organization. -* xref:savanna:rest-api:endpoints/update-a-users-role.adoc[Update a user's role]: change an org user's role. +* xref:savanna:rest-api:endpoints/update-an-org-users-role.adoc[Update an org user's role]: change which role a user holds in your organization. == Common use cases @@ -97,7 +97,7 @@ Discover available capacity and manage the people in your org. * *Control cost automatically*: pause idle compute with xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace] and xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace], or automate it with xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]. * *Protect your data*: snapshot and recover with xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule] and xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup]. * *Secure access*: restrict traffic with xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP] and xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list], and manage logins with xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]. -* *CI/CD integration*: create ephemeral workspaces for tests or preview environments, polling xref:savanna:rest-api:endpoints/get-a-workspace.adoc[Get a workspace] until the status is ready. +* *CI/CD integration*: create ephemeral workspaces for tests or preview environments, polling xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details] until the status is ready. == Related topics From c0dcd5bcc22bb6f8af0c15c545ffe21bd69ff4ac Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 15:22:33 +0530 Subject: [PATCH 11/22] build(savanna): add OpenAPI-driven API reference page renderer Introduce api-page.js with vendored OpenAPI, curated attribute descriptions, and response examples to generate rich per-endpoint reference content. --- lib/api-descriptions.json | 459 ++ lib/api-examples.json | 5 + lib/api-page.js | 650 ++ .../modules/rest-api/_catalog/openapi.json | 6461 +++++++++++++++++ 4 files changed, 7575 insertions(+) create mode 100644 lib/api-descriptions.json create mode 100644 lib/api-examples.json create mode 100644 lib/api-page.js create mode 100644 modules/savanna/modules/rest-api/_catalog/openapi.json diff --git a/lib/api-descriptions.json b/lib/api-descriptions.json new file mode 100644 index 00000000..aecf06c7 --- /dev/null +++ b/lib/api-descriptions.json @@ -0,0 +1,459 @@ +{ + "_comment": "Attribute prose for the REST reference pages, keyed by OpenAPI definition. The published spec describes almost none of its properties, so this file covers every attribute the endpoint pages reach. Add an entry here when the spec gains a definition; a property with neither spec text nor an entry renders with its name and type alone. The _operations map is separate: keyed by \"METHOD /path\", it replaces the opening paragraph of a page where the spec's own description is too thin to tell a reader whether the endpoint applies to them.", + "_operations": { + "GET /controller/v4/v2/cloud-providers/public": "Lists the cloud providers TigerGraph operates. Use an id from this list as the cloud_provider_id when you create a workgroup.", + "GET /controller/v4/v2/cloud-providers": "Lists the Bring Your Own Cloud (BYOC) providers registered to your organization, the cloud accounts you own that Savanna deploys into. Use an id from this list as the cloud_provider_id when you create a workgroup.", + "GET /controller/v4/v2/cloud-providers/{cloudProviderID}": "Returns a single Bring Your Own Cloud (BYOC) provider, including its status, the AWS resources Savanna created in your account, and its component versions.", + "POST /controller/v4/v2/cloud-providers": "Registers a cloud account you own with Savanna so workgroups can be deployed into it. This is the Bring Your Own Cloud (BYOC) setup step, and it grants Savanna a cross-account IAM role in your AWS account.", + "POST /controller/v4/v2/cloud-providers/validate": "Checks whether a Bring Your Own Cloud (BYOC) registration would succeed, without creating anything.", + "PUT /controller/v4/v2/cloud-providers/{cloudProviderID}": "Renames a Bring Your Own Cloud (BYOC) provider or records a version against it. Use the upgrade endpoint to change what is deployed in the cloud account.", + "PUT /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade": "Upgrades the Savanna components deployed in a Bring Your Own Cloud (BYOC) provider's cloud account, and optionally resizes its node groups.", + "DELETE /controller/v4/v2/cloud-providers/{cloudProviderID}": "Unregisters a Bring Your Own Cloud (BYOC) provider and removes the Savanna components from that cloud account. Delete its workgroups first.", + "POST /controller/v4/v2/workgroups/{workgroupID}/allow_list": "Adds an IP address or CIDR range to a workgroup allow list.", + "GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current": "Returns your current public IP address and whether the workgroup allow list permits it.", + "POST /controller/v4/v2/workgroups": "Creates a workgroup with the selected cloud provider, region, and deployment settings.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules": "Creates a recurring workspace schedule.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces": "Creates a workspace in a workgroup. The workspace's database is created with it.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": "Creates an in-database GSQL user for a workspace.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups": "Deletes the specified workspace backup.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}": "Deletes a database from a workgroup.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}": "Deletes a workgroup.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}": "Deletes a workspace schedule.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}": "Deletes a workspace from a workgroup.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}": "Removes an IP address or CIDR range from a workgroup allow list.", + "DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": "Deletes an in-database GSQL user from a workspace.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable": "Disables IP allow-list enforcement for a workgroup.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable": "Enables IP allow-list enforcement for a workgroup.", + "GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status": "Returns the status of a backup restore job.", + "GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule": "Returns the backup schedule for a workspace.", + "GET /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}": "Returns details for a database in a workgroup.", + "GET /controller/v4/v2/workspaces/meta": "Lists the regions, TigerGraph versions, and workspace types available to your organization.", + "GET /controller/v4/v2/workgroups/{workgroupID}": "Returns details for a workgroup in your organization.", + "GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}": "Returns details for a workspace in a workgroup.", + "GET /controller/v4/v2/workgroups/{workgroupID}/allow_list": "Lists the IP addresses and CIDR ranges permitted by a workgroup allow list.", + "GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups": "Lists the backups for a workspace.", + "GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": "Lists the in-database GSQL users for a workspace.", + "GET /users": "Lists the users in your organization. This endpoint does not support API key authentication.", + "GET /controller/v4/v2/workgroups": "Lists the workgroups in your organization.", + "GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules": "Lists the schedules for a workspace.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause": "Pauses a workspace.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh": "Refreshes a workspace.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore": "Restores a workspace from a backup.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume": "Resumes a paused workspace.", + "POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule": "Creates or replaces the backup schedule for a workspace.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}": "Renames a database in a workgroup.", + "PUT /controller/v4/v2/workgroups/{workgroupID}": "Updates a workgroup name, application logging, or encryption settings.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}": "Updates a workspace schedule.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}": "Updates a workspace configuration.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}": "Updates an entry in a workgroup allow list.", + "PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": "Updates an in-database GSQL user's password.", + "PUT /users/{userId}/roles": "Updates an organization user's role. This endpoint does not support API key authentication.", + "GET /controller/v4/v2/addons/meta": "Lists the add-ons available to your organization. Use an id from this list as addons_id when you install an add-on or enable one on a workspace.", + "POST /controller/v4/v2/addons/{addonsID}/install": "Installs an add-on for your organization, or enables or disables it.", + "GET /controller/v4/v2/installed-addons": "Lists the add-ons installed for your organization.", + "GET /controller/v4/v2/installed-addons/{installedAddonsID}": "Returns a single installed add-on.", + "GET /controller/v4/v2/addons/{addonsID}/workspaces": "Lists the workspaces that have a given add-on enabled.", + "GET /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}": "Lists configurations of a given name for an installed add-on.", + "POST /controller/v4/v2/add-ons/{installedAddonsID}/configs": "Creates a configuration for an installed add-on.", + "PUT /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}": "Updates a configuration of an installed add-on.", + "DELETE /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}": "Deletes a configuration of an installed add-on." + }, + "CreateConfigRequest": { + "config_name": "Name of the configuration.", + "config_value": "Value of the configuration." + }, + "UpdateConfigRequest": { + "config_value": "New value of the configuration." + }, + "AgentConfig": { + "catalog_activity_update_interval_seconds": "Seconds between catalog activity updates.", + "enable_topology_force_update": "Whether topology updates are forced.", + "heartbeat_interval_seconds": "Seconds between agent heartbeats.", + "query_activity_update_interval_seconds": "Seconds between query activity updates.", + "topology_update_interval_seconds": "Seconds between topology updates." + }, + "AllowedIP": { + "cidr": "IP address or range in CIDR notation, such as 192.168.1.0/24 for a range or 192.168.1.2/32 for a single address.", + "id": "Unique identifier of the allow list entry.", + "note": "Note recording why the address was allowed." + }, + "Backup": { + "id": "Unique identifier of the backup.", + "is_automatic": "Whether the backup came from the backup schedule rather than a manual request.", + "size_bytes": "Size of the backup, in bytes.", + "status": "Current status of the backup.", + "tag": "Tag that identifies the backup.", + "time": "Time the backup was taken.", + "type": "Scope of the data captured by the backup.", + "version": "TigerGraph version the backup was taken from." + }, + "BackupRestoreStatus": { + "created_at": "Time the restore job started.", + "name": "Name of the restore job.", + "output": "Log output produced by the restore job.", + "status": "Current status of the restore job." + }, + "BackupSchedule": { + "max_backup_files": "Maximum number of backups to keep.", + "max_reserved_days": "Number of days a backup is kept before it is removed.", + "max_retry": "Number of times a failed backup is retried.", + "pause": "Whether the schedule is paused.", + "schedule": "Cron expression that sets when the backup runs." + }, + "CloudProviderOptions": { + "account_id": "Cloud account identifier associated with the provider.", + "secure_connection": "Whether the provider uses a private, secure connection." + }, + "CloudProviderResource": { + "api_tokens": "API tokens associated with the cloud provider.", + "availability_zones": "Availability zones configured for the cloud provider.", + "cluster_enabled_log_types": "Kubernetes control-plane log types enabled for the provider.", + "component_versions": "Versions of the components installed for the provider.", + "created_at": "Time the cloud provider was created.", + "created_by": "User who created the cloud provider.", + "eks_id": "Identifier of the Amazon EKS cluster.", + "endpoint_service_name": "Name of the private endpoint service.", + "id": "Unique identifier of the cloud provider.", + "last_error": "Most recent error reported while provisioning or updating the provider.", + "name": "Name of the cloud provider.", + "node_group_config": "Configuration of the Kubernetes node groups.", + "options": "Additional cloud-provider configuration options.", + "org_id": "Unique identifier of the organization that owns the provider.", + "platform": "Cloud platform that hosts the provider.", + "region": "Cloud region that hosts the provider.", + "role_arn": "Amazon Resource Name of the IAM role TigerGraph assumes.", + "role_external_id": "External identifier used when TigerGraph assumes the IAM role.", + "security_group_id": "Identifier of the network security group.", + "short_id": "Short identifier of the cloud provider.", + "status": "Current status of the cloud provider.", + "subnet_id": "Identifiers of the subnets used by the provider.", + "type": "Access type of the cloud provider.", + "updated_at": "Time the cloud provider was last updated.", + "version": "Version of the cloud provider deployment.", + "version_number": "Internal version number of the cloud provider record.", + "vpc_id": "Identifier of the virtual private cloud.", + "vpc_owned_by_tg": "Whether TigerGraph owns and manages the virtual private cloud.", + "work_dir": "Working directory used while provisioning the provider." + }, + "CreateCloudProviderResourceRequest": { + "created_by": "User creating the cloud provider.", + "name": "Name for the new cloud provider.", + "options": "Additional cloud-provider configuration options.", + "platform": "Cloud platform that hosts the provider.", + "region": "Cloud region that hosts the provider.", + "role_arn": "Amazon Resource Name of the IAM role TigerGraph assumes.", + "role_external_id": "External identifier used when TigerGraph assumes the IAM role." + }, + "CreateWorkgroupRequest": { + "cloud_provider_id": "Unique identifier of the cloud provider configuration to use.", + "enable_application_log": "Whether application logging is enabled.", + "enable_encryption": "Whether data is encrypted at rest.", + "name": "Name for the new workgroup.", + "platform": "Cloud platform that hosts the workgroup.", + "region": "Cloud region that hosts the workgroup.", + "shared_storage": "Whether workspaces in the workgroup share storage." + }, + "PublicCloudProviderResource": { + "component_versions": "Versions of the components installed for the provider.", + "id": "Unique identifier of the public cloud provider.", + "name": "Name of the public cloud provider.", + "org_id": "Unique identifier of the organization that owns the provider.", + "platform": "Cloud platform that hosts the provider.", + "region": "Cloud region that hosts the provider.", + "status": "Current status of the public cloud provider.", + "version": "Version of the cloud provider deployment.", + "version_number": "Internal version number of the cloud provider record." + }, + "CreateWorkspaceRequest": { + "addons": "Add-ons to enable on the new workspace.", + "auto_stop_minutes": "Idle minutes before the workspace stops automatically.", + "enable_auto_start": "Whether the workspace starts automatically on access.", + "enable_ha": "Whether high availability is enabled, which adds redundancy and improves fault tolerance.", + "is_rw": "Whether the workspace accepts writes. Backups require a read-write workspace.", + "maintenance_window_day_of_week": "Day of the week the maintenance window starts.", + "maintenance_window_hour_of_day": "Hour of the day the maintenance window starts.", + "maintenance_window_interval_weeks": "Number of weeks between maintenance windows.", + "maintenance_window_time_zone": "Time zone used for the maintenance window.", + "name": "Name for the new workspace.", + "solution_install_request": "Solution to install on the new workspace.", + "tg_database_id": "Unique identifier of the database to attach.", + "tg_version": "TigerGraph version to run in the workspace.", + "update_strategy": "Strategy used to apply workspace updates.", + "x_test_env": "Reserved for internal testing." + }, + "DeleteBackupRequest": { + "backup_id": "Unique identifier of the backup to delete." + }, + "Error": { + "FieldName": "Field associated with the error.", + "Reason": "Explanation of why the error occurred.", + "Type": "Category of the error." + }, + "FolderStatistics": { + "backup_size": "Size of backup data, in bytes.", + "billed_size": "Storage size counted for billing, in bytes.", + "log_size": "Size of log data, in bytes.", + "milvus_size": "Size of vector index data, in bytes.", + "total_size": "Total storage size, in bytes.", + "workspaces": "Storage used by each workspace." + }, + "IAMUser": { + "auth0UserID": "Identifier of the user in the identity provider.", + "authID": "Identifier issued by the authentication provider.", + "created": "Time the user was created.", + "description": "Description of the user.", + "email": "Email address of the user.", + "enabled": "Whether the user can sign in.", + "firstName": "Given name of the user.", + "id": "Unique identifier of the user.", + "lastName": "Family name of the user.", + "metadata": "Additional details about the user.", + "path": "Hierarchical path of the user within the organization.", + "role": "Role assigned to the user.", + "tenantID": "Unique identifier of the tenant the user belongs to.", + "trn": "TigerGraph resource name of the user.", + "updated": "Time the user was last updated.", + "username": "Username of the user." + }, + "InDatabaseUserRequest": { + "password": "Password for the in-database user.", + "username": "Username for the in-database user." + }, + "OrgListUserResponse": { + "auth0UserID": "Identifier of the user in the identity provider.", + "authID": "Identifier issued by the authentication provider.", + "created": "Time the user was created.", + "description": "Description of the user.", + "email": "Email address of the user.", + "enabled": "Whether the user can sign in.", + "firstName": "Given name of the user.", + "id": "Unique identifier of the user.", + "lastName": "Family name of the user.", + "metadata": "Additional details about the user.", + "path": "Hierarchical path of the user within the organization.", + "roles": "Roles assigned to the user.", + "tenantID": "Unique identifier of the tenant the user belongs to.", + "trn": "TigerGraph resource name of the user.", + "updated": "Time the user was last updated.", + "username": "Username of the user." + }, + "OrgMetadata": { + "attachedTo": "Resources the user is attached to.", + "lastLogin": "Time the user last signed in." + }, + "OrgRole": { + "displayName": "Name of the role as it appears in the TigerGraph Savanna console.", + "id": "Unique identifier of the role.", + "name": "Name of the role.", + "path": "Hierarchical path of the role within the organization.", + "tenantID": "Unique identifier of the tenant the role belongs to.", + "trn": "TigerGraph resource name of the role." + }, + "PutOrgUsersRoles": { + "roles": "Roles to assign to the user, replacing the roles they hold now." + }, + "Region": { + "description": "Description of the region.", + "name": "Name of the region." + }, + "Response": { + "Error": "Indicates whether the request returned an error.", + "ErrorDetails": "Details about each error returned by the request.", + "Message": "Human-readable summary of the request result.", + "RequestID": "Unique identifier for tracing the request.", + "Result": "Payload returned by the request." + }, + "RestoreBackupRequest": { + "backup_id": "Unique identifier of the backup to restore." + }, + "SolutionInstallRequest": { + "addons": "Add-ons to enable alongside the solution.", + "data_source_origin": "Origin of the sample data loaded with the solution.", + "name": "Name for the installed solution.", + "solution_catalog_id": "Unique identifier of the solution catalog entry to install." + }, + "TGDatabase": { + "create_time": "Time the database was created.", + "database_id": "Unique identifier of the database.", + "folder_statistics": "Storage statistics for the database.", + "name": "Name of the database.", + "org_id": "Unique identifier of the organization.", + "org_name": "Name of the organization.", + "region": "Cloud region that hosts the database.", + "tg_version": "TigerGraph version of the database.", + "workgroup_id": "Unique identifier of the parent workgroup.", + "workspaces": "Workspaces attached to the database." + }, + "TGVersion": { + "allow_create": "Whether new workspaces can be created on this version.", + "allow_upgrade": "Whether existing workspaces can be upgraded to this version.", + "channel": "Release channel the version belongs to.", + "end_of_life": "Date the version stops being supported.", + "image": "Container image that provides the version.", + "incompatible_upgrades_from": "Versions that cannot be upgraded to this version.", + "name": "Version number." + }, + "UpdateTGDatabaseRequest": { + "tg_database_name": "New name for the database." + }, + "UpdateCloudProviderResourceRequest": { + "name": "New name for the cloud provider.", + "version": "Cloud provider deployment version to apply." + }, + "UpdateWorkgroupRequest": { + "enable_application_log": "Whether application logging is enabled.", + "encryption_method": "Encryption method to apply to the workgroup.", + "workgroup_name": "New name for the workgroup." + }, + "UpdateWorkspaceRequest": { + "addons": "Add-ons to enable on the workspace.", + "agent_config": "Agent heartbeat and polling configuration.", + "auto_stop_minutes": "Idle minutes before the workspace stops automatically.", + "auto_upgrade_state": "State of the automatic version upgrade.", + "desired_tg_version": "TigerGraph version to move the workspace to.", + "enable_auto_start": "Whether the workspace starts automatically on access.", + "enable_ha": "Whether high availability is enabled.", + "maintenance_window_day_of_week": "Day of the week the maintenance window starts.", + "maintenance_window_hour_of_day": "Hour of the day the maintenance window starts.", + "maintenance_window_interval_weeks": "Number of weeks between maintenance windows.", + "maintenance_window_time_zone": "Time zone used for the maintenance window.", + "pause": "Whether the workspace is paused.", + "update_strategy": "Strategy used to apply workspace updates.", + "workspace_name": "New name for the workspace.", + "workspace_type_name": "Name of the workspace size to apply." + }, + "UpgradeCloudProviderComponent": { + "name": "Name of the component to upgrade.", + "version": "Target version of the component." + }, + "UpgradeCloudProviderResourceRequest": { + "cluster_enabled_log_types": "Kubernetes control-plane log types to enable after the upgrade.", + "components": "Components and target versions to apply.", + "node_group_config": "Kubernetes node-group configuration to apply during the upgrade." + }, + "ValidateCloudProviderRequest": { + "account_id": "Cloud account identifier to validate.", + "platform": "Cloud platform to validate.", + "region": "Cloud region to validate.", + "role_arn": "Amazon Resource Name of the IAM role TigerGraph will assume.", + "role_external_id": "External identifier used when TigerGraph assumes the IAM role.", + "secure_connection": "Whether to validate a private, secure connection." + }, + "Workgroup": { + "cloud_provider_id": "Unique identifier of the cloud provider configuration.", + "cloud_provider_name": "Display name of the cloud provider.", + "cloud_provider_status": "Current status of the cloud provider configuration.", + "cloud_provider_type": "Type of cloud provider configuration.", + "creator": "User who created the workgroup.", + "enable_allow_list": "Whether the IP allow list is enabled.", + "enable_application_log": "Whether application logging is enabled.", + "encryption_method": "Encryption method used by the workgroup.", + "is_current_ip_allowed": "Whether the current client IP is allowed.", + "name": "Name of the workgroup.", + "org_id": "Unique identifier of the organization.", + "org_name": "Name of the organization.", + "platform": "Cloud platform that hosts the workgroup.", + "region": "Cloud region that hosts the workgroup.", + "shared_storage": "Whether shared storage is enabled.", + "tg_databases": "Databases associated with the workgroup.", + "workgroup_id": "Unique identifier of the workgroup.", + "workspaces": "Workspaces associated with the workgroup." + }, + "Workspace": { + "addons": "Add-ons enabled for the workspace.", + "agent_config": "Agent heartbeat and polling configuration.", + "auto_stop_minutes": "Idle minutes before the workspace stops automatically.", + "auto_upgrade_state": "State of the automatic version upgrade.", + "cloud_provider_id": "Unique identifier of the cloud provider configuration.", + "cloud_provider_name": "Display name of the cloud provider.", + "cloud_provider_short_id": "Short identifier of the cloud provider configuration.", + "condition_type": "Current condition reported for the workspace.", + "created_at": "Time the workspace was created.", + "creator": "User who created the workspace.", + "database_id": "Unique identifier of the attached database.", + "database_name": "Name of the attached database.", + "deleted_at": "Time the workspace was deleted.", + "desired_tg_version": "TigerGraph version the workspace is moving to.", + "display_status": "Status shown in the TigerGraph Savanna console.", + "edge_count": "Number of edges stored in the workspace.", + "enable_auto_start": "Whether the workspace starts automatically on access.", + "enable_copilot": "Whether TigerGraph CoPilot is enabled.", + "enable_ha": "Whether high availability is enabled.", + "err_message": "Error message reported for the workspace.", + "folder_statistics": "Storage statistics for the workspace.", + "graph_topology_size_bytes": "Size of the graph topology, in bytes.", + "is_rw": "Whether the workspace accepts writes.", + "last_maintenance": "Time of the last maintenance run.", + "last_modified_time": "Time the workspace was last modified.", + "maintenance_window_day_of_week": "Day of the week the maintenance window starts.", + "maintenance_window_hour_of_day": "Hour of the day the maintenance window starts.", + "maintenance_window_interval_weeks": "Number of weeks between maintenance windows.", + "maintenance_window_time_zone": "Time zone used for the maintenance window.", + "name": "Name of the workspace.", + "nginx_host": "Host name that serves the workspace endpoint.", + "org_id": "Unique identifier of the organization.", + "org_name": "Name of the organization.", + "refresh_message": "Message describing the most recent refresh.", + "refresh_status": "Status of the most recent refresh.", + "region": "Cloud region that hosts the workspace.", + "replicas": "Number of replicas provisioned for the workspace.", + "snapshot_time": "Time of the snapshot the workspace was created from.", + "solution_catalog_id": "Unique identifier of the solution catalog entry.", + "status": "Current status of the workspace.", + "tg_version": "TigerGraph version running in the workspace.", + "update_strategy": "Strategy used to apply workspace updates.", + "version_number": "Internal version number of the workspace record.", + "vertex_count": "Number of vertices stored in the workspace.", + "workgroup_id": "Unique identifier of the parent workgroup.", + "workgroup_name": "Name of the parent workgroup.", + "workspace_id": "Unique identifier of the workspace.", + "workspace_type": "Compute size and shape of the workspace." + }, + "WorkspaceAddonsRequest": { + "addons_id": "Unique identifier of the add-on.", + "enable": "Whether the add-on is enabled.", + "enable_configuration": "Configuration applied when the add-on is enabled.", + "is_free": "Whether the add-on is available at no cost.", + "unique_name": "Unique name of the add-on.", + "workspace_id": "Unique identifier of the workspace." + }, + "WorkspaceMetadata": { + "regions": "Cloud regions available to your org.", + "tgVersions": "TigerGraph versions available to your org.", + "workspaceTypes": "Workspace sizes available to your org." + }, + "WorkspaceSchedule": { + "date": "Date the action runs when the schedule does not repeat.", + "id": "Unique identifier of the schedule.", + "repeat": "How often the action repeats: daily, weekly, or weekdays.", + "repeat_on": "Days the action runs when it repeats weekly.", + "time": "Time of day the action runs.", + "timezone": "Time zone the schedule is interpreted in.", + "workspace_id": "Unique identifier of the scheduled workspace.", + "workspace_type_name": "Workspace size to apply when the action runs." + }, + "WorkspaceSize": { + "size": "Storage used by the workspace, in bytes.", + "workspace_id": "Unique identifier of the workspace." + }, + "WorkspaceType": { + "cpu": "Number of vCPUs allocated to the workspace.", + "ha": "Number of high-availability replicas.", + "memory": "Memory allocated to the workspace.", + "partition": "Number of partitions in the workspace.", + "typeName": "Name of the workspace size type." + }, + "aws.NodeGroup": { + "max_size": "Maximum number of nodes in the group.", + "min_size": "Minimum number of nodes in the group.", + "overprovisioning_factor": "Additional capacity factor reserved above the requested workload." + }, + "aws.NodeGroupConfig": { + "ng_16": "Configuration of the 16-unit node group.", + "ng_32": "Configuration of the 32-unit node group.", + "ng_48": "Configuration of the 48-unit node group.", + "ng_64": "Configuration of the 64-unit node group.", + "ng_system": "Configuration of the system node group.", + "prefetch_image_list": "Container images to prefetch onto the nodes." + } +} diff --git a/lib/api-examples.json b/lib/api-examples.json new file mode 100644 index 00000000..0b92a8a8 --- /dev/null +++ b/lib/api-examples.json @@ -0,0 +1,5 @@ +{ + "get-workgroup-details": { + "200": "{\n \"Error\": false,\n \"ErrorDetails\": [],\n \"Message\": \"Get workgroup detail successfully\",\n \"RequestID\": \"b8e0e6f2-2a51-4a3e-9f6b-0f2d9c1a7e44\",\n \"Result\": {\n \"cloud_provider_id\": \"tg-cloud-provider\",\n \"cloud_provider_name\": \"TigerGraph Cloud\",\n \"cloud_provider_status\": \"Active\",\n \"cloud_provider_type\": \"tg\",\n \"creator\": \"user@example.com\",\n \"enable_allow_list\": true,\n \"enable_application_log\": false,\n \"encryption_method\": \"TMK\",\n \"is_current_ip_allowed\": true,\n \"name\": \"Production\",\n \"org_id\": \"org-1a2b3c4d\",\n \"org_name\": \"example-org\",\n \"platform\": \"aws\",\n \"region\": \"us-west-2\",\n \"shared_storage\": false,\n \"tg_databases\": [],\n \"workgroup_id\": \"wg-1a2b3c4d\",\n \"workspaces\": []\n }\n}" + } +} \ No newline at end of file diff --git a/lib/api-page.js b/lib/api-page.js new file mode 100644 index 00000000..65abf809 --- /dev/null +++ b/lib/api-page.js @@ -0,0 +1,650 @@ +'use strict' + +/** + * Builds the reference page body for one endpoint from the vendored OpenAPI + * spec: parameter and response schemas expanded in full, plus request samples + * in every language the picker offers. + * + * Attribute prose comes from the spec where it exists and from + * lib/api-descriptions.json otherwise; response examples come from + * lib/api-examples.json where they are curated and are synthesised from the + * schema where they are not. + */ + +const fs = require('fs') +const path = require('path') + +const BASE_URL = 'https://api.tgcloud.io' +// Deep enough for every schema in the current spec; only a guard against a +// pathological one. Recursion already stops when a definition repeats. +const MAX_DEPTH = 12 +const MAX_EXAMPLE_DEPTH = 4 + +const LANGUAGES = [ + ['curl', 'cURL', 'bash'], + ['python', 'Python', 'python'], + ['javascript', 'JavaScript', 'javascript'], + ['php', 'PHP', 'php'], + ['go', 'Go', 'go'], + ['java', 'Java', 'java'], + ['ruby', 'Ruby', 'ruby'], +] + +const spec = readJson(path.join(__dirname, '..', 'modules/savanna/modules/rest-api/_catalog/openapi.json')) +const descriptions = readJson(path.join(__dirname, 'api-descriptions.json')) +const examples = readJson(path.join(__dirname, 'api-examples.json')) + +function readJson (file) { + return JSON.parse(fs.readFileSync(file, 'utf8')) +} + +function escapeHtml (value) { + return String(value).replace(/&/g, '&').replace(//g, '>') +} + +function slugify (value) { + return String(value) + .replace(/([a-z0-9])([A-Z])/g, '$1-$2') + .toLowerCase() + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-|-$/g, '') +} + +function refName (schema) { + const ref = schema && schema.$ref + return ref ? ref.replace('#/definitions/', '') : null +} + +function resolve (schema) { + const name = refName(schema) + return name ? spec.definitions[name] || {} : schema || {} +} + +/** Flattens allOf so a response reads as one object, and names its owner. */ +function flatten (schema) { + const out = { name: refName(schema), properties: {}, required: [] } + const resolved = resolve(schema) + for (const part of resolved.allOf || [resolved]) { + const inner = resolve(part) + if (!out.name) out.name = refName(part) + Object.assign(out.properties, inner.properties || {}) + out.required = out.required.concat(inner.required || []) + } + return out +} + +function typeLabel (schema) { + const resolved = resolve(schema) + if (resolved.allOf) return 'object' + if (resolved.type === 'array') return typeLabel(resolved.items) + '[]' + if (resolved.enum) return resolved.type || 'string' + if (resolved.type && resolved.type !== 'object') return resolved.type + return 'object' +} + +/** The object behind a field, once arrays are unwrapped, or null if it has no attributes. */ +function objectBehind (schema) { + const resolved = resolve(schema) + if (resolved.type === 'array') return objectBehind(resolved.items) + const flat = flatten(schema) + return Object.keys(flat.properties).length ? flat : null +} + +/** + * The line of constraints under a description: the closed set of values a + * field accepts, and any bound the spec puts on it. + */ +function facets (schema) { + const resolved = resolve(schema) + const source = resolved.type === 'array' ? resolve(resolved.items) : resolved + const parts = [] + if (source.enum) { + parts.push('Available options: ' + source.enum.map((value) => '' + escapeHtml(value) + '').join(', ')) + } + if (source.default !== undefined) parts.push('Default: ' + escapeHtml(source.default) + '') + if (source.minimum !== undefined) parts.push('Minimum: ' + escapeHtml(source.minimum) + '') + if (source.maximum !== undefined) parts.push('Maximum: ' + escapeHtml(source.maximum) + '') + return parts.length ? '

' + parts.join(' · ') + '

' : '' +} + +function describe (owner, key, schema) { + const resolved = resolve(schema) + const own = (descriptions[owner] || {})[key] + return schema.description || resolved.description || own || '' +} + +/** + * The spec's operation descriptions restate the summary ("Create a new cloud + * provider"), which leaves out the context a reader needs to tell whether an + * endpoint applies to them. An entry under _operations replaces that opening + * paragraph; the spec's own text is the fallback. + */ +function lead (endpoint, operation) { + const override = (descriptions._operations || {})[endpoint.method + ' ' + endpoint.path] + return override || operation.description || operation.summary || '' +} + +function indent (level) { + return ' '.repeat(level) +} + +function typeTags (schema, key, required) { + const tags = ['' + typeLabel(schema) + ''] + if (required.includes(key)) tags.push('required') + return tags.join('\n') +} + +/** + * Renders the attributes of an object as nested disclosures. `trail` holds the + * definitions already open above this point so a self-referencing schema stops + * instead of recursing forever. + */ +function renderChildren (owner, pad, trail, depth) { + const out = [] + for (const key of Object.keys(owner.properties).sort()) { + const schema = owner.properties[key] + const description = describe(owner.name, key, schema) + const nested = objectBehind(schema) + const open = nested && !trail.has(nested.name) && depth < MAX_DEPTH + + out.push(indent(pad) + '
') + out.push( + indent(pad + 2) + + '
' + + escapeHtml(key) + + '' + + typeTags(schema, key, owner.required).replace(/\n/g, '') + + '
' + ) + if (description) out.push(indent(pad + 2) + '

' + escapeHtml(description) + '

') + const limits = facets(schema) + if (limits) out.push(indent(pad + 2) + limits) + if (open) { + out.push(indent(pad + 2) + '
') + out.push(indent(pad + 4) + '') + out.push(indent(pad + 6) + 'Show child attributes') + out.push(indent(pad + 6) + 'Hide child attributes') + out.push(indent(pad + 4) + '') + out.push(indent(pad + 4) + '
') + out.push(...renderChildren(nested, pad + 6, new Set(trail).add(nested.name), depth + 1)) + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 2) + '
') + } + out.push(indent(pad) + '
') + } + return out +} + +/** Renders one top-level attribute: anchored heading, prose, then its children. */ +function renderField (owner, key, schema, options) { + const pad = options.pad + const id = options.idPrefix + slugify(key) + const nested = objectBehind(schema) + const description = describe(owner.name, key, schema) + const out = [] + + out.push(indent(pad) + '
') + out.push(indent(pad + 2) + '
') + out.push( + indent(pad + 4) + + '#' + ) + out.push(indent(pad + 4) + '' + escapeHtml(key) + '') + for (const tag of typeTags(schema, key, owner.required).split('\n')) out.push(indent(pad + 4) + tag) + if (options.location) out.push(indent(pad + 4) + '' + options.location + '') + out.push(indent(pad + 2) + '
') + if (description) out.push(indent(pad + 2) + '

' + escapeHtml(description) + '

') + const limits = facets(schema) + if (limits) out.push(indent(pad + 2) + limits) + if (nested) { + out.push(indent(pad + 2) + '
') + out.push(indent(pad + 4) + '') + out.push(indent(pad + 6) + 'Show child attributes') + out.push(indent(pad + 6) + 'Hide child attributes') + out.push(indent(pad + 4) + '') + out.push(indent(pad + 4) + '
') + out.push(...renderChildren(nested, pad + 6, new Set([owner.name, nested.name]), 1)) + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 2) + '
') + } + out.push(indent(pad) + '
') + return out +} + +/** A parameter carries its own type and description rather than a schema owner. */ +function renderParameter (parameter, pad) { + const id = 'parameter-' + slugify(parameter.name) + const out = [] + out.push(indent(pad) + '
') + out.push(indent(pad + 2) + '
') + out.push( + indent(pad + 4) + + '#' + ) + out.push(indent(pad + 4) + '' + escapeHtml(parameter.name) + '') + out.push(indent(pad + 4) + '' + (parameter.type || 'string') + '') + out.push(indent(pad + 4) + '' + parameter.in + '') + if (parameter.required) out.push(indent(pad + 4) + 'required') + out.push(indent(pad + 2) + '
') + if (parameter.description) out.push(indent(pad + 2) + '

' + escapeHtml(parameter.description) + '

') + const limits = facets(parameter) + if (limits) out.push(indent(pad + 2) + limits) + out.push(indent(pad) + '
') + return out +} + +function section (title, id, pad, body) { + return [ + indent(pad) + '
', + indent(pad + 2) + '

' + title + '

', + ...body, + indent(pad) + '
', + ] +} + +function renderAuthorizations (operation, pad) { + const out = [] + for (const requirement of operation.security || []) { + for (const name of Object.keys(requirement)) { + const scheme = spec.securityDefinitions[name] + if (!scheme) continue + out.push(indent(pad + 2) + '
') + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 6) + '' + escapeHtml(scheme.name) + '') + out.push(indent(pad + 6) + 'string') + out.push(indent(pad + 6) + '' + scheme.in + '') + out.push(indent(pad + 6) + 'required') + out.push(indent(pad + 4) + '
') + out.push( + indent(pad + 4) + + '

' + escapeHtml(scheme.description) + '. Send the key in the ' + + escapeHtml(scheme.name) + ' request ' + scheme.in + '.

' + ) + out.push(indent(pad + 4) + 'Create an API key') + out.push(indent(pad + 2) + '
') + } + } + return out.length ? section('Authorizations', 'api-authorizations-title', pad, out) : [] +} + +function renderParameterSection (parameters, location, title, pad) { + const matching = parameters.filter((parameter) => parameter.in === location) + if (!matching.length) return [] + const body = [] + for (const parameter of matching) body.push(...renderParameter(parameter, pad + 2)) + return section(title, 'api-' + location + '-parameters-title', pad, body) +} + +function renderBodySection (parameters, pad) { + const parameter = parameters.find((candidate) => candidate.in === 'body') + if (!parameter) return [] + const owner = flatten(parameter.schema) + const keys = Object.keys(owner.properties) + if (!keys.length) return [] + const body = [] + for (const key of keys.sort()) { + body.push( + ...renderField(owner, key, owner.properties[key], { pad: pad + 2, idPrefix: 'body-' }) + ) + } + return section('Body', 'api-body-title', pad, body) +} + +function statusCodes (operation) { + return Object.keys(operation.responses || {}).sort() +} + +/** The status control is a menu only when there is more than one response. */ +function renderStatusControl (codes, pad) { + if (codes.length < 2) return [indent(pad) + '' + codes[0] + ''] + const out = [] + out.push(indent(pad) + '
') + out.push( + indent(pad + 2) + + '') + out.push(indent(pad + 2) + '') + out.push(indent(pad) + '
') + return out +} + +function renderResponseSection (operation, pad) { + const codes = statusCodes(operation) + if (!codes.length) return [] + // A no-content response has no media type to advertise, whatever the + // operation declares it produces. + const returnsBody = codes.some((code) => (operation.responses[code] || {}).schema) + const produces = returnsBody ? (operation.produces || ['application/json'])[0] : '' + const out = [] + + out.push(indent(pad) + '
') + out.push(indent(pad + 2) + '
') + out.push(indent(pad + 4) + '

Response

') + out.push(indent(pad + 4) + '
') + out.push(...renderStatusControl(codes, pad + 6)) + if (produces) out.push(indent(pad + 6) + '' + produces + '') + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 2) + '
') + + for (const code of codes) { + const schema = (operation.responses[code] || {}).schema + const owner = schema ? flatten(schema) : { name: null, properties: {}, required: [] } + const keys = Object.keys(owner.properties).sort() + const prefix = codes.length > 1 ? 'response-' + code + '-' : 'response-' + const body = [] + if (keys.length) { + for (const key of keys) { + body.push(...renderField(owner, key, owner.properties[key], { pad: pad + 4, idPrefix: prefix })) + } + } else { + const note = (operation.responses[code] || {}).description || 'No content.' + body.push(indent(pad + 4) + '

' + escapeHtml(note) + '

') + } + if (codes.length > 1) { + out.push( + indent(pad + 2) + + '
' + ) + out.push(...body) + out.push(indent(pad + 2) + '
') + } else { + out.push(...body) + } + } + out.push(indent(pad) + '
') + return out +} + +/** Builds a representative value so every page ships a response example. */ +function sampleValue (schema, trail, depth) { + const resolved = resolve(schema) + if (resolved.allOf || (resolved.properties && Object.keys(resolved.properties).length)) { + const owner = flatten(schema) + if (trail.has(owner.name) || depth > MAX_EXAMPLE_DEPTH) return {} + const next = new Set(trail).add(owner.name) + const out = {} + for (const key of Object.keys(owner.properties).sort()) { + out[key] = sampleValue(owner.properties[key], next, depth + 1) + } + return out + } + if (resolved.type === 'array') { + const item = objectBehind(resolved.items) + if (item && (trail.has(item.name) || depth >= MAX_EXAMPLE_DEPTH)) return [] + return [sampleValue(resolved.items, trail, depth + 1)] + } + if (resolved.enum) return resolved.enum[0] + if (resolved.type === 'boolean') return false + if (resolved.type === 'integer' || resolved.type === 'number') return 0 + if (resolved.format === 'date-time') return '2026-01-01T00:00:00Z' + return 'string' +} + +/** + * Most operations declare the same envelope for success and failure, so the + * schema alone cannot tell the two apart. The sample fills in the fields that + * do differ: an error carries Error true with ErrorDetails and no Result, and a + * success carries neither the flag nor the details. + */ +function asStatus (sample, code) { + if (!sample || typeof sample !== 'object' || Array.isArray(sample)) return sample + const failed = Number(code) >= 400 + const out = { ...sample } + if ('Error' in out) out.Error = failed + if ('ErrorDetails' in out && !failed) out.ErrorDetails = [] + if ('Message' in out) out.Message = failed ? 'string' : '' + if ('Result' in out && failed) delete out.Result + return out +} + +function responseExample (operation, code, slug) { + const curated = (examples[slug] || {})[code] + if (curated) return curated + const schema = (operation.responses[code] || {}).schema + if (!schema) return escapeHtml((operation.responses[code] || {}).description || 'No content') + const sample = asStatus(sampleValue(schema, new Set(), 0), code) + return escapeHtml(JSON.stringify(sample, null, 2)) +} + +function requestBodyJson (parameters) { + const parameter = parameters.find((candidate) => candidate.in === 'body') + if (!parameter) return null + return JSON.stringify(sampleValue(parameter.schema, new Set(), MAX_EXAMPLE_DEPTH - 1), null, 2) +} + +function reindent (value, pad) { + return value.split('\n').join('\n' + ' '.repeat(pad)) +} + +function requestSample (language, method, url, body) { + const key = '' + const verb = method.toUpperCase() + switch (language) { + case 'curl': + return [ + 'curl --request ' + verb + ' \\', + " --url '" + url + "' \\", + " --header 'x-api-key: " + key + "'" + (body ? ' \\' : ''), + ...(body ? [" --header 'Content-Type: application/json' \\", " --data '" + reindent(body, 2) + "'"] : []), + ].join('\n') + case 'python': + return [ + 'import requests', + '', + 'url = "' + url + '"', + 'headers = {"x-api-key": "' + key + '"}', + ...(body ? ['payload = ' + body.replace(/\btrue\b/g, 'True').replace(/\bfalse\b/g, 'False'), ''] : []), + 'response = requests.' + method.toLowerCase() + '(url, headers=headers' + (body ? ', json=payload' : '') + ')', + 'print(response.json())', + ].join('\n') + case 'javascript': + return [ + 'const response = await fetch(', + ' "' + url + '",', + ' {', + ' method: "' + verb + '",', + ' headers: { "x-api-key": "' + key + '"' + (body ? ', "Content-Type": "application/json"' : '') + ' },', + ...(body ? [' body: JSON.stringify(' + reindent(body, 4) + '),'] : []), + ' }', + ')', + 'console.log(await response.json())', + ].join('\n') + case 'php': + return [ + '') + out.push(indent(pad + 2) + '
') + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 6) + '' + escapeHtml(endpoint.label) + '') + out.push(indent(pad + 6) + '
') + out.push(indent(pad + 8) + '
') + out.push( + indent(pad + 10) + + '') + out.push(indent(pad + 10) + '') + out.push(indent(pad + 8) + '
') + out.push( + indent(pad + 8) + + '') + out.push(indent(pad + 6) + '
') + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 4) + '
') + for (const [id, , highlight] of LANGUAGES) { + out.push( + indent(pad + 6) + '
' +
+        escapeHtml(requestSample(id, endpoint.method, url, body)) + '
' + ) + } + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 2) + '
') + + out.push(indent(pad + 2) + '
') + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 6) + '
') + for (const code of codes) { + out.push( + indent(pad + 8) + '' + ) + } + out.push(indent(pad + 6) + '
') + out.push(indent(pad + 6) + '
') + out.push( + indent(pad + 6) + + ' ') + out.push(indent(pad + 6) + '
') + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 4) + '
') + for (const code of codes) { + out.push( + indent(pad + 6) + '
' +
+        responseExample(operation, code, endpoint.slug) + '
' + ) + } + out.push(indent(pad + 4) + '
') + out.push(indent(pad + 2) + '
') + out.push(indent(pad) + '') + return out +} + +function operationFor (endpoint) { + const operation = (spec.paths[endpoint.path] || {})[endpoint.method.toLowerCase()] + if (!operation) throw new Error('no spec entry for ' + endpoint.method + ' ' + endpoint.path) + return operation +} + +function renderApiPage (endpoint) { + const operation = operationFor(endpoint) + const parameters = operation.parameters || [] + const intro = lead(endpoint, operation) + const out = [] + + out.push('
') + if (intro) out.push('

' + escapeHtml(intro.replace(/\.?$/, '.')) + '

') + out.push('') + out.push('
') + out.push('
') + out.push('
') + out.push('
') + out.push( + ' ' + endpoint.method + '' + ) + out.push(' ' + escapeHtml(endpoint.path) + '') + out.push( + '
\n' + + ' ' + ) + out.push('
') + out.push('') + out.push(...renderAuthorizations(operation, 6)) + out.push(...renderParameterSection(parameters, 'path', 'Path parameters', 6)) + out.push(...renderParameterSection(parameters, 'query', 'Query parameters', 6)) + out.push(...renderParameterSection(parameters, 'header', 'Header parameters', 6)) + out.push(...renderBodySection(parameters, 6)) + out.push(...renderResponseSection(operation, 6)) + out.push('
') + out.push('') + out.push(...renderExamples(endpoint, operation, 4)) + out.push('
') + out.push('
') + return out.join('\n') +} + +module.exports = { renderApiPage } diff --git a/modules/savanna/modules/rest-api/_catalog/openapi.json b/modules/savanna/modules/rest-api/_catalog/openapi.json new file mode 100644 index 00000000..d69881ce --- /dev/null +++ b/modules/savanna/modules/rest-api/_catalog/openapi.json @@ -0,0 +1,6461 @@ +{ + "basePath": "/controller/v4/v2", + "definitions": { + "APIKey": { + "properties": { + "created_at": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "description": { + "type": "string" + }, + "expires_at": { + "type": "string" + }, + "key_name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "plaintext_key": { + "type": "string" + }, + "redacted_key": { + "type": "string" + }, + "user_id": { + "type": "string" + } + }, + "type": "object" + }, + "AddOnPricing": { + "properties": { + "platform": { + "type": "string" + }, + "price_per_hour": { + "type": "number" + }, + "region": { + "type": "string" + }, + "type": { + "type": "string" + }, + "workspace_type": { + "type": "string" + } + }, + "type": "object" + }, + "AgentConfig": { + "properties": { + "catalog_activity_update_interval_seconds": { + "type": "integer" + }, + "enable_topology_force_update": { + "type": "boolean" + }, + "heartbeat_interval_seconds": { + "type": "integer" + }, + "query_activity_update_interval_seconds": { + "type": "integer" + }, + "topology_update_interval_seconds": { + "type": "integer" + } + }, + "type": "object" + }, + "AllowedIP": { + "properties": { + "cidr": { + "type": "string" + }, + "id": { + "type": "string" + }, + "note": { + "type": "string" + } + }, + "required": [ + "cidr" + ], + "type": "object" + }, + "Backup": { + "properties": { + "id": { + "type": "string" + }, + "is_automatic": { + "type": "boolean" + }, + "size_bytes": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "time": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "BackupRestoreStatus": { + "properties": { + "created_at": { + "type": "string" + }, + "name": { + "type": "string" + }, + "output": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" + }, + "BackupSchedule": { + "properties": { + "max_backup_files": { + "type": "integer" + }, + "max_reserved_days": { + "type": "integer" + }, + "max_retry": { + "type": "integer" + }, + "pause": { + "type": "boolean" + }, + "schedule": { + "type": "string" + } + }, + "required": [ + "schedule" + ], + "type": "object" + }, + "CloudProviderOptions": { + "properties": { + "account_id": { + "type": "string" + }, + "secure_connection": { + "type": "boolean" + } + }, + "type": "object" + }, + "CloudProviderResource": { + "properties": { + "api_tokens": { + "items": { + "type": "string" + }, + "type": "array" + }, + "availability_zones": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cluster_enabled_log_types": { + "items": { + "$ref": "#/definitions/constants.ClusterLogType" + }, + "type": "array" + }, + "component_versions": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "created_by": { + "type": "string" + }, + "eks_id": { + "type": "string" + }, + "endpoint_service_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "last_error": { + "type": "string" + }, + "name": { + "type": "string" + }, + "node_group_config": { + "$ref": "#/definitions/aws.NodeGroupConfig" + }, + "options": { + "$ref": "#/definitions/CloudProviderOptions" + }, + "org_id": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "role_external_id": { + "type": "string" + }, + "security_group_id": { + "type": "string" + }, + "short_id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subnet_id": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "updated_at": { + "type": "string" + }, + "version": { + "type": "string" + }, + "version_number": { + "type": "integer" + }, + "vpc_id": { + "type": "string" + }, + "vpc_owned_by_tg": { + "type": "boolean" + }, + "work_dir": { + "type": "string" + } + }, + "type": "object" + }, + "CreateAPIKeyRequest": { + "properties": { + "description": { + "type": "string" + }, + "life_time_in_seconds": { + "type": "integer" + } + }, + "type": "object" + }, + "CreateCloudProviderResourceRequest": { + "properties": { + "created_by": { + "type": "string" + }, + "name": { + "type": "string" + }, + "options": { + "$ref": "#/definitions/CloudProviderOptions" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "role_external_id": { + "type": "string" + }, + "type": { + "description": "Type is used by two sets of API and will be set to 'private' when called by the Admin API\nand 'public' when called by the public cloud provider creation API.", + "type": "string" + } + }, + "type": "object" + }, + "CreateConfigRequest": { + "properties": { + "config_name": { + "type": "string" + }, + "config_value": { + "type": "string" + } + }, + "required": [ + "config_name", + "config_value" + ], + "type": "object" + }, + "CreateWorkgroupRequest": { + "properties": { + "cloud_provider_id": { + "type": "string" + }, + "enable_application_log": { + "type": "boolean" + }, + "enable_encryption": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "platform": { + "$ref": "#/definitions/Platform" + }, + "region": { + "type": "string" + }, + "shared_storage": { + "type": "boolean" + } + }, + "required": [ + "cloud_provider_id" + ], + "type": "object" + }, + "CreateWorkspaceRequest": { + "description": "Create Workspace Request", + "properties": { + "addons": { + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + }, + "type": "array" + }, + "auto_stop_minutes": { + "type": "integer" + }, + "enable_auto_start": { + "type": "boolean" + }, + "enable_ha": { + "type": "boolean" + }, + "is_rw": { + "type": "boolean" + }, + "maintenance_window_day_of_week": { + "type": "integer" + }, + "maintenance_window_hour_of_day": { + "type": "integer" + }, + "maintenance_window_interval_weeks": { + "type": "integer" + }, + "maintenance_window_time_zone": { + "type": "string" + }, + "name": { + "type": "string" + }, + "solution_install_request": { + "$ref": "#/definitions/SolutionInstallRequest" + }, + "tg_database_id": { + "type": "string" + }, + "tg_version": { + "type": "string" + }, + "update_strategy": { + "type": "string" + }, + "workspace_type_name": { + "description": "Workspace Type Name TG-0/TG-2", + "type": "string" + }, + "x_test_env": { + "type": "string" + } + }, + "type": "object" + }, + "CustomerCreditCard": { + "properties": { + "brand": { + "type": "string" + }, + "card_id": { + "type": "string" + }, + "expire_month": { + "type": "integer" + }, + "expire_year": { + "type": "integer" + }, + "last_4_digits": { + "type": "string" + }, + "name_on_card": { + "type": "string" + }, + "org_id": { + "type": "string" + } + }, + "type": "object" + }, + "CustomerResponse": { + "properties": { + "address": { + "$ref": "#/definitions/UpdateAddressRequest" + }, + "customer_email": { + "type": "string" + }, + "customer_id": { + "type": "string" + }, + "customer_name": { + "type": "string" + } + }, + "type": "object" + }, + "DataStoragePricing": { + "properties": { + "platform": { + "type": "string" + }, + "price_per_month": { + "type": "number" + }, + "region": { + "type": "string" + } + }, + "type": "object" + }, + "DeleteAPIKeyRequest": { + "properties": { + "key_name": { + "type": "string" + } + }, + "type": "object" + }, + "DeleteBackupRequest": { + "properties": { + "backup_id": { + "type": "string" + } + }, + "required": [ + "backup_id" + ], + "type": "object" + }, + "Error": { + "properties": { + "FieldName": { + "type": "string" + }, + "Reason": { + "type": "string" + }, + "Type": { + "$ref": "#/definitions/ErrorType" + } + }, + "type": "object" + }, + "ErrorType": { + "enum": [ + "Internal-Error", + "Bad-Request", + "Not-Found", + "Forbidden", + "Unauthorized", + "API-Disabled", + "Quota-Exceed", + "Unknown" + ], + "type": "string", + "x-enum-varnames": [ + "ErrInternal", + "ErrBadRequest", + "ErrNotFound", + "ErrForbidden", + "ErrUnauthorized", + "ErrAPIDisabled", + "ErrQuotaExceed", + "ErrUnknown" + ] + }, + "FeatureFlag": { + "properties": { + "enabled": { + "type": "boolean" + }, + "feature_name": { + "type": "string" + } + }, + "type": "object" + }, + "FolderStatistics": { + "properties": { + "backup_size": { + "type": "integer" + }, + "billed_size": { + "type": "integer" + }, + "log_size": { + "type": "integer" + }, + "milvus_size": { + "type": "integer" + }, + "total_size": { + "type": "integer" + }, + "workspaces": { + "items": { + "$ref": "#/definitions/WorkspaceSize" + }, + "type": "array" + } + }, + "type": "object" + }, + "GetCustomerCreditCardsResponse": { + "properties": { + "credit_cards": { + "items": { + "$ref": "#/definitions/CustomerCreditCard" + }, + "type": "array" + }, + "default_card": { + "type": "string" + } + }, + "type": "object" + }, + "IAMUser": { + "properties": { + "auth0UserID": { + "type": "string" + }, + "created": { + "type": "string" + }, + "description": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "firstName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/tgIAM.Metadata" + }, + "path": { + "type": "string" + }, + "role": { + "type": "string" + }, + "tenantID": { + "type": "string" + }, + "trn": { + "type": "string" + }, + "updated": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "InDatabaseUserRequest": { + "properties": { + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "OrgListUserResponse": { + "properties": { + "auth0UserID": { + "type": "string" + }, + "authID": { + "type": "string" + }, + "created": { + "type": "string" + }, + "email": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "firstName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/OrgMetadata" + }, + "path": { + "type": "string" + }, + "roles": { + "items": { + "$ref": "#/definitions/OrgRole" + }, + "type": "array" + }, + "tenantID": { + "type": "string" + }, + "trn": { + "type": "string" + }, + "updated": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "OrgMetadata": { + "properties": { + "attachedTo": { + "items": { + "type": "string" + }, + "type": "array" + }, + "lastLogin": { + "type": "string" + } + }, + "type": "object" + }, + "OrgQuota": { + "properties": { + "max_workspace_memory": { + "type": "string" + }, + "max_workspace_type": { + "type": "string" + }, + "memory_limit": { + "type": "string" + }, + "memory_usage_in_bytes": { + "type": "integer" + }, + "org_id": { + "type": "string" + }, + "ro_workspace_count_limit": { + "type": "integer" + }, + "ro_workspace_count_usage": { + "type": "integer" + }, + "rw_workspace_count_limit": { + "type": "integer" + }, + "rw_workspace_count_usage": { + "type": "integer" + }, + "tier": { + "type": "string" + }, + "workspace_auto_backup_count_limit": { + "type": "integer" + }, + "workspace_auto_backup_retention_in_days": { + "type": "integer" + }, + "workspace_manual_backup_count_limit": { + "type": "integer" + } + }, + "type": "object" + }, + "OrgRequest": { + "properties": { + "logoUrl": { + "type": "string" + }, + "orgDisplayName": { + "type": "string" + }, + "orgID": { + "type": "string" + }, + "orgName": { + "type": "string" + } + }, + "type": "object" + }, + "OrgRole": { + "properties": { + "displayName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "tenantID": { + "type": "string" + }, + "trn": { + "type": "string" + } + }, + "type": "object" + }, + "Organization": { + "properties": { + "create_time": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "delinquent_since": { + "type": "string" + }, + "feature_flag": { + "items": { + "$ref": "#/definitions/FeatureFlag" + }, + "type": "array" + }, + "logo_url": { + "type": "string" + }, + "org_display_name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + } + }, + "type": "object" + }, + "Platform": { + "enum": [ + "aws", + "azure", + "gcp" + ], + "type": "string", + "x-enum-varnames": [ + "PlatformAWS", + "PlatformAzure", + "PlatformGCP" + ] + }, + "PublicCloudProviderResource": { + "properties": { + "component_versions": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "status": { + "type": "string" + }, + "version": { + "type": "string" + }, + "version_number": { + "type": "integer" + } + }, + "type": "object" + }, + "PutOrgUsersRoles": { + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "Region": { + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "RequestAddonRequest": { + "properties": { + "addon_name": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" + }, + "ResourcePricing": { + "properties": { + "addon_pricing": { + "items": { + "$ref": "#/definitions/AddOnPricing" + }, + "type": "array" + }, + "data_storage_pricing": { + "items": { + "$ref": "#/definitions/DataStoragePricing" + }, + "type": "array" + }, + "workspace_pricing": { + "items": { + "$ref": "#/definitions/WorkspacePricing" + }, + "type": "array" + } + }, + "type": "object" + }, + "Response": { + "properties": { + "Error": { + "type": "boolean" + }, + "ErrorDetails": { + "items": { + "$ref": "#/definitions/Error" + }, + "type": "array" + }, + "Message": { + "type": "string" + }, + "RequestID": { + "type": "string" + }, + "Result": { + "type": "object" + } + }, + "type": "object" + }, + "RestoreBackupRequest": { + "properties": { + "backup_id": { + "type": "string" + } + }, + "required": [ + "backup_id" + ], + "type": "object" + }, + "ServerMCPChatRequest": { + "properties": { + "authorization": { + "type": "string" + }, + "debug": { + "type": "boolean" + }, + "message": {}, + "thread_id": { + "type": "string" + }, + "type": { + "type": "string" + }, + "workspace_id": { + "type": "string" + } + }, + "type": "object" + }, + "SolutionInstallRequest": { + "properties": { + "addons": { + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + }, + "type": "array" + }, + "data_source_origin": { + "type": "string" + }, + "name": { + "type": "string" + }, + "solution_catalog_id": { + "type": "string" + } + }, + "type": "object" + }, + "TGDatabase": { + "properties": { + "create_time": { + "type": "string" + }, + "database_id": { + "type": "string" + }, + "folder_statistics": { + "$ref": "#/definitions/FolderStatistics" + }, + "name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + }, + "region": { + "type": "string" + }, + "tg_version": { + "type": "string" + }, + "workgroup_id": { + "type": "string" + }, + "workspaces": { + "items": { + "$ref": "#/definitions/Workspace" + }, + "type": "array" + } + }, + "type": "object" + }, + "TGVersion": { + "properties": { + "allow_create": { + "type": "boolean" + }, + "allow_upgrade": { + "type": "boolean" + }, + "channel": { + "type": "string" + }, + "end_of_life": { + "type": "string" + }, + "image": { + "type": "string" + }, + "incompatible_upgrades_from": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "orgs": { + "description": "For customized versions", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "UpdateAddressRequest": { + "properties": { + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "line1": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "UpdateCloudProviderResourceRequest": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "UpdateConfigRequest": { + "properties": { + "config_value": { + "type": "string" + } + }, + "required": [ + "config_value" + ], + "type": "object" + }, + "UpdateTGDatabaseRequest": { + "properties": { + "tg_database_name": { + "type": "string" + } + }, + "required": [ + "tg_database_name" + ], + "type": "object" + }, + "UpdateWorkgroupRequest": { + "properties": { + "enable_application_log": { + "type": "boolean" + }, + "encryption_method": { + "$ref": "#/definitions/data.EncryptionMethod" + }, + "workgroup_name": { + "type": "string" + } + }, + "type": "object" + }, + "UpdateWorkspaceRequest": { + "properties": { + "addons": { + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + }, + "type": "array" + }, + "agent_config": { + "$ref": "#/definitions/AgentConfig" + }, + "auto_stop_minutes": { + "minimum": 0, + "type": "integer" + }, + "auto_upgrade_state": { + "type": "string" + }, + "desired_tg_version": { + "type": "string" + }, + "enable_auto_start": { + "type": "boolean" + }, + "enable_ha": { + "type": "boolean" + }, + "maintenance_window_day_of_week": { + "type": "integer" + }, + "maintenance_window_hour_of_day": { + "type": "integer" + }, + "maintenance_window_interval_weeks": { + "type": "integer" + }, + "maintenance_window_time_zone": { + "type": "string" + }, + "pause": { + "type": "boolean" + }, + "update_strategy": { + "type": "string" + }, + "workspace_name": { + "type": "string" + }, + "workspace_type_name": { + "type": "string" + } + }, + "type": "object" + }, + "UpgradeCloudProviderComponent": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "UpgradeCloudProviderResourceRequest": { + "properties": { + "cluster_enabled_log_types": { + "items": { + "$ref": "#/definitions/constants.ClusterLogType" + }, + "type": "array" + }, + "components": { + "items": { + "$ref": "#/definitions/UpgradeCloudProviderComponent" + }, + "type": "array" + }, + "node_group_config": { + "$ref": "#/definitions/aws.NodeGroupConfig" + } + }, + "type": "object" + }, + "UpgradeWorkspaceRequest": { + "description": "Upgrade Workspace Request", + "properties": { + "desired_version": { + "type": "string" + }, + "scheduled": { + "type": "boolean" + } + }, + "type": "object" + }, + "ValidateCloudProviderRequest": { + "properties": { + "account_id": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "region": { + "type": "string" + }, + "role_arn": { + "type": "string" + }, + "role_external_id": { + "type": "string" + }, + "secure_connection": { + "type": "boolean" + } + }, + "required": [ + "platform", + "region", + "role_arn" + ], + "type": "object" + }, + "Workgroup": { + "properties": { + "cloud_provider_id": { + "type": "string" + }, + "cloud_provider_name": { + "type": "string" + }, + "cloud_provider_status": { + "type": "string" + }, + "cloud_provider_type": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "enable_allow_list": { + "type": "boolean" + }, + "enable_application_log": { + "type": "boolean" + }, + "encryption_method": { + "$ref": "#/definitions/data.EncryptionMethod" + }, + "is_current_ip_allowed": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + }, + "platform": { + "$ref": "#/definitions/Platform" + }, + "region": { + "type": "string" + }, + "shared_storage": { + "type": "boolean" + }, + "tg_databases": { + "items": { + "$ref": "#/definitions/TGDatabase" + }, + "type": "array" + }, + "workgroup_id": { + "type": "string" + }, + "workspaces": { + "items": { + "$ref": "#/definitions/Workspace" + }, + "type": "array" + } + }, + "type": "object" + }, + "Workspace": { + "properties": { + "addons": { + "items": { + "$ref": "#/definitions/WorkspaceAddonsRequest" + }, + "type": "array" + }, + "agent_config": { + "$ref": "#/definitions/AgentConfig" + }, + "auto_stop_minutes": { + "type": "integer" + }, + "auto_upgrade_state": { + "type": "string" + }, + "cloud_provider_id": { + "type": "string" + }, + "cloud_provider_name": { + "type": "string" + }, + "cloud_provider_short_id": { + "type": "string" + }, + "condition_type": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "creator": { + "type": "string" + }, + "database_id": { + "type": "string" + }, + "database_name": { + "type": "string" + }, + "deleted_at": { + "type": "string" + }, + "desired_tg_version": { + "type": "string" + }, + "display_status": { + "type": "string" + }, + "edge_count": { + "type": "integer" + }, + "enable_auto_start": { + "type": "boolean" + }, + "enable_copilot": { + "type": "boolean" + }, + "enable_ha": { + "type": "boolean" + }, + "err_message": { + "type": "string" + }, + "folder_statistics": { + "$ref": "#/definitions/FolderStatistics" + }, + "graph_topology_size_bytes": { + "type": "integer" + }, + "is_rw": { + "type": "boolean" + }, + "last_maintenance": { + "type": "string" + }, + "last_modified_time": { + "type": "string" + }, + "maintenance_window_day_of_week": { + "type": "integer" + }, + "maintenance_window_hour_of_day": { + "type": "integer" + }, + "maintenance_window_interval_weeks": { + "type": "integer" + }, + "maintenance_window_time_zone": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nginx_host": { + "type": "string" + }, + "org_id": { + "type": "string" + }, + "org_name": { + "type": "string" + }, + "refresh_message": { + "type": "string" + }, + "refresh_status": { + "type": "string" + }, + "region": { + "type": "string" + }, + "replicas": { + "type": "integer" + }, + "snapshot_time": { + "type": "string" + }, + "solution_catalog_id": { + "type": "string" + }, + "status": { + "type": "string" + }, + "tg_version": { + "type": "string" + }, + "update_strategy": { + "type": "string" + }, + "version_number": { + "type": "integer" + }, + "vertex_count": { + "type": "integer" + }, + "workgroup_id": { + "type": "string" + }, + "workgroup_name": { + "type": "string" + }, + "workspace_id": { + "type": "string" + }, + "workspace_type": { + "$ref": "#/definitions/WorkspaceType" + } + }, + "type": "object" + }, + "WorkspaceAddonsRequest": { + "properties": { + "addons_id": { + "type": "string" + }, + "enable": { + "type": "boolean" + }, + "enable_configuration": { + "additionalProperties": true, + "type": "object" + }, + "is_free": { + "type": "boolean" + }, + "unique_name": { + "type": "string" + }, + "workspace_id": { + "type": "string" + } + }, + "required": [ + "addons_id", + "enable" + ], + "type": "object" + }, + "WorkspaceMetadata": { + "properties": { + "regions": { + "items": { + "$ref": "#/definitions/Region" + }, + "type": "array" + }, + "tgVersions": { + "items": { + "$ref": "#/definitions/TGVersion" + }, + "type": "array" + }, + "workspaceTypes": { + "items": { + "$ref": "#/definitions/WorkspaceType" + }, + "type": "array" + } + }, + "type": "object" + }, + "WorkspacePricing": { + "properties": { + "cloud_provider": { + "type": "string" + }, + "ha": { + "type": "string" + }, + "platform": { + "type": "string" + }, + "price_per_hour": { + "type": "number" + }, + "region": { + "type": "string" + }, + "workspace_type": { + "type": "string" + } + }, + "type": "object" + }, + "WorkspaceSchedule": { + "properties": { + "date": { + "type": "string" + }, + "id": { + "type": "string" + }, + "repeat": { + "type": "string" + }, + "repeat_on": { + "type": "string" + }, + "time": { + "type": "string" + }, + "timezone": { + "type": "string" + }, + "workspace_id": { + "type": "string" + }, + "workspace_type_name": { + "type": "string" + } + }, + "required": [ + "repeat", + "time", + "timezone", + "workspace_id" + ], + "type": "object" + }, + "WorkspaceSize": { + "properties": { + "size": { + "type": "integer" + }, + "workspace_id": { + "type": "string" + } + }, + "type": "object" + }, + "WorkspaceType": { + "properties": { + "cpu": { + "type": "string" + }, + "ha": { + "type": "integer" + }, + "memory": { + "type": "string" + }, + "partition": { + "type": "integer" + }, + "typeName": { + "type": "string" + } + }, + "type": "object" + }, + "aws.NodeGroup": { + "properties": { + "max_size": { + "type": "integer" + }, + "min_size": { + "type": "integer" + }, + "overprovisioning_factor": { + "type": "integer" + } + }, + "type": "object" + }, + "aws.NodeGroupConfig": { + "properties": { + "ng_16": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_32": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_48": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_64": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "ng_system": { + "$ref": "#/definitions/aws.NodeGroup" + }, + "prefetch_image_list": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "constants.ClusterLogType": { + "enum": [ + "api", + "audit", + "authenticator", + "controllerManager", + "scheduler" + ], + "type": "string", + "x-enum-varnames": [ + "ClusterLogTypeAPIServer", + "ClusterLogTypeAudit", + "ClusterLogTypeAuthenticator", + "ClusterLogTypeControllerManager", + "ClusterLogTypeScheduler" + ] + }, + "data.EncryptionMethod": { + "enum": [ + "TMK" + ], + "type": "string", + "x-enum-varnames": [ + "TigerGraphManagedKey" + ] + }, + "observability.MetricValue": { + "description": "Workspace metric value", + "properties": { + "avgValue": { + "description": "Avg value", + "type": "number" + } + }, + "type": "object" + }, + "observability.WorkgroupMetric": { + "description": "Metrics for workspaces in a workgroup", + "properties": { + "workgroupID": { + "description": "Workgroup ID", + "type": "string" + }, + "workspaceMetrics": { + "description": "Workspace metrics", + "items": { + "$ref": "#/definitions/observability.WorkspaceMetric" + }, + "type": "array" + } + }, + "type": "object" + }, + "observability.WorkspaceMetric": { + "description": "Workspace metric", + "properties": { + "metrics": { + "additionalProperties": { + "$ref": "#/definitions/observability.MetricValue" + }, + "description": "Workspace metric map, key is metric name,\nvalue is the certain value for the metric name in the key", + "type": "object" + }, + "workspaceID": { + "description": "Workspace ID", + "type": "string" + } + }, + "type": "object" + }, + "tgIAM.Metadata": { + "additionalProperties": true, + "type": "object" + } + }, + "host": "api.tgcloud.io", + "info": { + "contact": {}, + "description": "This is a sample TigerGraph Savanna controller server api.", + "title": "TigerGraph Savanna Controller API", + "version": "2.0" + }, + "paths": { + "/cloud-providers/all": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List all cloud provider", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/CloudProviderResource" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List all cloud provider for admin", + "tags": [ + "CloudProvider" + ] + } + }, + "/controller/v4/v2/add-ons/{installedAddonsID}/configs": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Create a new configuration for a specific installed add-on.", + "parameters": [ + { + "description": "Installed Add-on ID", + "in": "path", + "name": "installedAddonsID", + "required": true, + "type": "string" + }, + { + "description": "Create Configuration Request", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/CreateConfigRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad creation input.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to create configuration.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create Add-on Configuration", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete a specific configuration for an add-on.", + "parameters": [ + { + "description": "Installed Add-on ID", + "in": "path", + "name": "installedAddonsID", + "required": true, + "type": "string" + }, + { + "description": "Configuration ID", + "in": "path", + "name": "configID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "boolean" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad delete input.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to delete configuration.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete Add-on Configuration", + "tags": [ + "Add-ons" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update an existing configuration for an add-on.", + "parameters": [ + { + "description": "Installed Add-on ID", + "in": "path", + "name": "installedAddonsID", + "required": true, + "type": "string" + }, + { + "description": "Configuration ID", + "in": "path", + "name": "configID", + "required": true, + "type": "string" + }, + { + "description": "Update Configuration Request", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateConfigRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad update input.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to update configuration.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update Add-on Configuration", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/addons/meta": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get metadata for add-ons.", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get add-ons meta", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/addons/request": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Request an add-on by providing the addon name and a message.", + "parameters": [ + { + "description": "Request body", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/RequestAddonRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully request addon.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Invalid request body.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to request addon.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Request an add-on", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/addons/{addonsID}/install": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Installs an add-on by ID.", + "parameters": [ + { + "description": "Add-on ID", + "in": "path", + "name": "addonsID", + "required": true, + "type": "string" + }, + { + "description": "Enable or disable add-on", + "in": "query", + "name": "enable", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Installs an add-on", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/addons/{addonsID}/workspaces": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Retrieves a list of workspaces associated with a specific addons ID.", + "parameters": [ + { + "description": "Addons ID", + "in": "path", + "name": "addonsID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/Workspace" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Workspaces by add-ons ID", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/billing/credit": { + "get": { + "description": "Fetches the total credits available for the specified organization.", + "parameters": [ + { + "description": "Bearer token", + "in": "header", + "name": "Authorization", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "number" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to retrieve credits", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve organization credits", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/credit-cards": { + "get": { + "description": "Retrieves the Amberlfo customer information based on the organization ID.", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully retrieved customer.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/CustomerResponse" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Unable to retrieve customer.", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Customer Information", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/credit-cards/{cardID}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Deletes a customer's credit card by card ID.", + "parameters": [ + { + "description": "Card ID", + "in": "path", + "name": "cardID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully deleted customer's card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "CardID is not provided.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Unable to delete customer's card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete a customer's credit card", + "tags": [ + "Billing" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Updates the default credit card for a customer based on the provided card ID.", + "parameters": [ + { + "description": "Card ID", + "in": "path", + "name": "cardID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully updated customer's default card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "CardID is not provided.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Unable to update customer's default card.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update Customer Default Card", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/payment/invoice": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Send invoice for payment", + "parameters": [ + { + "description": "Year of the invoice", + "in": "query", + "name": "year", + "required": true, + "type": "integer" + }, + { + "description": "Month of the invoice", + "in": "query", + "name": "month", + "required": true, + "type": "integer" + }, + { + "description": "Day of the invoice", + "in": "query", + "name": "day", + "required": true, + "type": "integer" + }, + { + "description": "Product Plan ID used when the invoice was generated", + "in": "query", + "name": "productPlanId", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully paid invoice.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "boolean" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to pay invoice.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Pay invoice", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/resource-pricing": { + "get": { + "description": "Retrieve the pricing information for resources", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/ResourcePricing" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get resource pricing", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/session": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Creates a new session for the billing manager using the provided organization ID.", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully retrieved session.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to retrieve session.", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create a new session", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/status": { + "get": { + "description": "Retrieves the marketplace status of each platform and currently active payment method for an organization.", + "parameters": [ + { + "description": "Bearer token", + "in": "header", + "name": "Authorization", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "number" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to retrieve billing status", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve organization's marketplace status and currently active payment method", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/billing/validation": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Validates if the payment can be processed for the organization", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successful payment validation check", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "boolean" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Validate payment", + "tags": [ + "Billing" + ] + } + }, + "/controller/v4/v2/cloud-providers": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List all cloud provider belonging to the org", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/CloudProviderResource" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List all cloud provider belonging to the org", + "tags": [ + "CloudProvider" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Create a new cloud provider", + "parameters": [ + { + "description": "Create Cloud Provider Resource Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CreateCloudProviderResourceRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/CloudProviderResource" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create a new cloud provider", + "tags": [ + "CloudProvider" + ] + } + }, + "/controller/v4/v2/cloud-providers/public": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List of public cloud providers", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/PublicCloudProviderResource" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List of public cloud providers", + "tags": [ + "CloudProvider" + ] + } + }, + "/controller/v4/v2/cloud-providers/validate": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Validate the cloud provider request", + "parameters": [ + { + "description": "Validate Cloud Provider Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/ValidateCloudProviderRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully validated Cloud Provider", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Validate the cloud provider request", + "tags": [ + "CloudProvider" + ] + } + }, + "/controller/v4/v2/cloud-providers/{cloudProviderID}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete a cloud provider", + "parameters": [ + { + "description": "Cloud Provider ID", + "in": "path", + "name": "cloudProviderID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete a cloud provider", + "tags": [ + "CloudProvider" + ] + }, + "get": { + "consumes": [ + "application/json" + ], + "description": "Get a cloud provider by ID", + "parameters": [ + { + "description": "Cloud Provider ID", + "in": "path", + "name": "cloudProviderID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/CloudProviderResource" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get a cloud provider by ID", + "tags": [ + "CloudProvider" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update a cloud provider", + "parameters": [ + { + "description": "Cloud Provider ID", + "in": "path", + "name": "cloudProviderID", + "required": true, + "type": "string" + }, + { + "description": "Update Cloud Provider Resource Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateCloudProviderResourceRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/CloudProviderResource" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update a cloud provider", + "tags": [ + "CloudProvider" + ] + } + }, + "/controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade": { + "put": { + "consumes": [ + "application/json" + ], + "description": "Upgrade a cloud provider", + "parameters": [ + { + "description": "Cloud Provider ID", + "in": "path", + "name": "cloudProviderID", + "required": true, + "type": "string" + }, + { + "description": "Upgrade Cloud Provider Resource Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/UpgradeCloudProviderResourceRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Upgrade a cloud provider", + "tags": [ + "CloudProvider" + ] + } + }, + "/controller/v4/v2/installed-addons": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List all installed add-ons for the organization.", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List all installed add-ons", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/installed-addons/{installedAddonsID}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get details of an installed add-on by its ID.", + "parameters": [ + { + "description": "Installed Add-on ID", + "in": "path", + "name": "installedAddonsID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get installed add-on by ID", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List configurations for a specific installed add-on.", + "parameters": [ + { + "description": "Installed Add-on ID", + "in": "path", + "name": "installedAddonsID", + "required": true, + "type": "string" + }, + { + "description": "Configuration Name", + "in": "path", + "name": "configName", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Failed to parse addons_id.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Failed to get internal addons configurations.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "object" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Add-on Configurations", + "tags": [ + "Add-ons" + ] + } + }, + "/controller/v4/v2/org": { + "put": { + "consumes": [ + "application/json" + ], + "description": "Update organization details such as name, display name, and logo URL", + "parameters": [ + { + "description": "Organization request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/OrgRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully updated the org.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update organization details", + "tags": [ + "Org" + ] + } + }, + "/controller/v4/v2/org/api-keys": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete an external organization API key by its name.", + "parameters": [ + { + "description": "Delete API Key Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteAPIKeyRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully deleted the external org API key.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "summary": "Delete External Org API Key", + "tags": [ + "APIKey" + ] + }, + "get": { + "description": "List all external organization API keys.", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully listed the external org API keys.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/APIKey" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "summary": "List External Org API Keys", + "tags": [ + "APIKey" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Create a new external organization API key with an optional lifetime.", + "parameters": [ + { + "description": "Create API Key Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CreateAPIKeyRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully created the external org API key.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/APIKey" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "summary": "Create External Org API Key", + "tags": [ + "APIKey" + ] + } + }, + "/controller/v4/v2/org/quota": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get the quota details for a specific organization by its ID", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully get org quota", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/OrgQuota" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve organization quota", + "tags": [ + "Org" + ] + } + }, + "/controller/v4/v2/org/self": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List of orgs that the user has access to", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Organization" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List of orgs that the user has access to", + "tags": [ + "Org" + ] + } + }, + "/controller/v4/v2/pooled-workgroups/acquire": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Acquire pooled workgroup in your org", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Acquire pooled workgroup in your org", + "tags": [ + "Workgroup" + ] + } + }, + "/controller/v4/v2/workgroups": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get workgroups for your org", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/Workgroup" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get workgroups for your org", + "tags": [ + "Workgroup" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Create workgroups in your org", + "parameters": [ + { + "description": "Create workgroup request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWorkgroupRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create workgroups in your org", + "tags": [ + "Workgroup" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Get workgroup detail in your org", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "delete workgroup detail in your org", + "tags": [ + "Workgroup" + ] + }, + "get": { + "consumes": [ + "application/json" + ], + "description": "Get workgroup detail in your org", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get workgroup detail in your org", + "tags": [ + "Workgroup" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update workgroups in your org", + "parameters": [ + { + "description": "Update workgroup request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateWorkgroupRequest" + } + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workgroup" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update workgroups in your org", + "tags": [ + "Workgroup" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List all allowed IPs in the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/AllowedIP" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List Allowed IPs", + "tags": [ + "AllowedIP" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Add a new allowed IP to the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Allowed IP request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/AllowedIP" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/AllowedIP" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Add Allowed IP", + "tags": [ + "AllowedIP" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/current": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get the current IP and check if it is allowed in the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "properties": { + " IsAllowed": { + "type": "boolean" + }, + "CurrentIP": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get Current IP", + "tags": [ + "AllowedIP" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/disable": { + "put": { + "consumes": [ + "application/json" + ], + "description": "Disable the allow list for the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Disable Allow List", + "tags": [ + "AllowedIP" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/enable": { + "put": { + "consumes": [ + "application/json" + ], + "description": "Enable the allow list for the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Enable Allow List", + "tags": [ + "AllowedIP" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/allow_list/{id}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete an existing allowed IP from the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Allowed IP ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete Allowed IP", + "tags": [ + "AllowedIP" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update an existing allowed IP in the workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Allowed IP ID", + "in": "path", + "name": "id", + "required": true, + "type": "string" + }, + { + "description": "Allowed IP request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/AllowedIP" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/AllowedIP" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update Allowed IP", + "tags": [ + "AllowedIP" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete database in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Database ID", + "in": "path", + "name": "databaseID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete database in workgroup", + "tags": [ + "Database" + ] + }, + "get": { + "consumes": [ + "application/json" + ], + "description": "Get database in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Database ID", + "in": "path", + "name": "databaseID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/TGDatabase" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get database in workgroup", + "tags": [ + "Database" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update database in workgroup", + "parameters": [ + { + "description": "Update database request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateTGDatabaseRequest" + } + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Database ID", + "in": "path", + "name": "databaseID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/TGDatabase" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update database in workgroup", + "tags": [ + "Database" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Create workspace in workgroup", + "parameters": [ + { + "description": "Create workspace request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/CreateWorkspaceRequest" + } + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workspace" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create workspace in workgroup", + "tags": [ + "Workspace" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete workspace in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete workspace in workgroup", + "tags": [ + "Workspace" + ] + }, + "get": { + "consumes": [ + "application/json" + ], + "description": "Get workspace in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workspace" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get workspace in workgroup", + "tags": [ + "Workspace" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update workspace in workgroup", + "parameters": [ + { + "description": "Update workspace request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/UpdateWorkspaceRequest" + } + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/Workspace" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update workspace in workgroup", + "tags": [ + "Workspace" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete a backup for a workspace", + "parameters": [ + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Delete Backup Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/DeleteBackupRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully deleted the backup.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete a backup", + "tags": [ + "Backup" + ] + }, + "get": { + "consumes": [ + "application/json" + ], + "description": "List all backups for a workspace", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully listed the backups.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/Backup" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List backups", + "tags": [ + "Backup" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Restore a backup for a workspace", + "parameters": [ + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Restore Backup Request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/RestoreBackupRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully restored the backup.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Restore a backup", + "tags": [ + "Backup" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get the backup schedule for a workspace", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully got the backup schedule.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/BackupSchedule" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get backup schedule", + "tags": [ + "Backup" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Set a backup schedule for a workspace", + "parameters": [ + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Backup Schedule", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/BackupSchedule" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully set the backup schedule.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Set backup schedule", + "tags": [ + "Backup" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get the status of a backup restore job", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Job ID", + "in": "path", + "name": "job", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully got the backup restore status.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/BackupRestoreStatus" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get backup restore status", + "tags": [ + "Backup" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser": { + "delete": { + "consumes": [ + "application/json" + ], + "description": "Delete an in-database GSQL user in the specified workspace and workgroup.", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "In-database user request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/InDatabaseUserRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully deleted the in-database GSQL user.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete in-database GSQL user", + "tags": [ + "DatabaseUser" + ] + }, + "get": { + "description": "List all in-database GSQL users in the specified workspace and workgroup.", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully listed the in-database GSQL users.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/IAMUser" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List in-database GSQL users", + "tags": [ + "DatabaseUser" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Create a new in-database GSQL user in the specified workspace and workgroup.", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "In-database user request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/InDatabaseUserRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully created the in-database GSQL user.", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/IAMUser" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create in-database GSQL user", + "tags": [ + "DatabaseUser" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update the password of an in-database GSQL user in the specified workspace and workgroup.", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "In-database user request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/InDatabaseUserRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "Successfully updated the in-database GSQL password.", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "400": { + "description": "Bad request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update in-database GSQL user password", + "tags": [ + "DatabaseUser" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/onboarding/chat": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Handle MCP chat requests and return streaming responses via Server-Sent Events", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Thread ID", + "in": "header", + "name": "ThreadID", + "required": true, + "type": "string" + }, + { + "description": "MCP chat request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/ServerMCPChatRequest" + } + } + ], + "produces": [ + "text/event-stream" + ], + "responses": { + "200": { + "description": "Server-Sent Events stream", + "schema": { + "type": "string" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "MCP Chat for onboarding", + "tags": [ + "MCP" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Pause workspace in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Pause workspace in workgroup", + "tags": [ + "Workspace" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Refresh workspace in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Refresh workspace in workgroup", + "tags": [ + "Workspace" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Resume workspace in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Resume workspace in workgroup", + "tags": [ + "Workspace" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules": { + "get": { + "description": "Retrieve the schedule for a given workspace", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "items": { + "$ref": "#/definitions/WorkspaceSchedule" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Retrieve workspace schedule", + "tags": [ + "WorkspaceSchedule" + ] + }, + "post": { + "consumes": [ + "application/json" + ], + "description": "Create a new workspace schedule for a given workspace", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Workspace Schedule", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkspaceSchedule" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/WorkspaceSchedule" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Create a new workspace schedule", + "tags": [ + "WorkspaceSchedule" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID}": { + "delete": { + "description": "Delete an existing workspace schedule for a given workspace", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Schedule ID", + "in": "path", + "name": "scheduleID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Delete an existing workspace schedule", + "tags": [ + "WorkspaceSchedule" + ] + }, + "put": { + "consumes": [ + "application/json" + ], + "description": "Update an existing workspace schedule for a given workspace", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Schedule ID", + "in": "path", + "name": "scheduleID", + "required": true, + "type": "string" + }, + { + "description": "Workspace Schedule", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/WorkspaceSchedule" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/Response" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Update an existing workspace schedule", + "tags": [ + "WorkspaceSchedule" + ] + } + }, + "/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/upgrade": { + "post": { + "consumes": [ + "application/json" + ], + "description": "Upgrade workspace in workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + }, + { + "description": "Upgrade workspace request", + "in": "body", + "name": "request", + "required": true, + "schema": { + "$ref": "#/definitions/UpgradeWorkspaceRequest" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Upgrade workspace in workgroup", + "tags": [ + "Workspace" + ] + } + }, + "/controller/v4/v2/workspaces/meta": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get regions/tgVersions/workspaceTypes supported for your org", + "parameters": [ + { + "description": "When true, tgVersions only include versions with allow_upgrade; when false or omitted (default), all create-allowed versions for the org are returned", + "in": "query", + "name": "upgrade", + "type": "boolean" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/WorkspaceMetadata" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get an metadata for your org", + "tags": [ + "Org" + ] + } + }, + "/controller/v4/v2/workspaces/upgrade-next-window": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List workspaces upgrading in next window", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/Response" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "List workspaces upgrading in next window", + "tags": [ + "Workspace" + ] + } + }, + "/metrics/{workgroupID}/{workspaceID}": { + "get": { + "description": "Returns the latest tigergraph_* samples for the given workspace as Prometheus text exposition format", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + }, + { + "description": "Workspace ID", + "in": "path", + "name": "workspaceID", + "required": true, + "type": "string" + } + ], + "produces": [ + "text/plain" + ], + "responses": { + "200": { + "description": "Prometheus exposition format", + "schema": { + "type": "string" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Scrape workspace metrics in Prometheus exposition format", + "tags": [ + "Workspace" + ] + } + }, + "/observability/{workgroupID}/metrics": { + "get": { + "consumes": [ + "application/json" + ], + "description": "Get workspace metrics in a given workgroup", + "parameters": [ + { + "description": "Workgroup ID", + "in": "path", + "name": "workgroupID", + "required": true, + "type": "string" + } + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/Response" + }, + { + "properties": { + "Result": { + "$ref": "#/definitions/observability.WorkgroupMetric" + } + }, + "type": "object" + } + ] + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ], + "summary": "Get workspace metrics in a given workgroup", + "tags": [ + "Workgroup" + ] + } + }, + "/users": { + "get": { + "consumes": [ + "application/json" + ], + "description": "List of users in the org. Note: this endpoint is not APIKEY compatible", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/OrgListUserResponse" + } + } + }, + "summary": "List of users in the org", + "tags": [ + "Org" + ] + } + }, + "/users/{userId}/roles": { + "put": { + "consumes": [ + "application/json" + ], + "description": "Updates the role of an org user. Note: this endpoint is not APIKEY compatible", + "parameters": [ + { + "description": "Id of the user", + "in": "path", + "name": "userId", + "required": true, + "type": "string" + }, + { + "description": "Roles of the user", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/PutOrgUsersRoles" + } + } + ], + "produces": [ + "application/json" + ], + "responses": { + "204": { + "description": "No Content" + } + }, + "summary": "Update the role of an org user", + "tags": [ + "Org" + ] + } + } + }, + "schemes": [], + "securityDefinitions": { + "ApiKeyAuth": { + "description": "Authorization for TigerGraph Savanna", + "in": "header", + "name": "x-api-key", + "type": "apiKey" + } + }, + "swagger": "2.0" +} \ No newline at end of file From a9503240aa188a7ffe82512e9624b56a82345a78 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 15:22:38 +0530 Subject: [PATCH 12/22] build(savanna): render endpoint pages from OpenAPI in splitter Wire split-endpoints to api-page.js, extend the public allowlist for cloud providers and add-ons, and fail dev preview when the UI bundle ships empty JS. --- gulpfile.js | 8 +++++ lib/split-endpoints.js | 70 ++++++++++++++++++++++-------------------- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index e2d8a29f..645ae52f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -78,6 +78,14 @@ function rebuildUiBundle (done) { execSync('npx gulp bundle', { cwd: antoraUiRoot, stdio: 'inherit' }) execSync('rm -rf build/ui-bundle && mkdir -p build/ui-bundle', { stdio: 'inherit' }) execSync(`unzip -oq ${JSON.stringify(uiBundleZip)} -d build/ui-bundle`, { stdio: 'inherit' }) + // An empty site.js extracts without error and the preview still renders, so the + // only symptom is that nothing scripted works — collapsible nav groups, the + // language picker, search. Fail here instead of serving a mute site. + const siteJs = 'build/ui-bundle/js/site.js' + if (!fs.existsSync(siteJs) || !fs.statSync(siteJs).size) { + done(new Error(`${siteJs} is missing or empty; rerun after ${uiBundleZip} finishes writing`)) + return + } done() } diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index cb8bcbeb..78f495a8 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -1,18 +1,20 @@ 'use strict' /** - * Splits the generated Savanna control-plane catalog into one page per - * endpoint, then writes the module nav. + * Writes one reference page per endpoint, then the module nav. * - * Source of truth is the catalog in modules/savanna/modules/rest-api/_catalog. - * Replace it when the API is regenerated, then run `npm run endpoints:split`. - * Everything under pages/endpoints/ is overwritten, so edit the catalog. + * Source of truth is modules/savanna/modules/rest-api/_catalog: endpoints.adoc + * supplies the nav grouping and the anchors older deep links point at, and + * openapi.json supplies everything on the page itself. Replace both when the + * API is regenerated, then run `npm run endpoints:split`. Everything under + * pages/endpoints/ is overwritten, so edit the catalog, never the pages. * * Usage: node lib/split-endpoints.js [--check] */ const fs = require('fs') const path = require('path') +const { renderApiPage } = require('./api-page') const MODULE_DIR = path.join(__dirname, '..', 'modules/savanna/modules/rest-api') const CATALOG = path.join(MODULE_DIR, '_catalog/endpoints.adoc') @@ -22,8 +24,10 @@ const NAV = path.join(MODULE_DIR, 'nav.adoc') // Swagger tag -> nav group, in the order the groups should appear. const GROUPS = [ + ['CloudProvider', 'Cloud providers'], ['Workgroup', 'Workgroups'], ['Workspace', 'Workspaces'], + ['Add-ons', 'Add-ons'], ['WorkspaceSchedule', 'Workspace schedules'], ['Database', 'Databases'], ['Backup', 'Backups'], @@ -32,7 +36,11 @@ const GROUPS = [ ['Org', 'Organization'], ] -const GENERATED = '// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead.' +const GENERATED = [ + '// Generated by lib/split-endpoints.js. Do not edit.', + '// Schemas and samples come from _catalog/openapi.json; attribute prose that', + '// the spec omits lives in lib/api-descriptions.json.', +].join('\n') function slugify (label) { return label @@ -47,6 +55,14 @@ function slugify (label) { // Do not add a route merely because it appears in the service Swagger file: // only supported customer-facing contracts belong here. const LABELS = { + 'POST /controller/v4/v2/cloud-providers': 'Create a cloud provider', + 'GET /controller/v4/v2/cloud-providers': 'List cloud providers', + 'GET /controller/v4/v2/cloud-providers/public': 'List public cloud providers', + 'POST /controller/v4/v2/cloud-providers/validate': 'Validate a cloud provider', + 'GET /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Get cloud provider details', + 'PUT /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Update a cloud provider', + 'DELETE /controller/v4/v2/cloud-providers/{cloudProviderID}': 'Delete a cloud provider', + 'PUT /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade': 'Upgrade a cloud provider', 'POST /controller/v4/v2/workgroups': 'Create a workgroup', 'GET /controller/v4/v2/workgroups': 'List workgroups', 'GET /controller/v4/v2/workgroups/{workgroupID}': 'Get workgroup details', @@ -56,6 +72,15 @@ const LABELS = { 'GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Get workspace details', 'PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Update a workspace', 'DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}': 'Delete a workspace', + 'GET /controller/v4/v2/addons/meta': 'List available add-ons', + 'POST /controller/v4/v2/addons/{addonsID}/install': 'Install an add-on', + 'GET /controller/v4/v2/installed-addons': 'List installed add-ons', + 'GET /controller/v4/v2/installed-addons/{installedAddonsID}': 'Get installed add-on details', + 'GET /controller/v4/v2/addons/{addonsID}/workspaces': 'List add-on workspaces', + 'GET /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName}': 'List add-on configurations', + 'POST /controller/v4/v2/add-ons/{installedAddonsID}/configs': 'Create an add-on configuration', + 'PUT /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}': 'Update an add-on configuration', + 'DELETE /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID}': 'Delete an add-on configuration', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume': 'Resume a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause': 'Pause a workspace', 'POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh': 'Refresh a workspace', @@ -101,7 +126,7 @@ function parseCatalog (text) { i += 1 continue } - const endpoint = { anchor: anchor[1], summary: lines[i + 1].slice(3).trim(), tags: [], body: [] } + const endpoint = { anchor: anchor[1], summary: lines[i + 1].slice(3).trim(), tags: [] } endpoints.push(endpoint) i += 2 // The request line sits in a literal block right below the title. @@ -118,8 +143,6 @@ function parseCatalog (text) { while (i < lines.length && !(/^\[\[_https[^\]]+\]\]$/.test(lines[i]) && (lines[i + 1] || '').startsWith('== '))) { if (lines[i].trim().startsWith('* ') && (lines[i - 2] || '').trim() === '==== Tags') { endpoint.tags.push(lines[i].trim().slice(2)) - } else { - endpoint.body.push(lines[i]) } i += 1 } @@ -127,35 +150,15 @@ function parseCatalog (text) { return endpoints } -/** Rewrites catalog markup for a standalone page. */ -function renderBody (body) { - return body - .join('\n') - .trim() - // The Tags section only repeats the nav group. Its list items are already - // parsed out, so the heading can be dropped wherever it sits. - .replace(/\[discrete\]\n==== Tags\n*/g, '') - // The summary opens the page as its lead paragraph, so it needs no heading. - .replace(/^\[discrete\]\n==== Description\n/, '') - .replace(/^\[discrete\]\n/gm, '') - .replace(/^==== /gm, '== ') - // definitions.adoc sits in pages/, one level above these endpoint pages. - .replace(/<]+),([^>]+)>>/g, 'xref:rest-api:definitions.adoc#$1[$2]') - .replace(/\n{3,}/g, '\n\n') - .trim() -} - function renderPage (endpoint, label) { return [ '= ' + label, + ':page-role: api-endpoint-detail', GENERATED, '', - '[.api-request]', - '....', - endpoint.method + ' ' + endpoint.path, - '....', - '', - renderBody(endpoint.body), + '++++', + renderApiPage(endpoint), + '++++', '', ].join('\n') } @@ -177,7 +180,6 @@ function renderNav (grouped) { out.push('*** xref:rest-api:endpoints/' + endpoint.slug + '.adoc[' + endpoint.method + ' ' + endpoint.label + ']') } } - out.push('** xref:rest-api:definitions.adoc[Definitions]') return out.join('\n') + '\n' } From 56e47e313c658218c1039076ec18b0b90eb2e49b Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 15:22:39 +0530 Subject: [PATCH 13/22] docs(savanna): regenerate REST API reference from OpenAPI pages Rebuild all endpoint pages and nav from the catalog, drop the separate definitions page, and refresh overview copy and deep links. --- .../modules/rest-api/_catalog/endpoints.adoc | 213 +++ modules/savanna/modules/rest-api/nav.adoc | 24 +- .../modules/rest-api/pages/definitions.adoc | 930 ------------ .../pages/endpoints/add-an-allowed-ip.adoc | 560 ++++++- .../pages/endpoints/check-the-current-ip.adoc | 399 ++++- .../endpoints/create-a-cloud-provider.adoc | 740 +++++++++ .../pages/endpoints/create-a-workgroup.adoc | 1341 ++++++++++++++++- .../create-a-workspace-schedule.adoc | 640 +++++++- .../pages/endpoints/create-a-workspace.adoc | 1071 ++++++++++++- .../create-an-add-on-configuration.adoc | 447 ++++++ .../endpoints/create-an-in-database-user.adoc | 581 ++++++- .../pages/endpoints/delete-a-backup.adoc | 465 +++++- .../endpoints/delete-a-cloud-provider.adoc | 225 +++ .../pages/endpoints/delete-a-database.adoc | 259 +++- .../pages/endpoints/delete-a-workgroup.adoc | 265 +++- .../delete-a-workspace-schedule.adoc | 372 ++++- .../pages/endpoints/delete-a-workspace.adoc | 259 +++- .../delete-an-add-on-configuration.adoc | 398 +++++ .../pages/endpoints/delete-an-allowed-ip.adoc | 382 ++++- .../endpoints/delete-an-in-database-user.adoc | 479 +++++- .../endpoints/disable-the-allow-list.adoc | 370 ++++- .../endpoints/enable-the-allow-list.adoc | 370 ++++- .../endpoints/get-backup-restore-status.adoc | 405 ++++- .../pages/endpoints/get-backup-schedule.adoc | 398 ++++- .../endpoints/get-cloud-provider-details.adoc | 568 +++++++ .../pages/endpoints/get-database-details.adoc | 802 +++++++++- .../get-installed-add-on-details.adoc | 388 +++++ .../get-supported-workspace-options.adoc | 391 ++++- .../endpoints/get-workgroup-details.adoc | 1134 +++++++++++++- .../endpoints/get-workspace-details.adoc | 695 ++++++++- .../pages/endpoints/install-an-add-on.adoc | 401 +++++ .../endpoints/list-add-on-configurations.adoc | 398 +++++ .../endpoints/list-add-on-workspaces.adoc | 803 ++++++++++ .../pages/endpoints/list-allowed-ips.adoc | 396 ++++- .../endpoints/list-available-add-ons.adoc | 375 +++++ .../pages/endpoints/list-backups.adoc | 415 ++++- .../pages/endpoints/list-cloud-providers.adoc | 557 +++++++ .../endpoints/list-in-database-users.adoc | 446 +++++- .../endpoints/list-installed-add-ons.adoc | 298 ++++ .../pages/endpoints/list-org-users.adoc | 343 ++++- .../list-public-cloud-providers.adoc | 268 ++++ .../pages/endpoints/list-workgroups.adoc | 1178 ++++++++++++++- .../endpoints/list-workspace-schedules.adoc | 411 ++++- .../pages/endpoints/pause-a-workspace.adoc | 259 +++- .../pages/endpoints/refresh-a-workspace.adoc | 259 +++- .../pages/endpoints/restore-a-backup.adoc | 483 +++++- .../pages/endpoints/resume-a-workspace.adoc | 259 +++- .../pages/endpoints/set-backup-schedule.adoc | 525 ++++++- .../endpoints/update-a-cloud-provider.adoc | 625 ++++++++ .../pages/endpoints/update-a-database.adoc | 843 ++++++++++- .../pages/endpoints/update-a-workgroup.adoc | 1295 +++++++++++++++- .../update-a-workspace-schedule.adoc | 603 +++++++- .../pages/endpoints/update-a-workspace.adoc | 1048 ++++++++++++- .../update-an-add-on-configuration.adoc | 441 ++++++ .../pages/endpoints/update-an-allowed-ip.adoc | 573 +++++-- .../update-an-in-database-users-password.adoc | 479 +++++- .../endpoints/update-an-org-users-role.adoc | 221 ++- .../endpoints/upgrade-a-cloud-provider.adoc | 523 +++++++ .../endpoints/validate-a-cloud-provider.adoc | 332 ++++ .../rest-api/pages/index-previous.adoc | 60 +- .../savanna/modules/rest-api/pages/index.adoc | 110 +- 61 files changed, 27999 insertions(+), 2799 deletions(-) delete mode 100644 modules/savanna/modules/rest-api/pages/definitions.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc create mode 100644 modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc diff --git a/modules/savanna/modules/rest-api/_catalog/endpoints.adoc b/modules/savanna/modules/rest-api/_catalog/endpoints.adoc index 203120e4..d266dde3 100644 --- a/modules/savanna/modules/rest-api/_catalog/endpoints.adoc +++ b/modules/savanna/modules/rest-api/_catalog/endpoints.adoc @@ -1959,6 +1959,219 @@ __optional__|<> -|**region** + -__optional__|string -|=== - - -[[_createworkspacerequest]] -=== CreateWorkspaceRequest -Create Workspace Request - - -[options="header", cols=".^3a,.^11a,.^4a"] -|=== -|Name|Description|Schema -|**addons** + -__optional__||< <> > array -|**auto_stop_minutes** + -__optional__||integer -|**enable_auto_start** + -__optional__||boolean -|**enable_ha** + -__optional__||boolean -|**is_rw** + -__optional__||boolean -|**name** + -__optional__||string -|**solution_install_request** + -__optional__||<> -|**tg_database_id** + -__optional__||string -|**tg_version** + -__optional__||string -|**workspace_type_name** + -__optional__|Workspace Type Name TG-0/TG-2|string -|=== - - -[[_deletebackuprequest]] -=== DeleteBackupRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**backup_id** + -__required__|string -|=== - - -[[_folderstatistics]] -=== FolderStatistics - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**backup_size** + -__optional__|integer -|**billed_size** + -__optional__|integer -|**log_size** + -__optional__|integer -|**milvus_size** + -__optional__|integer -|**total_size** + -__optional__|integer -|**workspaces** + -__optional__|< <> > array -|=== - - -[[_indatabaseuserrequest]] -=== InDatabaseUserRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**password** + -__optional__|string -|**username** + -__optional__|string -|=== - - -[[_region]] -=== Region - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**description** + -__optional__|string -|**name** + -__optional__|string -|=== - - -[[_restorebackuprequest]] -=== RestoreBackupRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**backup_id** + -__required__|string -|=== - - -[[_solutioninstallrequest]] -=== SolutionInstallRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**addons** + -__optional__|< <> > array -|**data_source_origin** + -__optional__|string -|**name** + -__optional__|string -|**solution_catalog_id** + -__optional__|string -|=== - - -[[_tgdatabase]] -=== TGDatabase - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**create_time** + -__optional__|string -|**database_id** + -__optional__|string -|**folder_statistics** + -__optional__|<> -|**name** + -__optional__|string -|**org_id** + -__optional__|string -|**org_name** + -__optional__|string -|**region** + -__optional__|string -|**tg_version** + -__optional__|string -|**workgroup_id** + -__optional__|string -|**workspaces** + -__optional__|< <> > array -|=== - - -[[_tgversion]] -=== TGVersion - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**image** + -__optional__|string -|**name** + -__optional__|string -|=== - - -[[_updatetgdatabaserequest]] -=== UpdateTGDatabaseRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**tg_database_name** + -__required__|string -|=== - - -[[_updateworkgrouprequest]] -=== UpdateWorkgroupRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**workgroup_name** + -__optional__|string -|=== - - -[[_updateworkspacerequest]] -=== UpdateWorkspaceRequest - -[options="header", cols=".^3a,.^11a,.^4a"] -|=== -|Name|Description|Schema -|**addons** + -__optional__||< <> > array -|**agent_config** + -__optional__||<> -|**auto_stop_minutes** + -__optional__|**Minimum value** : `0`|integer -|**enable_auto_start** + -__optional__||boolean -|**enable_ha** + -__optional__||boolean -|**pause** + -__optional__||boolean -|**workspace_name** + -__optional__||string -|**workspace_type_name** + -__optional__||string -|=== - - -[[_workgroup]] -=== Workgroup - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**cloud_provider_id** + -__optional__|string -|**creator** + -__optional__|string -|**enable_allow_list** + -__optional__|boolean -|**name** + -__optional__|string -|**org_id** + -__optional__|string -|**org_name** + -__optional__|string -|**platform** + -__optional__|<> -|**region** + -__optional__|string -|**tg_databases** + -__optional__|< <> > array -|**workgroup_id** + -__optional__|string -|**workspaces** + -__optional__|< <> > array -|=== - - -[[_workspace]] -=== Workspace - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**addons** + -__optional__|< <> > array -|**agent_config** + -__optional__|<> -|**auto_stop_minutes** + -__optional__|integer -|**cloud_provider_id** + -__optional__|string -|**condition_type** + -__optional__|string -|**created_at** + -__optional__|string -|**creator** + -__optional__|string -|**database_id** + -__optional__|string -|**edge_count** + -__optional__|integer -|**enable_auto_start** + -__optional__|boolean -|**enable_ha** + -__optional__|boolean -|**folder_statistics** + -__optional__|<> -|**graph_topology_size_bytes** + -__optional__|integer -|**is_rw** + -__optional__|boolean -|**last_modified_time** + -__optional__|string -|**name** + -__optional__|string -|**nginx_host** + -__optional__|string -|**org_id** + -__optional__|string -|**org_name** + -__optional__|string -|**refresh_message** + -__optional__|string -|**refresh_status** + -__optional__|string -|**region** + -__optional__|string -|**size** + -__optional__|integer -|**snapshot_time** + -__optional__|string -|**solution_catalog_id** + -__optional__|string -|**status** + -__optional__|string -|**tg_version** + -__optional__|string -|**version_number** + -__optional__|integer -|**vertex_count** + -__optional__|integer -|**workgroup_id** + -__optional__|string -|**workgroup_name** + -__optional__|string -|**workspace_id** + -__optional__|string -|**workspace_type** + -__optional__|<> -|=== - - -[[_workspaceaddonsrequest]] -=== WorkspaceAddonsRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**addons_id** + -__required__|string -|**enable** + -__required__|boolean -|**enable_configuration** + -__optional__|object -|**is_free** + -__optional__|boolean -|**unique_name** + -__optional__|string -|**workspace_id** + -__optional__|string -|=== - - -[[_workspaceschedule]] -=== WorkspaceSchedule - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**date** + -__optional__|string -|**id** + -__optional__|string -|**repeat** + -__required__|string -|**repeat_on** + -__optional__|string -|**time** + -__required__|string -|**timezone** + -__required__|string -|**workspace_id** + -__required__|string -|**workspace_type_name** + -__optional__|string -|=== - - -[[_workspacesize]] -=== WorkspaceSize - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**size** + -__optional__|integer -|**workspace_id** + -__optional__|string -|=== - - -[[_workspacetype]] -=== WorkspaceType - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**cpu** + -__optional__|string -|**ha** + -__optional__|integer -|**memory** + -__optional__|string -|**partition** + -__optional__|integer -|**typeName** + -__optional__|string -|=== - - -[[_constants_platform]] -=== constants.Platform -__Type__ : enum (aws, azure, gcp) - - -[[_middleware_error]] -=== middleware.Error - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**FieldName** + -__optional__|string -|**Reason** + -__optional__|string -|**Type** + -__optional__|<> -|=== - - -[[_middleware_errortype]] -=== middleware.ErrorType -__Type__ : enum (Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown) - - -[[_middleware_response]] -=== middleware.Response - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**Error** + -__optional__|boolean -|**ErrorDetails** + -__optional__|< <> > array -|**Message** + -__optional__|string -|**RequestID** + -__optional__|string -|**Result** + -__optional__|object -|=== - - -[[_org_handler_orglistuserresponse]] -=== org_handler.OrgListUserResponse - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**auth0UserID** + -__optional__|string -|**authID** + -__optional__|string -|**created** + -__optional__|string -|**email** + -__optional__|string -|**enabled** + -__optional__|boolean -|**firstName** + -__optional__|string -|**id** + -__optional__|string -|**lastName** + -__optional__|string -|**metadata** + -__optional__|<> -|**path** + -__optional__|string -|**roles** + -__optional__|< <> > array -|**tenantID** + -__optional__|string -|**trn** + -__optional__|string -|**updated** + -__optional__|string -|**username** + -__optional__|string -|=== - - -[[_org_handler_orgmetadata]] -=== org_handler.OrgMetadata - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**attachedTo** + -__optional__|< string > array -|**lastLogin** + -__optional__|string -|=== - - -[[_org_handler_orgrole]] -=== org_handler.OrgRole - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**displayName** + -__optional__|string -|**id** + -__optional__|string -|**name** + -__optional__|string -|**path** + -__optional__|string -|**tenantID** + -__optional__|string -|**trn** + -__optional__|string -|=== - - -[[_org_handler_putorgusersroles]] -=== org_handler.PutOrgUsersRoles - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**roles** + -__optional__|< string > array -|=== - - -[[_pb_apikey]] -=== pb.APIKey - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**created_at** + -__optional__|string -|**creator** + -__optional__|string -|**description** + -__optional__|string -|**expires_at** + -__optional__|string -|**key_name** + -__optional__|string -|**org_id** + -__optional__|string -|**plaintext_key** + -__optional__|string -|**redacted_key** + -__optional__|string -|**user_id** + -__optional__|string -|=== - - -[[_pb_addonpricing]] -=== pb.AddOnPricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**platform** + -__optional__|string -|**price_per_hour** + -__optional__|number -|**region** + -__optional__|string -|**type** + -__optional__|string -|**workspace_type** + -__optional__|string -|=== - - -[[_pb_createapikeyrequest]] -=== pb.CreateAPIKeyRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**description** + -__optional__|string -|**life_time_in_seconds** + -__optional__|integer -|=== - - -[[_pb_customercreditcard]] -=== pb.CustomerCreditCard - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**brand** + -__optional__|string -|**card_id** + -__optional__|string -|**expire_month** + -__optional__|integer -|**expire_year** + -__optional__|integer -|**last_4_digits** + -__optional__|string -|**name_on_card** + -__optional__|string -|**org_id** + -__optional__|string -|=== - - -[[_pb_datastoragepricing]] -=== pb.DataStoragePricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**platform** + -__optional__|string -|**price_per_month** + -__optional__|number -|**region** + -__optional__|string -|=== - - -[[_pb_deleteapikeyrequest]] -=== pb.DeleteAPIKeyRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**key_name** + -__optional__|string -|=== - - -[[_pb_featureflag]] -=== pb.FeatureFlag - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**enabled** + -__optional__|boolean -|**feature_name** + -__optional__|string -|=== - - -[[_pb_getcustomercreditcardsresponse]] -=== pb.GetCustomerCreditCardsResponse - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**credit_cards** + -__optional__|< <> > array -|**default_card** + -__optional__|string -|=== - - -[[_pb_orgquota]] -=== pb.OrgQuota - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**max_workspace_memory** + -__optional__|string -|**max_workspace_type** + -__optional__|string -|**memory_limit** + -__optional__|string -|**memory_usage_in_bytes** + -__optional__|integer -|**org_id** + -__optional__|string -|**ro_workspace_count_limit** + -__optional__|integer -|**ro_workspace_count_usage** + -__optional__|integer -|**rw_workspace_count_limit** + -__optional__|integer -|**rw_workspace_count_usage** + -__optional__|integer -|**tier** + -__optional__|string -|**workspace_auto_backup_count_limit** + -__optional__|integer -|**workspace_auto_backup_retention_in_days** + -__optional__|integer -|**workspace_manual_backup_count_limit** + -__optional__|integer -|=== - - -[[_pb_organization]] -=== pb.Organization - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**create_time** + -__optional__|string -|**creator** + -__optional__|string -|**feature_flag** + -__optional__|< <> > array -|**logo_url** + -__optional__|string -|**org_display_name** + -__optional__|string -|**org_id** + -__optional__|string -|**org_name** + -__optional__|string -|=== - - -[[_pb_resourcepricing]] -=== pb.ResourcePricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**addon_pricing** + -__optional__|< <> > array -|**data_storage_pricing** + -__optional__|< <> > array -|**workspace_pricing** + -__optional__|< <> > array -|=== - - -[[_pb_workspacepricing]] -=== pb.WorkspacePricing - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**cloud_provider** + -__optional__|string -|**ha** + -__optional__|string -|**platform** + -__optional__|string -|**price_per_hour** + -__optional__|number -|**region** + -__optional__|string -|**workspace_type** + -__optional__|string -|=== - - -[[_resource_manager_handler_getmetadata_metadata]] -=== resource_manager_handler.GetMetadata.metadata - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**regions** + -__optional__|< <> > array -|**tgVersions** + -__optional__|< <> > array -|**workspaceTypes** + -__optional__|< <> > array -|=== - - -[[_tgiam_iamuser]] -=== tgIAM.IAMUser - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**auth0UserID** + -__optional__|string -|**created** + -__optional__|string -|**email** + -__optional__|string -|**enabled** + -__optional__|boolean -|**firstName** + -__optional__|string -|**id** + -__optional__|string -|**lastName** + -__optional__|string -|**path** + -__optional__|string -|**tenantID** + -__optional__|string -|**trn** + -__optional__|string -|**updated** + -__optional__|string -|**username** + -__optional__|string -|=== - - -[[_tgiam_orgrequest]] -=== tgIAM.OrgRequest - -[options="header", cols=".^3a,.^4a"] -|=== -|Name|Schema -|**logoUrl** + -__optional__|string -|**orgDisplayName** + -__optional__|string -|**orgID** + -__optional__|string -|**orgName** + -__optional__|string -|=== diff --git a/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc index 7bdfe284..0c69c74d 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc @@ -1,91 +1,485 @@ = Add an allowed IP -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/allow_list -.... +++++ +
+

Adds an IP address or CIDR range to a workgroup allow list.

-Add a new allowed IP to the workgroup +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/allow_list +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+

Body

+
+
+ # + cidr + string + required +
+

IP address or range in CIDR notation, such as 192.168.1.0/24 for a range or 192.168.1.2/32 for a single address.

+
+
+
+ # + id + string +
+

Unique identifier of the allow list entry.

+
+
+
+ # + note + string +
+

Note recording why the address was allowed.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cidrstringrequired
+

IP address or range in CIDR notation, such as 192.168.1.0/24 for a range or 192.168.1.2/32 for a single address.

+
+
+
idstring
+

Unique identifier of the allow list entry.

+
+
+
notestring
+

Note recording why the address was allowed.

+
+
+
+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Body**|**request** + -__required__|Allowed IP request|xref:rest-api:definitions.adoc#_allowedip[AllowedIP] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc index a5a4d634..1ab11de1 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc @@ -1,83 +1,328 @@ = Check the current IP -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/allow_list/current -.... +++++ +
+

Returns your current public IP address and whether the workgroup allow list permits it.

-Get the current IP and check if it is allowed in the workgroup +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/allow_list/current +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
IsAllowedboolean
+
+
+
CurrentIPstring
+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc new file mode 100644 index 00000000..876c5e95 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc @@ -0,0 +1,740 @@ += Create a cloud provider +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Registers a cloud account you own with Savanna so workgroups can be deployed into it. This is the Bring Your Own Cloud (BYOC) setup step, and it grants Savanna a cross-account IAM role in your AWS account.

+ +
+
+
+
+ POST + /controller/v4/v2/cloud-providers +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Body

+
+
+ # + created_by + string +
+

User creating the cloud provider.

+
+
+
+ # + name + string +
+

Name for the new cloud provider.

+
+
+
+ # + options + object +
+

Additional cloud-provider configuration options.

+
+ + Show child attributes + Hide child attributes + +
+
+
account_idstring
+

Cloud account identifier associated with the provider.

+
+
+
secure_connectionboolean
+

Whether the provider uses a private, secure connection.

+
+
+
+
+
+
+ # + platform + string +
+

Cloud platform that hosts the provider.

+
+
+
+ # + region + string +
+

Cloud region that hosts the provider.

+
+
+
+ # + role_arn + string +
+

Amazon Resource Name of the IAM role TigerGraph assumes.

+
+
+
+ # + role_external_id + string +
+

External identifier used when TigerGraph assumes the IAM role.

+
+
+
+ # + type + string +
+

Type is used by two sets of API and will be set to 'private' when called by the Admin API +and 'public' when called by the public cloud provider creation API.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
api_tokensstring[]
+

API tokens associated with the cloud provider.

+
+
+
availability_zonesstring[]
+

Availability zones configured for the cloud provider.

+
+
+
cluster_enabled_log_typesstring[]
+

Kubernetes control-plane log types enabled for the provider.

+

Available options: api, audit, authenticator, controllerManager, scheduler

+
+
+
component_versionsstring
+

Versions of the components installed for the provider.

+
+
+
created_atstring
+

Time the cloud provider was created.

+
+
+
created_bystring
+

User who created the cloud provider.

+
+
+
eks_idstring
+

Identifier of the Amazon EKS cluster.

+
+
+
endpoint_service_namestring
+

Name of the private endpoint service.

+
+
+
idstring
+

Unique identifier of the cloud provider.

+
+
+
last_errorstring
+

Most recent error reported while provisioning or updating the provider.

+
+
+
namestring
+

Name of the cloud provider.

+
+
+
node_group_configobject
+

Configuration of the Kubernetes node groups.

+
+ + Show child attributes + Hide child attributes + +
+
+
ng_16object
+

Configuration of the 16-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_32object
+

Configuration of the 32-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_48object
+

Configuration of the 48-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_64object
+

Configuration of the 64-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_systemobject
+

Configuration of the system node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
prefetch_image_liststring[]
+

Container images to prefetch onto the nodes.

+
+
+
+
+
+
optionsobject
+

Additional cloud-provider configuration options.

+
+ + Show child attributes + Hide child attributes + +
+
+
account_idstring
+

Cloud account identifier associated with the provider.

+
+
+
secure_connectionboolean
+

Whether the provider uses a private, secure connection.

+
+
+
+
+
+
org_idstring
+

Unique identifier of the organization that owns the provider.

+
+
+
platformstring
+

Cloud platform that hosts the provider.

+
+
+
regionstring
+

Cloud region that hosts the provider.

+
+
+
role_arnstring
+

Amazon Resource Name of the IAM role TigerGraph assumes.

+
+
+
role_external_idstring
+

External identifier used when TigerGraph assumes the IAM role.

+
+
+
security_group_idstring
+

Identifier of the network security group.

+
+
+
short_idstring
+

Short identifier of the cloud provider.

+
+
+
statusstring
+

Current status of the cloud provider.

+
+
+
subnet_idstring[]
+

Identifiers of the subnets used by the provider.

+
+
+
typestring
+

Access type of the cloud provider.

+
+
+
updated_atstring
+

Time the cloud provider was last updated.

+
+
+
versionstring
+

Version of the cloud provider deployment.

+
+
+
version_numberinteger
+

Internal version number of the cloud provider record.

+
+
+
vpc_idstring
+

Identifier of the virtual private cloud.

+
+
+
vpc_owned_by_tgboolean
+

Whether TigerGraph owns and manages the virtual private cloud.

+
+
+
work_dirstring
+

Working directory used while provisioning the provider.

+
+
+
+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc index 717fed88..727c2306 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc @@ -1,52 +1,1305 @@ = Create a workgroup -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups -.... +++++ +
+

Creates a workgroup with the selected cloud provider, region, and deployment settings.

-Create workgroups in your org +
+
+
+
+ POST + /controller/v4/v2/workgroups +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Body

+
+
+ # + cloud_provider_id + string + required +
+

Unique identifier of the cloud provider configuration to use.

+
+
+
+ # + enable_application_log + boolean +
+

Whether application logging is enabled.

+
+
+
+ # + enable_encryption + boolean +
+

Whether data is encrypted at rest.

+
+
+
+ # + name + string +
+

Name for the new workgroup.

+
+
+
+ # + platform + string +
+

Cloud platform that hosts the workgroup.

+

Available options: aws, azure, gcp

+
+
+
+ # + region + string +
+

Cloud region that hosts the workgroup.

+
+
+
+ # + shared_storage + boolean +
+

Whether workspaces in the workgroup share storage.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_statusstring
+

Current status of the cloud provider configuration.

+
+
+
cloud_provider_typestring
+

Type of cloud provider configuration.

+
+
+
creatorstring
+

User who created the workgroup.

+
+
+
enable_allow_listboolean
+

Whether the IP allow list is enabled.

+
+
+
enable_application_logboolean
+

Whether application logging is enabled.

+
+
+
encryption_methodstring
+

Encryption method used by the workgroup.

+

Available options: TMK

+
+
+
is_current_ip_allowedboolean
+

Whether the current client IP is allowed.

+
+
+
namestring
+

Name of the workgroup.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
platformstring
+

Cloud platform that hosts the workgroup.

+

Available options: aws, azure, gcp

+
+
+
regionstring
+

Cloud region that hosts the workgroup.

+
+
+
shared_storageboolean
+

Whether shared storage is enabled.

+
+
+
tg_databasesobject[]
+

Databases associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
create_timestring
+

Time the database was created.

+
+
+
database_idstring
+

Unique identifier of the database.

+
+
+
folder_statisticsobject
+

Storage statistics for the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
namestring
+

Name of the database.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
regionstring
+

Cloud region that hosts the database.

+
+
+
tg_versionstring
+

TigerGraph version of the database.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workspacesobject[]
+

Workspaces attached to the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
workgroup_idstring
+

Unique identifier of the workgroup.

+
+
+
workspacesobject[]
+

Workspaces associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Body**|**request** + -__required__|Create workgroup request|xref:rest-api:definitions.adoc#_createworkgrouprequest[CreateWorkgroupRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc index 637b257b..d405c980 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc @@ -1,58 +1,598 @@ = Create a workspace schedule -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules -.... +++++ +
+

Creates a recurring workspace schedule.

-Create a new workspace schedule for a given workspace +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+

Body

+
+
+ # + date + string +
+

Date the action runs when the schedule does not repeat.

+
+
+
+ # + id + string +
+

Unique identifier of the schedule.

+
+
+
+ # + repeat + string + required +
+

How often the action repeats: daily, weekly, or weekdays.

+
+
+
+ # + repeat_on + string +
+

Days the action runs when it repeats weekly.

+
+
+
+ # + time + string + required +
+

Time of day the action runs.

+
+
+
+ # + timezone + string + required +
+

Time zone the schedule is interpreted in.

+
+
+
+ # + workspace_id + string + required +
+

Unique identifier of the scheduled workspace.

+
+
+
+ # + workspace_type_name + string +
+

Workspace size to apply when the action runs.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
datestring
+

Date the action runs when the schedule does not repeat.

+
+
+
idstring
+

Unique identifier of the schedule.

+
+
+
repeatstringrequired
+

How often the action repeats: daily, weekly, or weekdays.

+
+
+
repeat_onstring
+

Days the action runs when it repeats weekly.

+
+
+
timestringrequired
+

Time of day the action runs.

+
+
+
timezonestringrequired
+

Time zone the schedule is interpreted in.

+
+
+
workspace_idstringrequired
+

Unique identifier of the scheduled workspace.

+
+
+
workspace_type_namestring
+

Workspace size to apply when the action runs.

+
+
+
+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**body** + -__required__|Workspace Schedule|xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc index aa474f5a..859d90aa 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc @@ -1,54 +1,1033 @@ = Create a workspace -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces -.... +++++ +
+

Creates a workspace in a workgroup. The workspace's database is created with it.

-Create workspace in workgroup +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+

Body

+
+
+ # + addons + object[] +
+

Add-ons to enable on the new workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+ # + auto_stop_minutes + integer +
+

Idle minutes before the workspace stops automatically.

+
+
+
+ # + enable_auto_start + boolean +
+

Whether the workspace starts automatically on access.

+
+
+
+ # + enable_ha + boolean +
+

Whether high availability is enabled, which adds redundancy and improves fault tolerance.

+
+
+
+ # + is_rw + boolean +
+

Whether the workspace accepts writes. Backups require a read-write workspace.

+
+
+
+ # + maintenance_window_day_of_week + integer +
+

Day of the week the maintenance window starts.

+
+
+
+ # + maintenance_window_hour_of_day + integer +
+

Hour of the day the maintenance window starts.

+
+
+
+ # + maintenance_window_interval_weeks + integer +
+

Number of weeks between maintenance windows.

+
+
+
+ # + maintenance_window_time_zone + string +
+

Time zone used for the maintenance window.

+
+
+
+ # + name + string +
+

Name for the new workspace.

+
+
+
+ # + solution_install_request + object +
+

Solution to install on the new workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons to enable alongside the solution.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
data_source_originstring
+

Origin of the sample data loaded with the solution.

+
+
+
namestring
+

Name for the installed solution.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry to install.

+
+
+
+
+
+
+ # + tg_database_id + string +
+

Unique identifier of the database to attach.

+
+
+
+ # + tg_version + string +
+

TigerGraph version to run in the workspace.

+
+
+
+ # + update_strategy + string +
+

Strategy used to apply workspace updates.

+
+
+
+ # + workspace_type_name + string +
+

Workspace Type Name TG-0/TG-2

+
+
+
+ # + x_test_env + string +
+

Reserved for internal testing.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Body**|**request** + -__required__|Create workspace request|xref:rest-api:definitions.adoc#_createworkspacerequest[CreateWorkspaceRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc new file mode 100644 index 00000000..60c87f90 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc @@ -0,0 +1,447 @@ += Create an add-on configuration +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Creates a configuration for an installed add-on.

+ +
+
+
+
+ POST + /controller/v4/v2/add-ons/{installedAddonsID}/configs +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + installedAddonsID + string + path + required +
+

Installed Add-on ID

+
+
+
+

Body

+
+
+ # + config_name + string + required +
+

Name of the configuration.

+
+
+
+ # + config_value + string + required +
+

Value of the configuration.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc index 5890b950..82e59c47 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc @@ -1,58 +1,539 @@ = Create an in-database user -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser -.... +++++ +
+

Creates an in-database GSQL user for a workspace.

-Create a new in-database GSQL user in the specified workspace and workgroup. +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+

Body

+
+
+ # + password + string +
+

Password for the in-database user.

+
+
+
+ # + username + string +
+

Username for the in-database user.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
auth0UserIDstring
+

Identifier of the user in the identity provider.

+
+
+
createdstring
+

Time the user was created.

+
+
+
descriptionstring
+

Description of the user.

+
+
+
emailstring
+

Email address of the user.

+
+
+
enabledboolean
+

Whether the user can sign in.

+
+
+
firstNamestring
+

Given name of the user.

+
+
+
idstring
+

Unique identifier of the user.

+
+
+
lastNamestring
+

Family name of the user.

+
+
+
metadataobject
+

Additional details about the user.

+
+
+
pathstring
+

Hierarchical path of the user within the organization.

+
+
+
rolestring
+

Role assigned to the user.

+
+
+
tenantIDstring
+

Unique identifier of the tenant the user belongs to.

+
+
+
trnstring
+

TigerGraph resource name of the user.

+
+
+
updatedstring
+

Time the user was last updated.

+
+
+
usernamestring
+

Username of the user.

+
+
+
+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|In-database user request|xref:rest-api:definitions.adoc#_indatabaseuserrequest[InDatabaseUserRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc index 692f7315..cf9805bc 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc @@ -1,40 +1,441 @@ = Delete a backup -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups -.... +++++ +
+

Deletes the specified workspace backup.

-Delete a backup for a workspace +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+

Body

+
+
+ # + backup_id + string + required +
+

Unique identifier of the backup to delete.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|Delete Backup Request|xref:rest-api:definitions.adoc#_deletebackuprequest[DeleteBackupRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc new file mode 100644 index 00000000..5c8826ea --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc @@ -0,0 +1,225 @@ += Delete a cloud provider +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Unregisters a Bring Your Own Cloud (BYOC) provider and removes the Savanna components from that cloud account. Delete its workgroups first.

+ +
+
+
+
+ DELETE + /controller/v4/v2/cloud-providers/{cloudProviderID} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + cloudProviderID + string + path + required +
+

Cloud Provider ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc index b0fc261f..e16e6c53 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc @@ -1,36 +1,235 @@ = Delete a database -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} -.... +++++ +
+

Deletes a database from a workgroup.

-Delete database in workgroup +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + databaseID + string + path + required +
+

Database ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**databaseID** + -__required__|Database ID|string -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc index 120409c0..9b2afadd 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc @@ -1,52 +1,225 @@ = Delete a workgroup -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID} -.... +++++ +
+

Deletes a workgroup.

-Delete workgroup detail in your org +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc index 13aec7d9..800b0ee5 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc @@ -1,53 +1,331 @@ = Delete a workspace schedule -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} -.... +++++ +
+

Deletes a workspace schedule.

-Delete an existing workspace schedule for a given workspace +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+ # + scheduleID + string + path + required +
+

Schedule ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Path**|**scheduleID** + -__required__|Schedule ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc index 0394347a..7234a9e6 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc @@ -1,36 +1,235 @@ = Delete a workspace -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} -.... +++++ +
+

Deletes a workspace from a workgroup.

-Delete workspace in workgroup +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc new file mode 100644 index 00000000..37d4fcbf --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc @@ -0,0 +1,398 @@ += Delete an add-on configuration +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Deletes a configuration of an installed add-on.

+ +
+
+
+
+ DELETE + /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + installedAddonsID + string + path + required +
+

Installed Add-on ID

+
+
+
+ # + configID + string + path + required +
+

Configuration ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + boolean +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc index 09898eba..d38f2e7e 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc @@ -1,73 +1,321 @@ = Delete an allowed IP -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} -.... +++++ +
+

Removes an IP address or CIDR range from a workgroup allow list.

-Delete an existing allowed IP from the workgroup +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + id + string + path + required +
+

Allowed IP ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**id** + -__required__|Allowed IP ID|string -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc index 46825ec3..909226f7 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc @@ -1,40 +1,455 @@ = Delete an in-database user -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -DELETE /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser -.... +++++ +
+

Deletes an in-database GSQL user from a workspace.

-Delete an in-database GSQL user in the specified workspace and workgroup. +
+
+
+
+ DELETE + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+

Body

+
+
+ # + password + string +
+

Password for the in-database user.

+
+
+
+ # + username + string +
+

Username for the in-database user.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|In-database user request|xref:rest-api:definitions.adoc#_indatabaseuserrequest[InDatabaseUserRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc b/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc index 6668df43..ffd8349c 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc @@ -1,71 +1,311 @@ = Disable the allow list -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable -.... +++++ +
+

Disables IP allow-list enforcement for a workgroup.

-Disable the allow list for the workgroup +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/allow_list/disable +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc b/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc index 51b3bf21..490af041 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc @@ -1,71 +1,311 @@ = Enable the allow list -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable -.... +++++ +
+

Enables IP allow-list enforcement for a workgroup.

-Enable the allow list for the workgroup +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/allow_list/enable +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc index c977cf9d..5417503f 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc @@ -1,57 +1,360 @@ = Get backup restore status -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status -.... +++++ +
+

Returns the status of a backup restore job.

-Get the status of a backup restore job +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/{job}/status +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+ # + job + string + path + required +
+

Job ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
created_atstring
+

Time the restore job started.

+
+
+
namestring
+

Name of the restore job.

+
+
+
outputstring
+

Log output produced by the restore job.

+
+
+
statusstring
+

Current status of the restore job.

+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**job** + -__required__|Job ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc index 4c2ac343..641a66fd 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc @@ -1,55 +1,355 @@ = Get backup schedule -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule -.... +++++ +
+

Returns the backup schedule for a workspace.

-Get the backup schedule for a workspace +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_backup_filesinteger
+

Maximum number of backups to keep.

+
+
+
max_reserved_daysinteger
+

Number of days a backup is kept before it is removed.

+
+
+
max_retryinteger
+

Number of times a failed backup is retried.

+
+
+
pauseboolean
+

Whether the schedule is paused.

+
+
+
schedulestringrequired
+

Cron expression that sets when the backup runs.

+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc new file mode 100644 index 00000000..619a2788 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc @@ -0,0 +1,568 @@ += Get cloud provider details +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Returns a single Bring Your Own Cloud (BYOC) provider, including its status, the AWS resources Savanna created in your account, and its component versions.

+ +
+
+
+
+ GET + /controller/v4/v2/cloud-providers/{cloudProviderID} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + cloudProviderID + string + path + required +
+

Cloud Provider ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
api_tokensstring[]
+

API tokens associated with the cloud provider.

+
+
+
availability_zonesstring[]
+

Availability zones configured for the cloud provider.

+
+
+
cluster_enabled_log_typesstring[]
+

Kubernetes control-plane log types enabled for the provider.

+

Available options: api, audit, authenticator, controllerManager, scheduler

+
+
+
component_versionsstring
+

Versions of the components installed for the provider.

+
+
+
created_atstring
+

Time the cloud provider was created.

+
+
+
created_bystring
+

User who created the cloud provider.

+
+
+
eks_idstring
+

Identifier of the Amazon EKS cluster.

+
+
+
endpoint_service_namestring
+

Name of the private endpoint service.

+
+
+
idstring
+

Unique identifier of the cloud provider.

+
+
+
last_errorstring
+

Most recent error reported while provisioning or updating the provider.

+
+
+
namestring
+

Name of the cloud provider.

+
+
+
node_group_configobject
+

Configuration of the Kubernetes node groups.

+
+ + Show child attributes + Hide child attributes + +
+
+
ng_16object
+

Configuration of the 16-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_32object
+

Configuration of the 32-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_48object
+

Configuration of the 48-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_64object
+

Configuration of the 64-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_systemobject
+

Configuration of the system node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
prefetch_image_liststring[]
+

Container images to prefetch onto the nodes.

+
+
+
+
+
+
optionsobject
+

Additional cloud-provider configuration options.

+
+ + Show child attributes + Hide child attributes + +
+
+
account_idstring
+

Cloud account identifier associated with the provider.

+
+
+
secure_connectionboolean
+

Whether the provider uses a private, secure connection.

+
+
+
+
+
+
org_idstring
+

Unique identifier of the organization that owns the provider.

+
+
+
platformstring
+

Cloud platform that hosts the provider.

+
+
+
regionstring
+

Cloud region that hosts the provider.

+
+
+
role_arnstring
+

Amazon Resource Name of the IAM role TigerGraph assumes.

+
+
+
role_external_idstring
+

External identifier used when TigerGraph assumes the IAM role.

+
+
+
security_group_idstring
+

Identifier of the network security group.

+
+
+
short_idstring
+

Short identifier of the cloud provider.

+
+
+
statusstring
+

Current status of the cloud provider.

+
+
+
subnet_idstring[]
+

Identifiers of the subnets used by the provider.

+
+
+
typestring
+

Access type of the cloud provider.

+
+
+
updated_atstring
+

Time the cloud provider was last updated.

+
+
+
versionstring
+

Version of the cloud provider deployment.

+
+
+
version_numberinteger
+

Internal version number of the cloud provider record.

+
+
+
vpc_idstring
+

Identifier of the virtual private cloud.

+
+
+
vpc_owned_by_tgboolean
+

Whether TigerGraph owns and manages the virtual private cloud.

+
+
+
work_dirstring
+

Working directory used while provisioning the provider.

+
+
+
+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc index 55c45c9c..7a65286c 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc @@ -1,54 +1,760 @@ = Get database details -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} -.... +++++ +
+

Returns details for a database in a workgroup.

-Get database in workgroup +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + databaseID + string + path + required +
+

Database ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
create_timestring
+

Time the database was created.

+
+
+
database_idstring
+

Unique identifier of the database.

+
+
+
folder_statisticsobject
+

Storage statistics for the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
namestring
+

Name of the database.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
regionstring
+

Cloud region that hosts the database.

+
+
+
tg_versionstring
+

TigerGraph version of the database.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workspacesobject[]
+

Workspaces attached to the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**databaseID** + -__required__|Database ID|string -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc new file mode 100644 index 00000000..e531ea9d --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc @@ -0,0 +1,388 @@ += Get installed add-on details +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Returns a single installed add-on.

+ +
+
+
+
+ GET + /controller/v4/v2/installed-addons/{installedAddonsID} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + installedAddonsID + string + path + required +
+

Installed Add-on ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc index a8d23921..b79836be 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc @@ -1,43 +1,360 @@ = Get supported workspace options -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workspaces/meta -.... +++++ +
+

Lists the regions, TigerGraph versions, and workspace types available to your organization.

-Get regions/tgVersions/workspaceTypes supported for your org +
+
+
+
+ GET + /controller/v4/v2/workspaces/meta +
+ +
-== Responses +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Query parameters

+
+
+ # + upgrade + boolean + query +
+

When true, tgVersions only include versions with allow_upgrade; when false or omitted (default), all create-allowed versions for the org are returned

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
regionsobject[]
+

Cloud regions available to your org.

+
+ + Show child attributes + Hide child attributes + +
+
+
descriptionstring
+

Description of the region.

+
+
+
namestring
+

Name of the region.

+
+
+
+
+
+
tgVersionsobject[]
+

TigerGraph versions available to your org.

+
+ + Show child attributes + Hide child attributes + +
+
+
allow_createboolean
+

Whether new workspaces can be created on this version.

+
+
+
allow_upgradeboolean
+

Whether existing workspaces can be upgraded to this version.

+
+
+
channelstring
+

Release channel the version belongs to.

+
+
+
end_of_lifestring
+

Date the version stops being supported.

+
+
+
imagestring
+

Container image that provides the version.

+
+
+
incompatible_upgrades_fromstring[]
+

Versions that cannot be upgraded to this version.

+
+
+
namestring
+

Version number.

+
+
+
orgsstring[]
+

For customized versions

+
+
+
+
+
+
workspaceTypesobject[]
+

Workspace sizes available to your org.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workspaces_meta_get_response_200,Response 200>> -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc index c97cbb86..9eb38845 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workgroup-details.adoc @@ -1,52 +1,1094 @@ = Get workgroup details -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID} -.... +++++ +
+

Returns details for a workgroup in your organization.

-Get workgroup detail in your org +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_statusstring
+

Current status of the cloud provider configuration.

+
+
+
cloud_provider_typestring
+

Type of cloud provider configuration.

+
+
+
creatorstring
+

User who created the workgroup.

+
+
+
enable_allow_listboolean
+

Whether the IP allow list is enabled.

+
+
+
enable_application_logboolean
+

Whether application logging is enabled.

+
+
+
encryption_methodstring
+

Encryption method used by the workgroup.

+

Available options: TMK

+
+
+
is_current_ip_allowedboolean
+

Whether the current client IP is allowed.

+
+
+
namestring
+

Name of the workgroup.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
platformstring
+

Cloud platform that hosts the workgroup.

+

Available options: aws, azure, gcp

+
+
+
regionstring
+

Cloud region that hosts the workgroup.

+
+
+
shared_storageboolean
+

Whether shared storage is enabled.

+
+
+
tg_databasesobject[]
+

Databases associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
create_timestring
+

Time the database was created.

+
+
+
database_idstring
+

Unique identifier of the database.

+
+
+
folder_statisticsobject
+

Storage statistics for the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
namestring
+

Name of the database.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
regionstring
+

Cloud region that hosts the database.

+
+
+
tg_versionstring
+

TigerGraph version of the database.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workspacesobject[]
+

Workspaces attached to the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
workgroup_idstring
+

Unique identifier of the workgroup.

+
+
+
workspacesobject[]
+

Workspaces associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc index 03d99e6f..d20feb5d 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc @@ -1,54 +1,653 @@ = Get workspace details -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} -.... +++++ +
+

Returns details for a workspace in a workgroup.

-Get workspace in workgroup +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc new file mode 100644 index 00000000..a83d5f20 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc @@ -0,0 +1,401 @@ += Install an add-on +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Installs an add-on for your organization, or enables or disables it.

+ +
+
+
+
+ POST + /controller/v4/v2/addons/{addonsID}/install +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + addonsID + string + path + required +
+

Add-on ID

+
+
+
+

Query parameters

+
+
+ # + enable + string + query + required +
+

Enable or disable add-on

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc new file mode 100644 index 00000000..866eca7e --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc @@ -0,0 +1,398 @@ += List add-on configurations +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Lists configurations of a given name for an installed add-on.

+ +
+
+
+
+ GET + /controller/v4/v2/installed-addons/{installedAddonsID}/configs/{configName} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + installedAddonsID + string + path + required +
+

Installed Add-on ID

+
+
+
+ # + configName + string + path + required +
+

Configuration Name

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc new file mode 100644 index 00000000..0207491a --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc @@ -0,0 +1,803 @@ += List add-on workspaces +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Lists the workspaces that have a given add-on enabled.

+ +
+
+
+
+ GET + /controller/v4/v2/addons/{addonsID}/workspaces +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + addonsID + string + path + required +
+

Addons ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc index 412a3992..52e3c9d0 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc @@ -1,71 +1,337 @@ = List allowed IPs -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/allow_list -.... +++++ +
+

Lists the IP addresses and CIDR ranges permitted by a workgroup allow list.

-List all allowed IPs in the workgroup +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/allow_list +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cidrstringrequired
+

IP address or range in CIDR notation, such as 192.168.1.0/24 for a range or 192.168.1.2/32 for a single address.

+
+
+
idstring
+

Unique identifier of the allow list entry.

+
+
+
notestring
+

Note recording why the address was allowed.

+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc new file mode 100644 index 00000000..205f52a0 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc @@ -0,0 +1,375 @@ += List available add-ons +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Lists the add-ons available to your organization. Use an id from this list as addons_id when you install an add-on or enable one on a workspace.

+ +
+
+
+
+ GET + /controller/v4/v2/addons/meta +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc index 87698afd..1ff89576 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc @@ -1,55 +1,372 @@ = List backups -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups -.... +++++ +
+

Lists the backups for a workspace.

-List all backups for a workspace +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
idstring
+

Unique identifier of the backup.

+
+
+
is_automaticboolean
+

Whether the backup came from the backup schedule rather than a manual request.

+
+
+
size_bytesstring
+

Size of the backup, in bytes.

+
+
+
statusstring
+

Current status of the backup.

+
+
+
tagstring
+

Tag that identifies the backup.

+
+
+
timestring
+

Time the backup was taken.

+
+
+
typestring
+

Scope of the data captured by the backup.

+
+
+
versionstring
+

TigerGraph version the backup was taken from.

+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc new file mode 100644 index 00000000..c47085c5 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc @@ -0,0 +1,557 @@ += List cloud providers +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Lists the Bring Your Own Cloud (BYOC) providers registered to your organization, the cloud accounts you own that Savanna deploys into. Use an id from this list as the cloud_provider_id when you create a workgroup.

+ +
+
+
+
+ GET + /controller/v4/v2/cloud-providers +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
api_tokensstring[]
+

API tokens associated with the cloud provider.

+
+
+
availability_zonesstring[]
+

Availability zones configured for the cloud provider.

+
+
+
cluster_enabled_log_typesstring[]
+

Kubernetes control-plane log types enabled for the provider.

+

Available options: api, audit, authenticator, controllerManager, scheduler

+
+
+
component_versionsstring
+

Versions of the components installed for the provider.

+
+
+
created_atstring
+

Time the cloud provider was created.

+
+
+
created_bystring
+

User who created the cloud provider.

+
+
+
eks_idstring
+

Identifier of the Amazon EKS cluster.

+
+
+
endpoint_service_namestring
+

Name of the private endpoint service.

+
+
+
idstring
+

Unique identifier of the cloud provider.

+
+
+
last_errorstring
+

Most recent error reported while provisioning or updating the provider.

+
+
+
namestring
+

Name of the cloud provider.

+
+
+
node_group_configobject
+

Configuration of the Kubernetes node groups.

+
+ + Show child attributes + Hide child attributes + +
+
+
ng_16object
+

Configuration of the 16-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_32object
+

Configuration of the 32-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_48object
+

Configuration of the 48-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_64object
+

Configuration of the 64-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_systemobject
+

Configuration of the system node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
prefetch_image_liststring[]
+

Container images to prefetch onto the nodes.

+
+
+
+
+
+
optionsobject
+

Additional cloud-provider configuration options.

+
+ + Show child attributes + Hide child attributes + +
+
+
account_idstring
+

Cloud account identifier associated with the provider.

+
+
+
secure_connectionboolean
+

Whether the provider uses a private, secure connection.

+
+
+
+
+
+
org_idstring
+

Unique identifier of the organization that owns the provider.

+
+
+
platformstring
+

Cloud platform that hosts the provider.

+
+
+
regionstring
+

Cloud region that hosts the provider.

+
+
+
role_arnstring
+

Amazon Resource Name of the IAM role TigerGraph assumes.

+
+
+
role_external_idstring
+

External identifier used when TigerGraph assumes the IAM role.

+
+
+
security_group_idstring
+

Identifier of the network security group.

+
+
+
short_idstring
+

Short identifier of the cloud provider.

+
+
+
statusstring
+

Current status of the cloud provider.

+
+
+
subnet_idstring[]
+

Identifiers of the subnets used by the provider.

+
+
+
typestring
+

Access type of the cloud provider.

+
+
+
updated_atstring
+

Time the cloud provider was last updated.

+
+
+
versionstring
+

Version of the cloud provider deployment.

+
+
+
version_numberinteger
+

Internal version number of the cloud provider record.

+
+
+
vpc_idstring
+

Identifier of the virtual private cloud.

+
+
+
vpc_owned_by_tgboolean
+

Whether TigerGraph owns and manages the virtual private cloud.

+
+
+
work_dirstring
+

Working directory used while provisioning the provider.

+
+
+
+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc index ae3d851b..2f3532fc 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc @@ -1,51 +1,407 @@ = List in-database users -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser -.... +++++ +
+

Lists the in-database GSQL users for a workspace.

-List all in-database GSQL users in the specified workspace and workgroup. +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
auth0UserIDstring
+

Identifier of the user in the identity provider.

+
+
+
createdstring
+

Time the user was created.

+
+
+
descriptionstring
+

Description of the user.

+
+
+
emailstring
+

Email address of the user.

+
+
+
enabledboolean
+

Whether the user can sign in.

+
+
+
firstNamestring
+

Given name of the user.

+
+
+
idstring
+

Unique identifier of the user.

+
+
+
lastNamestring
+

Family name of the user.

+
+
+
metadataobject
+

Additional details about the user.

+
+
+
pathstring
+

Hierarchical path of the user within the organization.

+
+
+
rolestring
+

Role assigned to the user.

+
+
+
tenantIDstring
+

Unique identifier of the tenant the user belongs to.

+
+
+
trnstring
+

TigerGraph resource name of the user.

+
+
+
updatedstring
+

Time the user was last updated.

+
+
+
usernamestring
+

Username of the user.

+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc new file mode 100644 index 00000000..b5d2a727 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc @@ -0,0 +1,298 @@ += List installed add-ons +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Lists the add-ons installed for your organization.

+ +
+
+
+
+ GET + /controller/v4/v2/installed-addons +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc index 6485a84a..5f4b14dc 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc @@ -1,25 +1,330 @@ = List org users -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /users -.... +++++ +
+

Lists the users in your organization. This endpoint does not support API key authentication.

-List of users in the org. Note: this endpoint is not APIKEY compatible +
+
+
+
+ GET + /users +
+ +
-== Responses +
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + auth0UserID + string +
+

Identifier of the user in the identity provider.

+
+
+
+ # + authID + string +
+

Identifier issued by the authentication provider.

+
+
+
+ # + created + string +
+

Time the user was created.

+
+
+
+ # + email + string +
+

Email address of the user.

+
+
+
+ # + enabled + boolean +
+

Whether the user can sign in.

+
+
+
+ # + firstName + string +
+

Given name of the user.

+
+
+
+ # + id + string +
+

Unique identifier of the user.

+
+
+
+ # + lastName + string +
+

Family name of the user.

+
+
+
+ # + metadata + object +
+

Additional details about the user.

+
+ + Show child attributes + Hide child attributes + +
+
+
attachedTostring[]
+

Resources the user is attached to.

+
+
+
lastLoginstring
+

Time the user last signed in.

+
+
+
+
+
+
+ # + path + string +
+

Hierarchical path of the user within the organization.

+
+
+
+ # + roles + object[] +
+

Roles assigned to the user.

+
+ + Show child attributes + Hide child attributes + +
+
+
displayNamestring
+

Name of the role as it appears in the TigerGraph Savanna console.

+
+
+
idstring
+

Unique identifier of the role.

+
+
+
namestring
+

Name of the role.

+
+
+
pathstring
+

Hierarchical path of the role within the organization.

+
+
+
tenantIDstring
+

Unique identifier of the tenant the role belongs to.

+
+
+
trnstring
+

TigerGraph resource name of the role.

+
+
+
+
+
+
+ # + tenantID + string +
+

Unique identifier of the tenant the user belongs to.

+
+
+
+ # + trn + string +
+

TigerGraph resource name of the user.

+
+
+
+ # + updated + string +
+

Time the user was last updated.

+
+
+
+ # + username + string +
+

Username of the user.

+
+
+
-[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|xref:rest-api:definitions.adoc#_org_handler_orglistuserresponse[org_handler.OrgListUserResponse] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc new file mode 100644 index 00000000..4a3b59e5 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc @@ -0,0 +1,268 @@ += List public cloud providers +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Lists the cloud providers TigerGraph operates. Use an id from this list as the cloud_provider_id when you create a workgroup.

+ +
+
+
+
+ GET + /controller/v4/v2/cloud-providers/public +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
component_versionsstring
+

Versions of the components installed for the provider.

+
+
+
idstring
+

Unique identifier of the public cloud provider.

+
+
+
namestring
+

Name of the public cloud provider.

+
+
+
org_idstring
+

Unique identifier of the organization that owns the provider.

+
+
+
platformstring
+

Cloud platform that hosts the provider.

+
+
+
regionstring
+

Cloud region that hosts the provider.

+
+
+
statusstring
+

Current status of the public cloud provider.

+
+
+
versionstring
+

Version of the cloud provider deployment.

+
+
+
version_numberinteger
+

Internal version number of the cloud provider record.

+
+
+
+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc index 692edac5..a794ac18 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc @@ -1,43 +1,1147 @@ = List workgroups -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups -.... +++++ +
+

Lists the workgroups in your organization.

-Get workgroups for your org +
+
+
+
+ GET + /controller/v4/v2/workgroups +
+ +
-== Responses +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_statusstring
+

Current status of the cloud provider configuration.

+
+
+
cloud_provider_typestring
+

Type of cloud provider configuration.

+
+
+
creatorstring
+

User who created the workgroup.

+
+
+
enable_allow_listboolean
+

Whether the IP allow list is enabled.

+
+
+
enable_application_logboolean
+

Whether application logging is enabled.

+
+
+
encryption_methodstring
+

Encryption method used by the workgroup.

+

Available options: TMK

+
+
+
is_current_ip_allowedboolean
+

Whether the current client IP is allowed.

+
+
+
namestring
+

Name of the workgroup.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
platformstring
+

Cloud platform that hosts the workgroup.

+

Available options: aws, azure, gcp

+
+
+
regionstring
+

Cloud region that hosts the workgroup.

+
+
+
shared_storageboolean
+

Whether shared storage is enabled.

+
+
+
tg_databasesobject[]
+

Databases associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
create_timestring
+

Time the database was created.

+
+
+
database_idstring
+

Unique identifier of the database.

+
+
+
folder_statisticsobject
+

Storage statistics for the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
namestring
+

Name of the database.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
regionstring
+

Cloud region that hosts the database.

+
+
+
tg_versionstring
+

TigerGraph version of the database.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workspacesobject[]
+

Workspaces attached to the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
workgroup_idstring
+

Unique identifier of the workgroup.

+
+
+
workspacesobject[]
+

Workspaces associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^14a,.^4a"] -|=== -|HTTP Code|Description|Schema -|**200**|OK|<<_https_api_tgcloud_io_controller_v4_v2_workgroups_get_response_200,Response 200>> -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc index 64c12e1e..b1420c3a 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc @@ -1,51 +1,372 @@ = List workspace schedules -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -GET /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules -.... +++++ +
+

Lists the schedules for a workspace.

-Retrieve the schedule for a given workspace +
+
+
+
+ GET + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object[] +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
datestring
+

Date the action runs when the schedule does not repeat.

+
+
+
idstring
+

Unique identifier of the schedule.

+
+
+
repeatstringrequired
+

How often the action repeats: daily, weekly, or weekdays.

+
+
+
repeat_onstring
+

Days the action runs when it repeats weekly.

+
+
+
timestringrequired
+

Time of day the action runs.

+
+
+
timezonestringrequired
+

Time zone the schedule is interpreted in.

+
+
+
workspace_idstringrequired
+

Unique identifier of the scheduled workspace.

+
+
+
workspace_type_namestring
+

Workspace size to apply when the action runs.

+
+
+
+
+
+ +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc index f794be82..320995e7 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc @@ -1,36 +1,235 @@ = Pause a workspace -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause -.... +++++ +
+

Pauses a workspace.

-Pause workspace in workgroup +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/pause +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc index f0eb70af..ae22b48e 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc @@ -1,36 +1,235 @@ = Refresh a workspace -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh -.... +++++ +
+

Refreshes a workspace.

-Refresh workspace in workgroup +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/refresh +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc index 3f7c9ba6..cb4450ca 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc @@ -1,58 +1,441 @@ = Restore a backup -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore -.... +++++ +
+

Restores a workspace from a backup.

-Restore a backup for a workspace +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/restore +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+

Body

+
+
+ # + backup_id + string + required +
+

Unique identifier of the backup to restore.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|Restore Backup Request|xref:rest-api:definitions.adoc#_restorebackuprequest[RestoreBackupRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc index 795682ba..6c761bdb 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc @@ -1,36 +1,235 @@ = Resume a workspace -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume -.... +++++ +
+

Resumes a paused workspace.

-Resume workspace in workgroup +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/resume +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc index 9033f507..e980defe 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc @@ -1,40 +1,501 @@ = Set backup schedule -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -POST /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule -.... +++++ +
+

Creates or replaces the backup schedule for a workspace.

-Set a backup schedule for a workspace +
+
+
+
+ POST + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups/schedule +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+

Body

+
+
+ # + max_backup_files + integer +
+

Maximum number of backups to keep.

+
+
+
+ # + max_reserved_days + integer +
+

Number of days a backup is kept before it is removed.

+
+
+
+ # + max_retry + integer +
+

Number of times a failed backup is retried.

+
+
+
+ # + pause + boolean +
+

Whether the schedule is paused.

+
+
+
+ # + schedule + string + required +
+

Cron expression that sets when the backup runs.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|Backup Schedule|xref:rest-api:definitions.adoc#_backupschedule[BackupSchedule] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc new file mode 100644 index 00000000..c87a1750 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc @@ -0,0 +1,625 @@ += Update a cloud provider +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Renames a Bring Your Own Cloud (BYOC) provider or records a version against it. Use the upgrade endpoint to change what is deployed in the cloud account.

+ +
+
+
+
+ PUT + /controller/v4/v2/cloud-providers/{cloudProviderID} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + cloudProviderID + string + path + required +
+

Cloud Provider ID

+
+
+
+

Body

+
+
+ # + name + string +
+

New name for the cloud provider.

+
+
+
+ # + version + string +
+

Cloud provider deployment version to apply.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
api_tokensstring[]
+

API tokens associated with the cloud provider.

+
+
+
availability_zonesstring[]
+

Availability zones configured for the cloud provider.

+
+
+
cluster_enabled_log_typesstring[]
+

Kubernetes control-plane log types enabled for the provider.

+

Available options: api, audit, authenticator, controllerManager, scheduler

+
+
+
component_versionsstring
+

Versions of the components installed for the provider.

+
+
+
created_atstring
+

Time the cloud provider was created.

+
+
+
created_bystring
+

User who created the cloud provider.

+
+
+
eks_idstring
+

Identifier of the Amazon EKS cluster.

+
+
+
endpoint_service_namestring
+

Name of the private endpoint service.

+
+
+
idstring
+

Unique identifier of the cloud provider.

+
+
+
last_errorstring
+

Most recent error reported while provisioning or updating the provider.

+
+
+
namestring
+

Name of the cloud provider.

+
+
+
node_group_configobject
+

Configuration of the Kubernetes node groups.

+
+ + Show child attributes + Hide child attributes + +
+
+
ng_16object
+

Configuration of the 16-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_32object
+

Configuration of the 32-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_48object
+

Configuration of the 48-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_64object
+

Configuration of the 64-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_systemobject
+

Configuration of the system node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
prefetch_image_liststring[]
+

Container images to prefetch onto the nodes.

+
+
+
+
+
+
optionsobject
+

Additional cloud-provider configuration options.

+
+ + Show child attributes + Hide child attributes + +
+
+
account_idstring
+

Cloud account identifier associated with the provider.

+
+
+
secure_connectionboolean
+

Whether the provider uses a private, secure connection.

+
+
+
+
+
+
org_idstring
+

Unique identifier of the organization that owns the provider.

+
+
+
platformstring
+

Cloud platform that hosts the provider.

+
+
+
regionstring
+

Cloud region that hosts the provider.

+
+
+
role_arnstring
+

Amazon Resource Name of the IAM role TigerGraph assumes.

+
+
+
role_external_idstring
+

External identifier used when TigerGraph assumes the IAM role.

+
+
+
security_group_idstring
+

Identifier of the network security group.

+
+
+
short_idstring
+

Short identifier of the cloud provider.

+
+
+
statusstring
+

Current status of the cloud provider.

+
+
+
subnet_idstring[]
+

Identifiers of the subnets used by the provider.

+
+
+
typestring
+

Access type of the cloud provider.

+
+
+
updated_atstring
+

Time the cloud provider was last updated.

+
+
+
versionstring
+

Version of the cloud provider deployment.

+
+
+
version_numberinteger
+

Internal version number of the cloud provider record.

+
+
+
vpc_idstring
+

Identifier of the virtual private cloud.

+
+
+
vpc_owned_by_tgboolean
+

Whether TigerGraph owns and manages the virtual private cloud.

+
+
+
work_dirstring
+

Working directory used while provisioning the provider.

+
+
+
+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc index 0f721d1d..dbfd2b25 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc @@ -1,56 +1,803 @@ = Update a database -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} -.... +++++ +
+

Renames a database in a workgroup.

-Update database in workgroup +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/databases/{databaseID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + databaseID + string + path + required +
+

Database ID

+
+
+
+

Body

+
+
+ # + tg_database_name + string + required +
+

New name for the database.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
create_timestring
+

Time the database was created.

+
+
+
database_idstring
+

Unique identifier of the database.

+
+
+
folder_statisticsobject
+

Storage statistics for the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
namestring
+

Name of the database.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
regionstring
+

Cloud region that hosts the database.

+
+
+
tg_versionstring
+

TigerGraph version of the database.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workspacesobject[]
+

Workspaces attached to the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**databaseID** + -__required__|Database ID|string -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Body**|**request** + -__required__|Update database request|xref:rest-api:definitions.adoc#_updatetgdatabaserequest[UpdateTGDatabaseRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc index 9aa28187..8430e107 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc @@ -1,54 +1,1257 @@ = Update a workgroup -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID} -.... +++++ +
+

Updates a workgroup name, application logging, or encryption settings.

-Update workgroups in your org +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+

Body

+
+
+ # + enable_application_log + boolean +
+

Whether application logging is enabled.

+
+
+
+ # + encryption_method + string +
+

Encryption method to apply to the workgroup.

+

Available options: TMK

+
+
+
+ # + workgroup_name + string +
+

New name for the workgroup.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_statusstring
+

Current status of the cloud provider configuration.

+
+
+
cloud_provider_typestring
+

Type of cloud provider configuration.

+
+
+
creatorstring
+

User who created the workgroup.

+
+
+
enable_allow_listboolean
+

Whether the IP allow list is enabled.

+
+
+
enable_application_logboolean
+

Whether application logging is enabled.

+
+
+
encryption_methodstring
+

Encryption method used by the workgroup.

+

Available options: TMK

+
+
+
is_current_ip_allowedboolean
+

Whether the current client IP is allowed.

+
+
+
namestring
+

Name of the workgroup.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
platformstring
+

Cloud platform that hosts the workgroup.

+

Available options: aws, azure, gcp

+
+
+
regionstring
+

Cloud region that hosts the workgroup.

+
+
+
shared_storageboolean
+

Whether shared storage is enabled.

+
+
+
tg_databasesobject[]
+

Databases associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
create_timestring
+

Time the database was created.

+
+
+
database_idstring
+

Unique identifier of the database.

+
+
+
folder_statisticsobject
+

Storage statistics for the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
namestring
+

Name of the database.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
regionstring
+

Cloud region that hosts the database.

+
+
+
tg_versionstring
+

TigerGraph version of the database.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workspacesobject[]
+

Workspaces attached to the database.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
workgroup_idstring
+

Unique identifier of the workgroup.

+
+
+
workspacesobject[]
+

Workspaces associated with the workgroup.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Body**|**request** + -__required__|Update workgroup request|xref:rest-api:definitions.adoc#_updateworkgrouprequest[UpdateWorkgroupRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc index 35d3a2ed..aa31c6be 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc @@ -1,60 +1,559 @@ = Update a workspace schedule -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} -.... +++++ +
+

Updates a workspace schedule.

-Update an existing workspace schedule for a given workspace +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/schedules/{scheduleID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+ # + scheduleID + string + path + required +
+

Schedule ID

+
+
+
+

Body

+
+
+ # + date + string +
+

Date the action runs when the schedule does not repeat.

+
+
+
+ # + id + string +
+

Unique identifier of the schedule.

+
+
+
+ # + repeat + string + required +
+

How often the action repeats: daily, weekly, or weekdays.

+
+
+
+ # + repeat_on + string +
+

Days the action runs when it repeats weekly.

+
+
+
+ # + time + string + required +
+

Time of day the action runs.

+
+
+
+ # + timezone + string + required +
+

Time zone the schedule is interpreted in.

+
+
+
+ # + workspace_id + string + required +
+

Unique identifier of the scheduled workspace.

+
+
+
+ # + workspace_type_name + string +
+

Workspace size to apply when the action runs.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Path**|**scheduleID** + -__required__|Schedule ID|string -|**Body**|**body** + -__required__|Workspace Schedule|xref:rest-api:definitions.adoc#_workspaceschedule[WorkspaceSchedule] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc index f008f326..3a190ae4 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc @@ -1,56 +1,1008 @@ = Update a workspace -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} -.... +++++ +
+

Updates a workspace configuration.

-Update workspace in workgroup +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+

Body

+
+
+ # + addons + object[] +
+

Add-ons to enable on the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+ # + agent_config + object +
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
+ # + auto_stop_minutes + integer +
+

Idle minutes before the workspace stops automatically.

+

Minimum: 0

+
+
+
+ # + auto_upgrade_state + string +
+

State of the automatic version upgrade.

+
+
+
+ # + desired_tg_version + string +
+

TigerGraph version to move the workspace to.

+
+
+
+ # + enable_auto_start + boolean +
+

Whether the workspace starts automatically on access.

+
+
+
+ # + enable_ha + boolean +
+

Whether high availability is enabled.

+
+
+
+ # + maintenance_window_day_of_week + integer +
+

Day of the week the maintenance window starts.

+
+
+
+ # + maintenance_window_hour_of_day + integer +
+

Hour of the day the maintenance window starts.

+
+
+
+ # + maintenance_window_interval_weeks + integer +
+

Number of weeks between maintenance windows.

+
+
+
+ # + maintenance_window_time_zone + string +
+

Time zone used for the maintenance window.

+
+
+
+ # + pause + boolean +
+

Whether the workspace is paused.

+
+
+
+ # + update_strategy + string +
+

Strategy used to apply workspace updates.

+
+
+
+ # + workspace_name + string +
+

New name for the workspace.

+
+
+
+ # + workspace_type_name + string +
+

Name of the workspace size to apply.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
addonsobject[]
+

Add-ons enabled for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
addons_idstringrequired
+

Unique identifier of the add-on.

+
+
+
enablebooleanrequired
+

Whether the add-on is enabled.

+
+
+
enable_configurationobject
+

Configuration applied when the add-on is enabled.

+
+
+
is_freeboolean
+

Whether the add-on is available at no cost.

+
+
+
unique_namestring
+

Unique name of the add-on.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
agent_configobject
+

Agent heartbeat and polling configuration.

+
+ + Show child attributes + Hide child attributes + +
+
+
catalog_activity_update_interval_secondsinteger
+

Seconds between catalog activity updates.

+
+
+
enable_topology_force_updateboolean
+

Whether topology updates are forced.

+
+
+
heartbeat_interval_secondsinteger
+

Seconds between agent heartbeats.

+
+
+
query_activity_update_interval_secondsinteger
+

Seconds between query activity updates.

+
+
+
topology_update_interval_secondsinteger
+

Seconds between topology updates.

+
+
+
+
+
+
auto_stop_minutesinteger
+

Idle minutes before the workspace stops automatically.

+
+
+
auto_upgrade_statestring
+

State of the automatic version upgrade.

+
+
+
cloud_provider_idstring
+

Unique identifier of the cloud provider configuration.

+
+
+
cloud_provider_namestring
+

Display name of the cloud provider.

+
+
+
cloud_provider_short_idstring
+

Short identifier of the cloud provider configuration.

+
+
+
condition_typestring
+

Current condition reported for the workspace.

+
+
+
created_atstring
+

Time the workspace was created.

+
+
+
creatorstring
+

User who created the workspace.

+
+
+
database_idstring
+

Unique identifier of the attached database.

+
+
+
database_namestring
+

Name of the attached database.

+
+
+
deleted_atstring
+

Time the workspace was deleted.

+
+
+
desired_tg_versionstring
+

TigerGraph version the workspace is moving to.

+
+
+
display_statusstring
+

Status shown in the TigerGraph Savanna console.

+
+
+
edge_countinteger
+

Number of edges stored in the workspace.

+
+
+
enable_auto_startboolean
+

Whether the workspace starts automatically on access.

+
+
+
enable_copilotboolean
+

Whether TigerGraph CoPilot is enabled.

+
+
+
enable_haboolean
+

Whether high availability is enabled.

+
+
+
err_messagestring
+

Error message reported for the workspace.

+
+
+
folder_statisticsobject
+

Storage statistics for the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
backup_sizeinteger
+

Size of backup data, in bytes.

+
+
+
billed_sizeinteger
+

Storage size counted for billing, in bytes.

+
+
+
log_sizeinteger
+

Size of log data, in bytes.

+
+
+
milvus_sizeinteger
+

Size of vector index data, in bytes.

+
+
+
total_sizeinteger
+

Total storage size, in bytes.

+
+
+
workspacesobject[]
+

Storage used by each workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
sizeinteger
+

Storage used by the workspace, in bytes.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
+
+
+
+
+
+
graph_topology_size_bytesinteger
+

Size of the graph topology, in bytes.

+
+
+
is_rwboolean
+

Whether the workspace accepts writes.

+
+
+
last_maintenancestring
+

Time of the last maintenance run.

+
+
+
last_modified_timestring
+

Time the workspace was last modified.

+
+
+
maintenance_window_day_of_weekinteger
+

Day of the week the maintenance window starts.

+
+
+
maintenance_window_hour_of_dayinteger
+

Hour of the day the maintenance window starts.

+
+
+
maintenance_window_interval_weeksinteger
+

Number of weeks between maintenance windows.

+
+
+
maintenance_window_time_zonestring
+

Time zone used for the maintenance window.

+
+
+
namestring
+

Name of the workspace.

+
+
+
nginx_hoststring
+

Host name that serves the workspace endpoint.

+
+
+
org_idstring
+

Unique identifier of the organization.

+
+
+
org_namestring
+

Name of the organization.

+
+
+
refresh_messagestring
+

Message describing the most recent refresh.

+
+
+
refresh_statusstring
+

Status of the most recent refresh.

+
+
+
regionstring
+

Cloud region that hosts the workspace.

+
+
+
replicasinteger
+

Number of replicas provisioned for the workspace.

+
+
+
snapshot_timestring
+

Time of the snapshot the workspace was created from.

+
+
+
solution_catalog_idstring
+

Unique identifier of the solution catalog entry.

+
+
+
statusstring
+

Current status of the workspace.

+
+
+
tg_versionstring
+

TigerGraph version running in the workspace.

+
+
+
update_strategystring
+

Strategy used to apply workspace updates.

+
+
+
version_numberinteger
+

Internal version number of the workspace record.

+
+
+
vertex_countinteger
+

Number of vertices stored in the workspace.

+
+
+
workgroup_idstring
+

Unique identifier of the parent workgroup.

+
+
+
workgroup_namestring
+

Name of the parent workgroup.

+
+
+
workspace_idstring
+

Unique identifier of the workspace.

+
+
+
workspace_typeobject
+

Compute size and shape of the workspace.

+
+ + Show child attributes + Hide child attributes + +
+
+
cpustring
+

Number of vCPUs allocated to the workspace.

+
+
+
hainteger
+

Number of high-availability replicas.

+
+
+
memorystring
+

Memory allocated to the workspace.

+
+
+
partitioninteger
+

Number of partitions in the workspace.

+
+
+
typeNamestring
+

Name of the workspace size type.

+
+
+
+
+
+
+
+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|Update workspace request|xref:rest-api:definitions.adoc#_updateworkspacerequest[UpdateWorkspaceRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc new file mode 100644 index 00000000..743747b9 --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc @@ -0,0 +1,441 @@ += Update an add-on configuration +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Updates a configuration of an installed add-on.

+ +
+
+
+
+ PUT + /controller/v4/v2/add-ons/{installedAddonsID}/configs/{configID} +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + installedAddonsID + string + path + required +
+

Installed Add-on ID

+
+
+
+ # + configID + string + path + required +
+

Configuration ID

+
+
+
+

Body

+
+
+ # + config_value + string + required +
+

New value of the configuration.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc index 4a06a4cf..df0b9622 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc @@ -1,94 +1,495 @@ = Update an allowed IP -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} -.... +++++ +
+

Updates an entry in a workgroup allow list.

-Update an existing allowed IP in the workgroup +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/allow_list/{id} +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + id + string + path + required +
+

Allowed IP ID

+
+
+
+

Body

+
+
+ # + cidr + string + required +
+

IP address or range in CIDR notation, such as 192.168.1.0/24 for a range or 192.168.1.2/32 for a single address.

+
+
+
+ # + id + string +
+

Unique identifier of the allow list entry.

+
+
+
+ # + note + string +
+

Note recording why the address was allowed.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
cidrstringrequired
+

IP address or range in CIDR notation, such as 192.168.1.0/24 for a range or 192.168.1.2/32 for a single address.

+
+
+
idstring
+

Unique identifier of the allow list entry.

+
+
+
notestring
+

Note recording why the address was allowed.

+
+
+
+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**id** + -__required__|Allowed IP ID|string -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Body**|**request** + -__required__|Allowed IP request|xref:rest-api:definitions.adoc#_allowedip[AllowedIP] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc index d66b1342..e0d95941 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc @@ -1,40 +1,455 @@ = Update an in-database user's password -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser -.... +++++ +
+

Updates an in-database GSQL user's password.

-Update the password of an in-database GSQL user in the specified workspace and workgroup. +
+
+
+
+ PUT + /controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/dbuser +
+ +
-== Parameters +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + workgroupID + string + path + required +
+

Workgroup ID

+
+
+
+ # + workspaceID + string + path + required +
+

Workspace ID

+
+
+
+

Body

+
+
+ # + password + string +
+

Password for the in-database user.

+
+
+
+ # + username + string +
+

Username for the in-database user.

+
+
+
+
+

Response

+
+
+ + +
+ application/json +
+
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+ + +
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**workgroupID** + -__required__|Workgroup ID|string -|**Path**|**workspaceID** + -__required__|Workspace ID|string -|**Body**|**request** + -__required__|In-database user request|xref:rest-api:definitions.adoc#_indatabaseuserrequest[InDatabaseUserRequest] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc index 297407c6..85e325a0 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc @@ -1,36 +1,201 @@ = Update an org user's role -// Generated by lib/split-endpoints.js. Edit _catalog/endpoints.adoc instead. +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. -[.api-request] -.... -PUT /users/{userId}/roles -.... +++++ +
+

Updates an organization user's role. This endpoint does not support API key authentication.

-Updates the role of an org user. Note: this endpoint is not APIKEY compatible +
+
+
+
+ PUT + /users/{userId}/roles +
+ +
-== Parameters +
+

Path parameters

+
+
+ # + userId + string + path + required +
+

Id of the user

+
+
+
+

Body

+
+
+ # + roles + string[] +
+

Roles to assign to the user, replacing the roles they hold now.

+
+
+
+
+

Response

+
+ 204 +
+
+

No Content

+
+
-[options="header", cols=".^2a,.^3a,.^9a,.^4a"] -|=== -|Type|Name|Description|Schema -|**Path**|**userId** + -__required__|Id of the user|string -|**Body**|**body** + -__required__|Roles of the user|xref:rest-api:definitions.adoc#_org_handler_putorgusersroles[org_handler.PutOrgUsersRoles] -|=== + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc new file mode 100644 index 00000000..39e38b2e --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc @@ -0,0 +1,523 @@ += Upgrade a cloud provider +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Upgrades the Savanna components deployed in a Bring Your Own Cloud (BYOC) provider's cloud account, and optionally resizes its node groups.

+ +
+
+
+
+ PUT + /controller/v4/v2/cloud-providers/{cloudProviderID}/upgrade +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Path parameters

+
+
+ # + cloudProviderID + string + path + required +
+

Cloud Provider ID

+
+
+
+

Body

+
+
+ # + cluster_enabled_log_types + string[] +
+

Kubernetes control-plane log types to enable after the upgrade.

+

Available options: api, audit, authenticator, controllerManager, scheduler

+
+
+
+ # + components + object[] +
+

Components and target versions to apply.

+
+ + Show child attributes + Hide child attributes + +
+
+
namestring
+

Name of the component to upgrade.

+
+
+
versionstring
+

Target version of the component.

+
+
+
+
+
+
+ # + node_group_config + object +
+

Kubernetes node-group configuration to apply during the upgrade.

+
+ + Show child attributes + Hide child attributes + +
+
+
ng_16object
+

Configuration of the 16-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_32object
+

Configuration of the 32-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_48object
+

Configuration of the 48-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_64object
+

Configuration of the 64-unit node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
ng_systemobject
+

Configuration of the system node group.

+
+ + Show child attributes + Hide child attributes + +
+
+
max_sizeinteger
+

Maximum number of nodes in the group.

+
+
+
min_sizeinteger
+

Minimum number of nodes in the group.

+
+
+
overprovisioning_factorinteger
+

Additional capacity factor reserved above the requested workload.

+
+
+
+
+
+
prefetch_image_liststring[]
+

Container images to prefetch onto the nodes.

+
+
+
+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + object +
+

Payload returned by the request.

+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc new file mode 100644 index 00000000..ff3971ed --- /dev/null +++ b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc @@ -0,0 +1,332 @@ += Validate a cloud provider +:page-role: api-endpoint-detail +// Generated by lib/split-endpoints.js. Do not edit. +// Schemas and samples come from _catalog/openapi.json; attribute prose that +// the spec omits lives in lib/api-descriptions.json. + +++++ +
+

Checks whether a Bring Your Own Cloud (BYOC) registration would succeed, without creating anything.

+ +
+
+
+
+ POST + /controller/v4/v2/cloud-providers/validate +
+ +
+ +
+

Authorizations

+
+
+ x-api-key + string + header + required +
+

Authorization for TigerGraph Savanna. Send the key in the x-api-key request header.

+ Create an API key +
+
+
+

Body

+
+
+ # + account_id + string +
+

Cloud account identifier to validate.

+
+
+
+ # + platform + string + required +
+

Cloud platform to validate.

+
+
+
+ # + region + string + required +
+

Cloud region to validate.

+
+
+
+ # + role_arn + string + required +
+

Amazon Resource Name of the IAM role TigerGraph will assume.

+
+
+
+ # + role_external_id + string +
+

External identifier used when TigerGraph assumes the IAM role.

+
+
+
+ # + secure_connection + boolean +
+

Whether to validate a private, secure connection.

+
+
+
+
+

Response

+
+ 200 + application/json +
+
+
+
+ # + Error + boolean +
+

Indicates whether the request returned an error.

+
+
+
+ # + ErrorDetails + object[] +
+

Details about each error returned by the request.

+
+ + Show child attributes + Hide child attributes + +
+
+
FieldNamestring
+

Field associated with the error.

+
+
+
Reasonstring
+

Explanation of why the error occurred.

+
+
+
Typestring
+

Category of the error.

+

Available options: Internal-Error, Bad-Request, Not-Found, Forbidden, Unauthorized, API-Disabled, Quota-Exceed, Unknown

+
+
+
+
+
+
+ # + Message + string +
+

Human-readable summary of the request result.

+
+
+
+ # + RequestID + string +
+

Unique identifier for tracing the request.

+
+
+
+ # + Result + string +
+

Payload returned by the request.

+
+
+
+ + +
+
+++++ diff --git a/modules/savanna/modules/rest-api/pages/index-previous.adoc b/modules/savanna/modules/rest-api/pages/index-previous.adoc index 5c423790..4378211f 100644 --- a/modules/savanna/modules/rest-api/pages/index-previous.adoc +++ b/modules/savanna/modules/rest-api/pages/index-previous.adoc @@ -3,7 +3,7 @@ // This is a previous draft of the REST API overview, kept temporarily for side-by-side comparison with xref:savanna:rest-api:index.adoc[the current overview]. -The Savanna REST API is the control plane for TigerGraph Savanna. Use it to provision and manage the resources behind your graphs, such as workgroups, workspaces, backups, networking, and organization users, from your own scripts, services, and CI/CD pipelines instead of the Savanna UI. +The Savanna REST API is the control plane for TigerGraph Savanna. Use it to provision and manage the resources behind your graphs, such as cloud providers, workgroups, workspaces, add-ons, backups, networking, and organization users, from your own scripts, services, and CI/CD pipelines instead of the Savanna UI. Everything in this reference runs against a single base URL and authenticates with an API key, so you can automate the full lifecycle of a workspace: create it, size it, protect it with backups, schedule it to save cost, and tear it down when you are done. @@ -16,7 +16,7 @@ Savanna exposes two different APIs. Knowing which one you need saves time. |API |What it manages |Where it lives |*Control plane* (this reference) -|The resources _around_ your graph: workgroups, workspaces, databases, backups, IP allow lists, schedules, and org users. +|The resources _around_ your graph: cloud providers, workgroups, workspaces, databases, add-ons, backups, IP allow lists, schedules, and org users. |`https://api.tgcloud.io/controller/v4/v2` |*Data plane* (REST{plus}{plus}) @@ -35,7 +35,10 @@ Control-plane resources are nested. Most paths follow this hierarchy, so underst |Resource |What it is |*Organization* -|Your Savanna account boundary. Owns users, roles, and quotas. +|Your Savanna account boundary. Owns users, roles, quotas, add-ons, and cloud providers. + +|*Cloud provider* +|Where a workgroup deploys: a TigerGraph-operated region, or a Bring Your Own Cloud (BYOC) account you register. |*Workgroup* |A container that groups related workspaces and holds shared settings such as the IP allow list. Lives in a cloud provider and region. @@ -44,7 +47,7 @@ Control-plane resources are nested. Most paths follow this hierarchy, so underst |A running, independently scalable compute environment attached to a *database*. This is what you connect to, query, back up, pause, and schedule. |*Database* -|The persistent storage for a workspace's graph data, managed within its workgroup. +|The persistent storage for a workspace's graph data. Created with the workspace; managed within its workgroup. |=== A typical path reflects that nesting: @@ -107,9 +110,27 @@ Keep API keys out of source control. Store them as environment variables or in a The sections below group every documented endpoint by the job it does. Each link jumps straight to its request, parameters, and response. +=== Choose a cloud provider + +TigerGraph-operated providers are the default. Bring Your Own Cloud (BYOC) registers a cloud account you own so workgroups can run there. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/list-public-cloud-providers.adoc[List public cloud providers] |GET |List the providers TigerGraph operates. +|xref:savanna:rest-api:endpoints/list-cloud-providers.adoc[List cloud providers] |GET |List the BYOC providers registered to your organization. +|xref:savanna:rest-api:endpoints/get-cloud-provider-details.adoc[Get cloud provider details] |GET |Return one BYOC provider. +|xref:savanna:rest-api:endpoints/create-a-cloud-provider.adoc[Create a cloud provider] |POST |Register a cloud account you own with Savanna. +|xref:savanna:rest-api:endpoints/validate-a-cloud-provider.adoc[Validate a cloud provider] |POST |Check whether a BYOC registration would succeed. +|xref:savanna:rest-api:endpoints/update-a-cloud-provider.adoc[Update a cloud provider] |PUT |Rename a BYOC provider or record a version against it. +|xref:savanna:rest-api:endpoints/upgrade-a-cloud-provider.adoc[Upgrade a cloud provider] |PUT |Upgrade Savanna components in a BYOC account. +|xref:savanna:rest-api:endpoints/delete-a-cloud-provider.adoc[Delete a cloud provider] |DELETE |Unregister a BYOC provider. +|=== + === Provision graph infrastructure -Stand up and tear down the workgroups, workspaces, and databases that host your graphs. +Stand up and tear down the workgroups and workspaces that host your graphs. A database is created with the workspace; there is no separate create-database call. [options="header",cols="4a,1,5a"] |=== @@ -120,7 +141,7 @@ Stand up and tear down the workgroups, workspaces, and databases that host your |xref:savanna:rest-api:endpoints/get-workgroup-details.adoc[Get workgroup details] |GET |Retrieve one workgroup with its settings, workspaces, and databases. |xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup] |PUT |Change a workgroup's settings. |xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup] |DELETE |Remove a workgroup. -|xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] |POST |Create a workspace in a workgroup. +|xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] |POST |Create a workspace in a workgroup. The database is created with it. |xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details] |GET |Retrieve a workspace, including its status. |xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace] |PUT |Resize or reconfigure a workspace. |xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace] |DELETE |Remove a workspace. @@ -197,6 +218,25 @@ Restrict network access to a workgroup and manage the database users inside a wo |xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user] |DELETE |Remove a GSQL user. |=== +=== Enable add-ons + +Install GraphStudio, Insights, GraphQL, and other add-ons, then attach them to a workspace. + +[options="header",cols="4a,1,5a"] +|=== +|Operation |Method |Purpose + +|xref:savanna:rest-api:endpoints/list-available-add-ons.adoc[List available add-ons] |GET |List the add-ons available to your organization. +|xref:savanna:rest-api:endpoints/install-an-add-on.adoc[Install an add-on] |POST |Install an add-on, or enable or disable it. +|xref:savanna:rest-api:endpoints/list-installed-add-ons.adoc[List installed add-ons] |GET |List the add-ons installed for your organization. +|xref:savanna:rest-api:endpoints/get-installed-add-on-details.adoc[Get installed add-on details] |GET |Return a single installed add-on. +|xref:savanna:rest-api:endpoints/list-add-on-workspaces.adoc[List add-on workspaces] |GET |List the workspaces that have a given add-on enabled. +|xref:savanna:rest-api:endpoints/list-add-on-configurations.adoc[List add-on configurations] |GET |List configurations of a given name for an installed add-on. +|xref:savanna:rest-api:endpoints/create-an-add-on-configuration.adoc[Create an add-on configuration] |POST |Create a configuration for an installed add-on. +|xref:savanna:rest-api:endpoints/update-an-add-on-configuration.adoc[Update an add-on configuration] |PUT |Update a configuration of an installed add-on. +|xref:savanna:rest-api:endpoints/delete-an-add-on-configuration.adoc[Delete an add-on configuration] |DELETE |Delete a configuration of an installed add-on. +|=== + === Administer your organization Discover available capacity and manage the people in your org. @@ -234,13 +274,13 @@ xref:savanna:rest-api:index.adoc#_endpoints[Endpoints] Browse every control-plane endpoint with parameters and responses. ¦ -xref:savanna:rest-api:definitions.adoc[Definitions] - -Look up the request and response schemas used by the API. -¦ xref:savanna:rest-api:create-api-key.adoc[Create an API key] Generate a key for scripts and services that call the control plane. +¦ +xref:savanna:rest-api:data-plane-apis.adoc[Data-plane APIs] + +Read and write graph data with REST{plus}{plus} and GSQL. |=== == Where to go next diff --git a/modules/savanna/modules/rest-api/pages/index.adoc b/modules/savanna/modules/rest-api/pages/index.adoc index ddbf6d7f..0d27929d 100644 --- a/modules/savanna/modules/rest-api/pages/index.adoc +++ b/modules/savanna/modules/rest-api/pages/index.adoc @@ -1,8 +1,8 @@ = Savanna REST API :experimental: -:page-aliases: rest-api.adoc, authentication.adoc +:page-aliases: rest-api.adoc, authentication.adoc, definitions.adoc -Use the Savanna REST (Representational State Transfer) API to provision workgroups and workspaces, protect data with backups, control network access, and administer your organization programmatically. +Use the Savanna REST (Representational State Transfer) API to provision workgroups and workspaces, manage cloud providers and add-ons, protect data with backups, control network access, and administer your organization programmatically. The Savanna REST API is the *control plane* for TigerGraph Savanna. It manages the resources around your graph so you can automate the full lifecycle of a workspace from your own scripts, services, and CI/CD pipelines instead of the Savanna UI. Every endpoint is relative to a single base URL: @@ -15,7 +15,7 @@ To read and write the data inside a workspace (schema, loading jobs, and GSQL), == The resource model -Control-plane resources are nested, which makes the endpoints predictable: an *organization* owns *workgroups*, a workgroup contains *workspaces*, and each workspace is attached to a *database*. +Control-plane resources are nested, which makes the endpoints predictable: an *organization* owns *cloud providers* and *workgroups*, a workgroup contains *workspaces*, and each workspace is attached to a *database* created with that workspace. Add-ons install at the organization and attach to a workspace. == Authentication @@ -25,45 +25,58 @@ Every request to this API needs an API key in the `x-api-key` header. If you don The list below is grouped by task. Each endpoint has its own page with the parameters, payload, and responses for that call. +=== Choose a cloud provider + +TigerGraph-operated providers are the default. Bring Your Own Cloud (BYOC) registers a cloud account you own so workgroups can run there. + +* xref:savanna:rest-api:endpoints/list-public-cloud-providers.adoc[List public cloud providers]: list the providers TigerGraph operates. +* xref:savanna:rest-api:endpoints/list-cloud-providers.adoc[List cloud providers]: list the BYOC providers registered to your organization. +* xref:savanna:rest-api:endpoints/get-cloud-provider-details.adoc[Get cloud provider details]: return one BYOC provider. +* xref:savanna:rest-api:endpoints/create-a-cloud-provider.adoc[Create a cloud provider]: register a cloud account you own with Savanna. +* xref:savanna:rest-api:endpoints/validate-a-cloud-provider.adoc[Validate a cloud provider]: check whether a BYOC registration would succeed. +* xref:savanna:rest-api:endpoints/update-a-cloud-provider.adoc[Update a cloud provider]: rename a BYOC provider or record a version against it. +* xref:savanna:rest-api:endpoints/upgrade-a-cloud-provider.adoc[Upgrade a cloud provider]: upgrade Savanna components in a BYOC account. +* xref:savanna:rest-api:endpoints/delete-a-cloud-provider.adoc[Delete a cloud provider]: unregister a BYOC provider. + === Provision graph infrastructure -Create, update, and delete the workgroups, workspaces, and databases that host your graphs. +Create, update, and delete the workgroups and workspaces that host your graphs. A database is created with the workspace; there is no separate create-database call. -* xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup]: create a workgroup in your organization. +* xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup]: create a workgroup with a cloud provider, region, and deployment settings. * xref:savanna:rest-api:endpoints/list-workgroups.adoc[List workgroups]: list the workgroups in your organization. -* xref:savanna:rest-api:endpoints/get-workgroup-details.adoc[Get workgroup details]: retrieve one workgroup with its settings, workspaces, and databases. -* xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup]: change a workgroup's settings. -* xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup]: remove a workgroup. -* xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace]: create a workspace in a workgroup. -* xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details]: retrieve a workspace, including its status. -* xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace]: resize or reconfigure a workspace. -* xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]: remove a workspace. -* xref:savanna:rest-api:endpoints/get-database-details.adoc[Get database details]: retrieve a database in a workgroup. -* xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database]: change a database's settings. -* xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database]: remove a database from a workgroup. +* xref:savanna:rest-api:endpoints/get-workgroup-details.adoc[Get workgroup details]: return details for a workgroup. +* xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup]: update a workgroup name, application logging, or encryption settings. +* xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup]: delete a workgroup. +* xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace]: create a workspace in a workgroup. The database is created with it. +* xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details]: return details for a workspace. +* xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace]: update a workspace configuration. +* xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]: delete a workspace. +* xref:savanna:rest-api:endpoints/get-database-details.adoc[Get database details]: return details for a database. +* xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database]: rename a database. +* xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database]: delete a database. === Run workspaces on your terms Control when a workspace is running so it is available when you need it and idle when you don't. -* xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace]: start a paused workspace. -* xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace]: stop a workspace to save cost. +* xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace]: resume a paused workspace. +* xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace]: pause a workspace. * xref:savanna:rest-api:endpoints/refresh-a-workspace.adoc[Refresh a workspace]: refresh a workspace. -* xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]: schedule automatic pause and resume. -* xref:savanna:rest-api:endpoints/list-workspace-schedules.adoc[List workspace schedules]: list a workspace's schedules. -* xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule]: change an existing schedule. -* xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule]: remove a schedule. +* xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]: create a recurring workspace schedule. +* xref:savanna:rest-api:endpoints/list-workspace-schedules.adoc[List workspace schedules]: list the schedules for a workspace. +* xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule]: update a workspace schedule. +* xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule]: delete a workspace schedule. === Protect data with backups Back up a workspace, restore it, and automate backups on a recurring schedule. -* xref:savanna:rest-api:endpoints/list-backups.adoc[List backups]: list a workspace's backups. +* xref:savanna:rest-api:endpoints/list-backups.adoc[List backups]: list the backups for a workspace. * xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup]: restore a workspace from a backup. -* xref:savanna:rest-api:endpoints/get-backup-restore-status.adoc[Get backup restore status]: check the status of a restore job. -* xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup]: remove a backup. -* xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule]: retrieve the recurring backup schedule. -* xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule]: create or update the recurring backup schedule. +* xref:savanna:rest-api:endpoints/get-backup-restore-status.adoc[Get backup restore status]: return the status of a backup restore job. +* xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup]: delete the specified workspace backup. +* xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule]: return the backup schedule for a workspace. +* xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule]: create or replace the backup schedule for a workspace. NOTE: A _backup schedule_ automates snapshots of your data. A _workspace schedule_ automates pausing and resuming compute. They are separate features on separate endpoints. @@ -71,29 +84,43 @@ NOTE: A _backup schedule_ automates snapshots of your data. A _workspace schedul Restrict network access to a workgroup and manage the database users inside a workspace. -* xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP]: add an IP or CIDR range to the allow list. -* xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs]: list the allow list entries. -* xref:savanna:rest-api:endpoints/check-the-current-ip.adoc[Check the current IP]: return the caller's public IP and whether the allow list permits it. -* xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP]: edit an allow list entry. -* xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP]: remove an allow list entry. -* xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list]: enforce the IP allow list. -* xref:savanna:rest-api:endpoints/disable-the-allow-list.adoc[Disable the allow list]: stop enforcing the IP allow list. -* xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]: create a GSQL user in a workspace. -* xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users]: list the workspace's GSQL users. -* xref:savanna:rest-api:endpoints/update-an-in-database-users-password.adoc[Update an in-database user's password]: set a new password for a GSQL user in a workspace. -* xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user]: remove a GSQL user. +* xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP]: add an IP address or CIDR range to a workgroup allow list. +* xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs]: list the IP addresses and CIDR ranges on a workgroup allow list. +* xref:savanna:rest-api:endpoints/check-the-current-ip.adoc[Check the current IP]: return your current public IP and whether the allow list permits it. +* xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP]: update an entry in a workgroup allow list. +* xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP]: remove an IP address or CIDR range from a workgroup allow list. +* xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list]: enable IP allow-list enforcement for a workgroup. +* xref:savanna:rest-api:endpoints/disable-the-allow-list.adoc[Disable the allow list]: disable IP allow-list enforcement for a workgroup. +* xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]: create an in-database GSQL user for a workspace. +* xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users]: list the in-database GSQL users for a workspace. +* xref:savanna:rest-api:endpoints/update-an-in-database-users-password.adoc[Update an in-database user's password]: update an in-database GSQL user's password. +* xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user]: delete an in-database GSQL user from a workspace. + +=== Enable add-ons + +Install GraphStudio, Insights, GraphQL, and other add-ons, then attach them to a workspace. + +* xref:savanna:rest-api:endpoints/list-available-add-ons.adoc[List available add-ons]: list the add-ons available to your organization. +* xref:savanna:rest-api:endpoints/install-an-add-on.adoc[Install an add-on]: install an add-on, or enable or disable it. +* xref:savanna:rest-api:endpoints/list-installed-add-ons.adoc[List installed add-ons]: list the add-ons installed for your organization. +* xref:savanna:rest-api:endpoints/get-installed-add-on-details.adoc[Get installed add-on details]: return a single installed add-on. +* xref:savanna:rest-api:endpoints/list-add-on-workspaces.adoc[List add-on workspaces]: list the workspaces that have a given add-on enabled. +* xref:savanna:rest-api:endpoints/list-add-on-configurations.adoc[List add-on configurations]: list configurations of a given name for an installed add-on. +* xref:savanna:rest-api:endpoints/create-an-add-on-configuration.adoc[Create an add-on configuration]: create a configuration for an installed add-on. +* xref:savanna:rest-api:endpoints/update-an-add-on-configuration.adoc[Update an add-on configuration]: update a configuration of an installed add-on. +* xref:savanna:rest-api:endpoints/delete-an-add-on-configuration.adoc[Delete an add-on configuration]: delete a configuration of an installed add-on. === Administer your organization Discover available capacity and manage the people in your org. -* xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options]: discover the regions, TigerGraph versions, and workspace types available to your org. -* xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users]: list the users in your organization. -* xref:savanna:rest-api:endpoints/update-an-org-users-role.adoc[Update an org user's role]: change which role a user holds in your organization. +* xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options]: list the regions, TigerGraph versions, and workspace types available to your organization. +* xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users]: list the users in your organization. This endpoint does not support API key authentication. +* xref:savanna:rest-api:endpoints/update-an-org-users-role.adoc[Update an org user's role]: update an organization user's role. This endpoint does not support API key authentication. == Common use cases -* *Provision on demand*: stand up a full environment with xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] and xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace], then tear it down with xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]. +* *Provision on demand*: pick a provider with xref:savanna:rest-api:endpoints/list-public-cloud-providers.adoc[List public cloud providers], stand up a full environment with xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] and xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace], then tear it down with xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace]. * *Control cost automatically*: pause idle compute with xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace] and xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace], or automate it with xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule]. * *Protect your data*: snapshot and recover with xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule] and xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup]. * *Secure access*: restrict traffic with xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP] and xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list], and manage logins with xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user]. @@ -102,6 +129,5 @@ Discover available capacity and manage the people in your org. == Related topics * xref:savanna:rest-api:create-api-key.adoc[Create an API key]. Generate a key in Organization Settings. -* xref:savanna:rest-api:definitions.adoc[Definitions]. The request and response schemas used by the API. * xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. Data-plane curl, Python, and JavaScript examples. * xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP]. Drive Savanna with an AI agent. From eb9d8eccbd131eef2e1457719f6c6d4309280168 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 15:33:56 +0530 Subject: [PATCH 14/22] docs(savanna): retire draft REST API overview page Remove index-previous from nav and redirect it with a page alias on the current overview. --- lib/split-endpoints.js | 3 +- modules/savanna/modules/rest-api/nav.adoc | 1 - .../rest-api/pages/index-previous.adoc | 289 ------------------ .../savanna/modules/rest-api/pages/index.adoc | 2 +- 4 files changed, 2 insertions(+), 293 deletions(-) delete mode 100644 modules/savanna/modules/rest-api/pages/index-previous.adoc diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index 78f495a8..846256fb 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -170,7 +170,6 @@ function renderNav (grouped) { '** xref:index.adoc[Overview]', '** xref:rest-api:create-api-key.adoc[Create an API key]', '** xref:rest-api:data-plane-apis.adoc[Data-plane APIs]', - '** xref:rest-api:index-previous.adoc[Overview (previous)]', ] // Resource groups sit beside the other pages: one less level of indent // leaves room for the method badge. @@ -186,7 +185,7 @@ function renderNav (grouped) { /** Points existing deep links at the new per-endpoint pages. */ function rewriteIncomingLinks (endpoints) { const bySlug = new Map(endpoints.map((e) => [e.anchor, e.slug])) - const files = ['index.adoc', 'index-previous.adoc', 'data-plane-apis.adoc', 'create-api-key.adoc'] + const files = ['index.adoc', 'data-plane-apis.adoc', 'create-api-key.adoc'] const changed = [] for (const name of files) { const file = path.join(PAGES_DIR, name) diff --git a/modules/savanna/modules/rest-api/nav.adoc b/modules/savanna/modules/rest-api/nav.adoc index a2ab6a81..9fa28a49 100644 --- a/modules/savanna/modules/rest-api/nav.adoc +++ b/modules/savanna/modules/rest-api/nav.adoc @@ -5,7 +5,6 @@ ** xref:index.adoc[Overview] ** xref:rest-api:create-api-key.adoc[Create an API key] ** xref:rest-api:data-plane-apis.adoc[Data-plane APIs] -** xref:rest-api:index-previous.adoc[Overview (previous)] ** Cloud providers *** xref:rest-api:endpoints/create-a-cloud-provider.adoc[POST Create a cloud provider] *** xref:rest-api:endpoints/list-cloud-providers.adoc[GET List cloud providers] diff --git a/modules/savanna/modules/rest-api/pages/index-previous.adoc b/modules/savanna/modules/rest-api/pages/index-previous.adoc deleted file mode 100644 index 4378211f..00000000 --- a/modules/savanna/modules/rest-api/pages/index-previous.adoc +++ /dev/null @@ -1,289 +0,0 @@ -= Savanna REST API (previous overview) -:experimental: - -// This is a previous draft of the REST API overview, kept temporarily for side-by-side comparison with xref:savanna:rest-api:index.adoc[the current overview]. - -The Savanna REST API is the control plane for TigerGraph Savanna. Use it to provision and manage the resources behind your graphs, such as cloud providers, workgroups, workspaces, add-ons, backups, networking, and organization users, from your own scripts, services, and CI/CD pipelines instead of the Savanna UI. - -Everything in this reference runs against a single base URL and authenticates with an API key, so you can automate the full lifecycle of a workspace: create it, size it, protect it with backups, schedule it to save cost, and tear it down when you are done. - -== Control plane vs. data plane - -Savanna exposes two different APIs. Knowing which one you need saves time. - -[options="header",cols="1a,3a,3a"] -|=== -|API |What it manages |Where it lives - -|*Control plane* (this reference) -|The resources _around_ your graph: cloud providers, workgroups, workspaces, databases, add-ons, backups, IP allow lists, schedules, and org users. -|`https://api.tgcloud.io/controller/v4/v2` - -|*Data plane* (REST{plus}{plus}) -|The data _inside_ a workspace: schema, loading jobs, GSQL queries, and results. -|Your workspace host, for example `https://.i.tgcloud.io` -|=== - -For data-plane calls against a running workspace, see xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. To drive Savanna with an AI agent in natural language, see xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP]. - -== The resource model - -Control-plane resources are nested. Most paths follow this hierarchy, so understanding it makes the endpoints predictable. - -[options="header",cols="1a,4a"] -|=== -|Resource |What it is - -|*Organization* -|Your Savanna account boundary. Owns users, roles, quotas, add-ons, and cloud providers. - -|*Cloud provider* -|Where a workgroup deploys: a TigerGraph-operated region, or a Bring Your Own Cloud (BYOC) account you register. - -|*Workgroup* -|A container that groups related workspaces and holds shared settings such as the IP allow list. Lives in a cloud provider and region. - -|*Workspace* -|A running, independently scalable compute environment attached to a *database*. This is what you connect to, query, back up, pause, and schedule. - -|*Database* -|The persistent storage for a workspace's graph data. Created with the workspace; managed within its workgroup. -|=== - -A typical path reflects that nesting: - -[source] ----- -/controller/v4/v2/workgroups/{workgroupID}/workspaces/{workspaceID}/backups ----- - -== Base URL - -All control-plane endpoints are relative to: - -[source] ----- -https://api.tgcloud.io/controller/v4/v2 ----- - -Requests and responses use `application/json`. - -== Authentication - -Authenticate every control-plane request with an API key passed in the `x-api-key` header. - -[source,bash] ----- -curl -X GET "https://api.tgcloud.io/controller/v4/v2/workgroups" \ - -H "Content-Type: application/json" \ - -H "x-api-key: " ----- - -Savanna uses different credentials for different layers. Pick the one that matches the call you are making. - -[options="header",cols="2a,2a,3a,3a"] -|=== -|Credential |Sent as |Use it for |Where to get it - -|*Control-plane API key* -|`x-api-key` header -|Every endpoint in this reference (workgroups, workspaces, backups, org). -|xref:savanna:rest-api:create-api-key.adoc[Create an API key] - -|*Database secret* -|Bearer token on the workspace host -|Data-plane REST{plus}{plus} queries against a running workspace. -|xref:savanna:administration:settings/how2-create-database-secret.adoc[Create a database secret] - -|*In-database GSQL user* -|Managed through this API, used by the graph engine -|GSQL and role-based access _inside_ a workspace. -|<> (below) -|=== - -[TIP] -==== -Keep API keys out of source control. Store them as environment variables or in a secrets manager, and rotate them from the Savanna console. -==== - -== What you can do - -The sections below group every documented endpoint by the job it does. Each link jumps straight to its request, parameters, and response. - -=== Choose a cloud provider - -TigerGraph-operated providers are the default. Bring Your Own Cloud (BYOC) registers a cloud account you own so workgroups can run there. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/list-public-cloud-providers.adoc[List public cloud providers] |GET |List the providers TigerGraph operates. -|xref:savanna:rest-api:endpoints/list-cloud-providers.adoc[List cloud providers] |GET |List the BYOC providers registered to your organization. -|xref:savanna:rest-api:endpoints/get-cloud-provider-details.adoc[Get cloud provider details] |GET |Return one BYOC provider. -|xref:savanna:rest-api:endpoints/create-a-cloud-provider.adoc[Create a cloud provider] |POST |Register a cloud account you own with Savanna. -|xref:savanna:rest-api:endpoints/validate-a-cloud-provider.adoc[Validate a cloud provider] |POST |Check whether a BYOC registration would succeed. -|xref:savanna:rest-api:endpoints/update-a-cloud-provider.adoc[Update a cloud provider] |PUT |Rename a BYOC provider or record a version against it. -|xref:savanna:rest-api:endpoints/upgrade-a-cloud-provider.adoc[Upgrade a cloud provider] |PUT |Upgrade Savanna components in a BYOC account. -|xref:savanna:rest-api:endpoints/delete-a-cloud-provider.adoc[Delete a cloud provider] |DELETE |Unregister a BYOC provider. -|=== - -=== Provision graph infrastructure - -Stand up and tear down the workgroups and workspaces that host your graphs. A database is created with the workspace; there is no separate create-database call. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] |POST |Create a workgroup in your org. -|xref:savanna:rest-api:endpoints/list-workgroups.adoc[List workgroups] |GET |List the workgroups in your org. -|xref:savanna:rest-api:endpoints/get-workgroup-details.adoc[Get workgroup details] |GET |Retrieve one workgroup with its settings, workspaces, and databases. -|xref:savanna:rest-api:endpoints/update-a-workgroup.adoc[Update a workgroup] |PUT |Change a workgroup's settings. -|xref:savanna:rest-api:endpoints/delete-a-workgroup.adoc[Delete a workgroup] |DELETE |Remove a workgroup. -|xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] |POST |Create a workspace in a workgroup. The database is created with it. -|xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details] |GET |Retrieve a workspace, including its status. -|xref:savanna:rest-api:endpoints/update-a-workspace.adoc[Update a workspace] |PUT |Resize or reconfigure a workspace. -|xref:savanna:rest-api:endpoints/delete-a-workspace.adoc[Delete a workspace] |DELETE |Remove a workspace. -|xref:savanna:rest-api:endpoints/get-database-details.adoc[Get database details] |GET |Retrieve a database in a workgroup. -|xref:savanna:rest-api:endpoints/update-a-database.adoc[Update a database] |PUT |Change a database's settings. -|xref:savanna:rest-api:endpoints/delete-a-database.adoc[Delete a database] |DELETE |Remove a database from a workgroup. -|=== - -=== Run workspaces on your terms - -Control when a workspace is running so it is available when you need it and idle when you don't. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/resume-a-workspace.adoc[Resume a workspace] |POST |Start a paused workspace. -|xref:savanna:rest-api:endpoints/pause-a-workspace.adoc[Pause a workspace] |POST |Stop a workspace to save cost. -|xref:savanna:rest-api:endpoints/refresh-a-workspace.adoc[Refresh a workspace] |POST |Refresh a workspace. -|xref:savanna:rest-api:endpoints/create-a-workspace-schedule.adoc[Create a workspace schedule] |POST |Schedule automatic pause and resume. -|xref:savanna:rest-api:endpoints/list-workspace-schedules.adoc[List workspace schedules] |GET |List a workspace's schedules. -|xref:savanna:rest-api:endpoints/update-a-workspace-schedule.adoc[Update a workspace schedule] |PUT |Change an existing schedule. -|xref:savanna:rest-api:endpoints/delete-a-workspace-schedule.adoc[Delete a workspace schedule] |DELETE |Remove a schedule. -|=== - -=== Protect data with backups - -Back up a workspace, restore it, and automate backups on a recurring schedule. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/list-backups.adoc[List backups] |GET |List a workspace's backups. -|xref:savanna:rest-api:endpoints/restore-a-backup.adoc[Restore a backup] |POST |Restore a workspace from a backup. -|xref:savanna:rest-api:endpoints/get-backup-restore-status.adoc[Get backup restore status] |GET |Check the status of a restore job. -|xref:savanna:rest-api:endpoints/delete-a-backup.adoc[Delete a backup] |DELETE |Remove a backup. -|xref:savanna:rest-api:endpoints/get-backup-schedule.adoc[Get backup schedule] |GET |Retrieve the recurring backup schedule. -|xref:savanna:rest-api:endpoints/set-backup-schedule.adoc[Set backup schedule] |POST |Create or update the backup schedule. -|=== - -[NOTE] -==== -A _backup schedule_ automates snapshots of your data. A _workspace schedule_ automates pausing and resuming compute. They are separate features on separate endpoints. -==== - -=== Control who can connect - -Restrict network access to a workgroup and manage the database users inside a workspace. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/add-an-allowed-ip.adoc[Add an allowed IP] |POST |Add an IP or CIDR range to the allow list. -|xref:savanna:rest-api:endpoints/list-allowed-ips.adoc[List allowed IPs] |GET |List the allow list entries. -|xref:savanna:rest-api:endpoints/check-the-current-ip.adoc[Check the current IP] |GET |Return the caller's public IP and whether the allow list permits it. -|xref:savanna:rest-api:endpoints/update-an-allowed-ip.adoc[Update an allowed IP] |PUT |Edit an allow list entry. -|xref:savanna:rest-api:endpoints/delete-an-allowed-ip.adoc[Delete an allowed IP] |DELETE |Remove an allow list entry. -|xref:savanna:rest-api:endpoints/enable-the-allow-list.adoc[Enable the allow list] |PUT |Enforce the IP allow list. -|xref:savanna:rest-api:endpoints/disable-the-allow-list.adoc[Disable the allow list] |PUT |Stop enforcing the IP allow list. -|=== - -[#indb-users] -==== Manage in-database users - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/create-an-in-database-user.adoc[Create an in-database user] |POST |Create a GSQL user in a workspace. -|xref:savanna:rest-api:endpoints/list-in-database-users.adoc[List in-database users] |GET |List the workspace's GSQL users. -|xref:savanna:rest-api:endpoints/update-an-in-database-users-password.adoc[Update an in-database user's password] |PUT |Change an in-database user's password. -|xref:savanna:rest-api:endpoints/delete-an-in-database-user.adoc[Delete an in-database user] |DELETE |Remove a GSQL user. -|=== - -=== Enable add-ons - -Install GraphStudio, Insights, GraphQL, and other add-ons, then attach them to a workspace. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/list-available-add-ons.adoc[List available add-ons] |GET |List the add-ons available to your organization. -|xref:savanna:rest-api:endpoints/install-an-add-on.adoc[Install an add-on] |POST |Install an add-on, or enable or disable it. -|xref:savanna:rest-api:endpoints/list-installed-add-ons.adoc[List installed add-ons] |GET |List the add-ons installed for your organization. -|xref:savanna:rest-api:endpoints/get-installed-add-on-details.adoc[Get installed add-on details] |GET |Return a single installed add-on. -|xref:savanna:rest-api:endpoints/list-add-on-workspaces.adoc[List add-on workspaces] |GET |List the workspaces that have a given add-on enabled. -|xref:savanna:rest-api:endpoints/list-add-on-configurations.adoc[List add-on configurations] |GET |List configurations of a given name for an installed add-on. -|xref:savanna:rest-api:endpoints/create-an-add-on-configuration.adoc[Create an add-on configuration] |POST |Create a configuration for an installed add-on. -|xref:savanna:rest-api:endpoints/update-an-add-on-configuration.adoc[Update an add-on configuration] |PUT |Update a configuration of an installed add-on. -|xref:savanna:rest-api:endpoints/delete-an-add-on-configuration.adoc[Delete an add-on configuration] |DELETE |Delete a configuration of an installed add-on. -|=== - -=== Administer your organization - -Discover available capacity and manage the people in your org. - -[options="header",cols="4a,1,5a"] -|=== -|Operation |Method |Purpose - -|xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options] |GET |Discover the regions, TigerGraph versions, and workspace types available to your org. -|xref:savanna:rest-api:endpoints/list-org-users.adoc[List org users] |GET |List the users in your org. -|xref:savanna:rest-api:endpoints/update-an-org-users-role.adoc[Update an org user's role] |PUT |Change an org user's role. -|=== - -== Get started - -Provision your first workspace end to end, then connect to it on the data plane. - -. xref:savanna:rest-api:create-api-key.adoc[Create an API key] and export it as `x-api-key`. -. Call xref:savanna:rest-api:endpoints/get-supported-workspace-options.adoc[Get supported workspace options] to see the regions and workspace types available to you. -. xref:savanna:rest-api:endpoints/create-a-workgroup.adoc[Create a workgroup] in your chosen region. -. xref:savanna:rest-api:endpoints/create-a-workspace.adoc[Create a workspace] in that workgroup. -. Poll xref:savanna:rest-api:endpoints/get-workspace-details.adoc[Get workspace details] until its status is ready. -. xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs] to load data and run GSQL on the data plane. - -== Reference - -[.start-cards,cols="2",grid=none,frame=none, separator=¦] -|=== -¦ -xref:savanna:rest-api:index.adoc#_authentication[Authentication] - -Authenticate to the control plane before you call any endpoint. -¦ -xref:savanna:rest-api:index.adoc#_endpoints[Endpoints] - -Browse every control-plane endpoint with parameters and responses. -¦ -xref:savanna:rest-api:create-api-key.adoc[Create an API key] - -Generate a key for scripts and services that call the control plane. -¦ -xref:savanna:rest-api:data-plane-apis.adoc[Data-plane APIs] - -Read and write graph data with REST{plus}{plus} and GSQL. -|=== - -== Where to go next - -* xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs] for data-plane curl, Python, and JavaScript examples. -* xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP] when you want an AI agent to work against your database. diff --git a/modules/savanna/modules/rest-api/pages/index.adoc b/modules/savanna/modules/rest-api/pages/index.adoc index 0d27929d..46110184 100644 --- a/modules/savanna/modules/rest-api/pages/index.adoc +++ b/modules/savanna/modules/rest-api/pages/index.adoc @@ -1,6 +1,6 @@ = Savanna REST API :experimental: -:page-aliases: rest-api.adoc, authentication.adoc, definitions.adoc +:page-aliases: rest-api.adoc, authentication.adoc, definitions.adoc, index-previous.adoc Use the Savanna REST (Representational State Transfer) API to provision workgroups and workspaces, manage cloud providers and add-ons, protect data with backups, control network access, and administer your organization programmatically. From b73634cded71ebed02fbfad05eb3c9e85cfd4515 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 16:35:03 +0530 Subject: [PATCH 15/22] docs(savanna): add Run in Postman link on REST API overview --- modules/savanna/modules/rest-api/pages/index.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/savanna/modules/rest-api/pages/index.adoc b/modules/savanna/modules/rest-api/pages/index.adoc index 46110184..599e41f9 100644 --- a/modules/savanna/modules/rest-api/pages/index.adoc +++ b/modules/savanna/modules/rest-api/pages/index.adoc @@ -1,6 +1,7 @@ = Savanna REST API :experimental: :page-aliases: rest-api.adoc, authentication.adoc, definitions.adoc, index-previous.adoc +:page-postman-url: https://app.getpostman.com/run-collection/58400411-0fa01886-653b-4b29-9e2e-6e3f17f01f34?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D58400411-0fa01886-653b-4b29-9e2e-6e3f17f01f34%26entityType%3Dcollection%26workspaceId%3D0c2ec169-63bb-4082-bba0-d73cec75c2b2 Use the Savanna REST (Representational State Transfer) API to provision workgroups and workspaces, manage cloud providers and add-ons, protect data with backups, control network access, and administer your organization programmatically. From aa9a6b3522e2874e47640653c622295ba0ee66c5 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 16:35:03 +0530 Subject: [PATCH 16/22] build(savanna): generate Postman collection from public endpoints Add postman-collection.js to emit a v2.1 collection when running endpoints:split and export requestBodyJson from the API page renderer. --- lib/api-page.js | 2 +- lib/postman-collection.js | 155 ++ lib/split-endpoints.js | 5 +- .../savanna-rest-api.postman_collection.json | 2225 +++++++++++++++++ 4 files changed, 2385 insertions(+), 2 deletions(-) create mode 100644 lib/postman-collection.js create mode 100644 modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json diff --git a/lib/api-page.js b/lib/api-page.js index 65abf809..1e3e2658 100644 --- a/lib/api-page.js +++ b/lib/api-page.js @@ -647,4 +647,4 @@ function renderApiPage (endpoint) { return out.join('\n') } -module.exports = { renderApiPage } +module.exports = { renderApiPage, requestBodyJson } diff --git a/lib/postman-collection.js b/lib/postman-collection.js new file mode 100644 index 00000000..a927684b --- /dev/null +++ b/lib/postman-collection.js @@ -0,0 +1,155 @@ +'use strict' + +/** + * Builds a Postman Collection v2.1 from the public Savanna REST endpoints. + */ + +const fs = require('fs') +const path = require('path') +const { requestBodyJson } = require('./api-page') + +const SPEC = path.join(__dirname, '..', 'modules/savanna/modules/rest-api/_catalog/openapi.json') +const OUT = path.join( + __dirname, + '..', + 'modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json' +) + +const COLLECTION_ID = '7c4e1b2a-9d83-4f0e-a6c1-8b2d4e6f90ab' +const BASE_URL = 'https://api.tgcloud.io' + +function operationFor (spec, endpoint) { + const operation = (spec.paths[endpoint.path] || {})[endpoint.method.toLowerCase()] + if (!operation) throw new Error('no spec entry for ' + endpoint.method + ' ' + endpoint.path) + return operation +} + +function segmentPath (route) { + return String(route) + .split('/') + .filter(Boolean) + .map((segment) => { + const param = /^\{(.+)\}$/.exec(segment) + return param ? ':' + param[1] : segment + }) +} + +function pathVariables (parameters) { + return parameters + .filter((parameter) => parameter.in === 'path') + .map((parameter) => ({ + key: parameter.name, + value: '{{' + parameter.name + '}}', + description: parameter.description || '', + })) +} + +function queryParams (parameters) { + return parameters + .filter((parameter) => parameter.in === 'query') + .map((parameter) => ({ + key: parameter.name, + value: parameter.default != null ? String(parameter.default) : '{{' + parameter.name + '}}', + description: parameter.description || '', + disabled: !parameter.required, + })) +} + +function extraHeaders (parameters) { + return parameters + .filter((parameter) => parameter.in === 'header' && parameter.name.toLowerCase() !== 'x-api-key') + .map((parameter) => ({ + key: parameter.name, + value: '{{' + parameter.name + '}}', + type: 'text', + description: parameter.description || '', + })) +} + +function collectVariableKeys (endpoints) { + const keys = new Set(['baseUrl', 'apiKey']) + for (const endpoint of endpoints) { + for (const match of endpoint.path.matchAll(/\{([^}]+)\}/g)) keys.add(match[1]) + } + return [...keys] +} + +function requestItem (spec, endpoint) { + const operation = operationFor(spec, endpoint) + const parameters = operation.parameters || [] + const rawPath = endpoint.path.replace(/\{([^}]+)\}/g, ':$1') + const url = { + raw: '{{baseUrl}}' + rawPath, + host: ['{{baseUrl}}'], + path: segmentPath(endpoint.path), + } + const pathVars = pathVariables(parameters) + const query = queryParams(parameters) + if (pathVars.length) url.variable = pathVars + if (query.length) url.query = query + + const request = { + method: endpoint.method, + header: extraHeaders(parameters), + url, + description: operation.description || operation.summary || endpoint.label, + } + + const usesApiKey = (operation.security || []).some((entry) => Object.prototype.hasOwnProperty.call(entry, 'ApiKeyAuth')) + if (!usesApiKey) request.auth = { type: 'noauth' } + + const body = requestBodyJson(parameters) + if (body) { + request.header = request.header.concat({ key: 'Content-Type', value: 'application/json', type: 'text' }) + request.body = { mode: 'raw', raw: body, options: { raw: { language: 'json' } } } + } + + return { name: endpoint.label, request } +} + +function writePostmanCollection (grouped) { + const spec = JSON.parse(fs.readFileSync(SPEC, 'utf8')) + const endpoints = [] + const folders = [] + for (const [name, items] of grouped) { + if (!items.length) continue + folders.push({ + name, + item: items.map((endpoint) => { + endpoints.push(endpoint) + return requestItem(spec, endpoint) + }), + }) + } + + const collection = { + info: { + _postman_id: COLLECTION_ID, + name: 'TigerGraph Savanna REST API', + description: + 'Control-plane endpoints for TigerGraph Savanna (' + + BASE_URL + + '). Set apiKey to your Savanna API key (x-api-key). Org user endpoints do not accept API keys.', + schema: 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json', + }, + auth: { + type: 'apikey', + apikey: [ + { key: 'key', value: 'x-api-key', type: 'string' }, + { key: 'value', value: '{{apiKey}}', type: 'string' }, + { key: 'in', value: 'header', type: 'string' }, + ], + }, + variable: collectVariableKeys(endpoints).map((key) => ({ + key, + value: key === 'baseUrl' ? BASE_URL : '', + })), + item: folders, + } + + fs.mkdirSync(path.dirname(OUT), { recursive: true }) + fs.writeFileSync(OUT, JSON.stringify(collection, null, 2) + '\n') + return OUT +} + +module.exports = { writePostmanCollection } diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index 846256fb..a136f010 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -1,7 +1,7 @@ 'use strict' /** - * Writes one reference page per endpoint, then the module nav. + * Writes one reference page per endpoint, the module nav, and the Postman collection. * * Source of truth is modules/savanna/modules/rest-api/_catalog: endpoints.adoc * supplies the nav grouping and the anchors older deep links point at, and @@ -15,6 +15,7 @@ const fs = require('fs') const path = require('path') const { renderApiPage } = require('./api-page') +const { writePostmanCollection } = require('./postman-collection') const MODULE_DIR = path.join(__dirname, '..', 'modules/savanna/modules/rest-api') const CATALOG = path.join(MODULE_DIR, '_catalog/endpoints.adoc') @@ -233,9 +234,11 @@ function main () { fs.writeFileSync(path.join(ENDPOINTS_DIR, endpoint.slug + '.adoc'), renderPage(endpoint, endpoint.label)) } fs.writeFileSync(NAV, renderNav(grouped)) + const collection = writePostmanCollection(grouped) const rewritten = rewriteIncomingLinks(endpoints) console.log('wrote ' + endpoints.length + ' endpoint pages and nav') + console.log('wrote ' + path.relative(path.join(__dirname, '..'), collection)) if (rewritten.length) console.log('rewrote deep links in ' + rewritten.join(', ')) } diff --git a/modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json b/modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json new file mode 100644 index 00000000..6a21eac7 --- /dev/null +++ b/modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json @@ -0,0 +1,2225 @@ +{ + "info": { + "_postman_id": "7c4e1b2a-9d83-4f0e-a6c1-8b2d4e6f90ab", + "name": "TigerGraph Savanna REST API", + "description": "Control-plane endpoints for TigerGraph Savanna (https://api.tgcloud.io). Set apiKey to your Savanna API key (x-api-key). Org user endpoints do not accept API keys.", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "auth": { + "type": "apikey", + "apikey": [ + { + "key": "key", + "value": "x-api-key", + "type": "string" + }, + { + "key": "value", + "value": "{{apiKey}}", + "type": "string" + }, + { + "key": "in", + "value": "header", + "type": "string" + } + ] + }, + "variable": [ + { + "key": "baseUrl", + "value": "https://api.tgcloud.io" + }, + { + "key": "apiKey", + "value": "" + }, + { + "key": "cloudProviderID", + "value": "" + }, + { + "key": "workgroupID", + "value": "" + }, + { + "key": "workspaceID", + "value": "" + }, + { + "key": "addonsID", + "value": "" + }, + { + "key": "installedAddonsID", + "value": "" + }, + { + "key": "configName", + "value": "" + }, + { + "key": "configID", + "value": "" + }, + { + "key": "scheduleID", + "value": "" + }, + { + "key": "databaseID", + "value": "" + }, + { + "key": "job", + "value": "" + }, + { + "key": "id", + "value": "" + }, + { + "key": "userId", + "value": "" + } + ], + "item": [ + { + "name": "Cloud providers", + "item": [ + { + "name": "Create a cloud provider", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers" + ] + }, + "description": "Create a new cloud provider", + "body": { + "mode": "raw", + "raw": "{\n \"created_by\": \"string\",\n \"name\": \"string\",\n \"options\": {\n \"account_id\": \"string\",\n \"secure_connection\": false\n },\n \"platform\": \"string\",\n \"region\": \"string\",\n \"role_arn\": \"string\",\n \"role_external_id\": \"string\",\n \"type\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "List cloud providers", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers" + ] + }, + "description": "List all cloud provider belonging to the org" + } + }, + { + "name": "List public cloud providers", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/public", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers", + "public" + ] + }, + "description": "List of public cloud providers" + } + }, + { + "name": "Validate a cloud provider", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/validate", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers", + "validate" + ] + }, + "description": "Validate the cloud provider request", + "body": { + "mode": "raw", + "raw": "{\n \"account_id\": \"string\",\n \"platform\": \"string\",\n \"region\": \"string\",\n \"role_arn\": \"string\",\n \"role_external_id\": \"string\",\n \"secure_connection\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Get cloud provider details", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers", + ":cloudProviderID" + ], + "variable": [ + { + "key": "cloudProviderID", + "value": "{{cloudProviderID}}", + "description": "Cloud Provider ID" + } + ] + }, + "description": "Get a cloud provider by ID" + } + }, + { + "name": "Update a cloud provider", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers", + ":cloudProviderID" + ], + "variable": [ + { + "key": "cloudProviderID", + "value": "{{cloudProviderID}}", + "description": "Cloud Provider ID" + } + ] + }, + "description": "Update a cloud provider", + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"string\",\n \"version\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete a cloud provider", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers", + ":cloudProviderID" + ], + "variable": [ + { + "key": "cloudProviderID", + "value": "{{cloudProviderID}}", + "description": "Cloud Provider ID" + } + ] + }, + "description": "Delete a cloud provider" + } + }, + { + "name": "Upgrade a cloud provider", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID/upgrade", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "cloud-providers", + ":cloudProviderID", + "upgrade" + ], + "variable": [ + { + "key": "cloudProviderID", + "value": "{{cloudProviderID}}", + "description": "Cloud Provider ID" + } + ] + }, + "description": "Upgrade a cloud provider", + "body": { + "mode": "raw", + "raw": "{\n \"cluster_enabled_log_types\": [\n \"api\"\n ],\n \"components\": [],\n \"node_group_config\": {\n \"ng_16\": {},\n \"ng_32\": {},\n \"ng_48\": {},\n \"ng_64\": {},\n \"ng_system\": {},\n \"prefetch_image_list\": [\n \"string\"\n ]\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + } + ] + }, + { + "name": "Workgroups", + "item": [ + { + "name": "Create a workgroup", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups" + ] + }, + "description": "Create workgroups in your org", + "body": { + "mode": "raw", + "raw": "{\n \"cloud_provider_id\": \"string\",\n \"enable_application_log\": false,\n \"enable_encryption\": false,\n \"name\": \"string\",\n \"platform\": \"aws\",\n \"region\": \"string\",\n \"shared_storage\": false\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "List workgroups", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups" + ] + }, + "description": "Get workgroups for your org" + } + }, + { + "name": "Get workgroup details", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Get workgroup detail in your org" + } + }, + { + "name": "Update a workgroup", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Update workgroups in your org", + "body": { + "mode": "raw", + "raw": "{\n \"enable_application_log\": false,\n \"encryption_method\": \"TMK\",\n \"workgroup_name\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete a workgroup", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Get workgroup detail in your org" + } + } + ] + }, + { + "name": "Workspaces", + "item": [ + { + "name": "Create a workspace", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Create workspace in workgroup", + "body": { + "mode": "raw", + "raw": "{\n \"addons\": [],\n \"auto_stop_minutes\": 0,\n \"enable_auto_start\": false,\n \"enable_ha\": false,\n \"is_rw\": false,\n \"maintenance_window_day_of_week\": 0,\n \"maintenance_window_hour_of_day\": 0,\n \"maintenance_window_interval_weeks\": 0,\n \"maintenance_window_time_zone\": \"string\",\n \"name\": \"string\",\n \"solution_install_request\": {\n \"addons\": [],\n \"data_source_origin\": \"string\",\n \"name\": \"string\",\n \"solution_catalog_id\": \"string\"\n },\n \"tg_database_id\": \"string\",\n \"tg_version\": \"string\",\n \"update_strategy\": \"string\",\n \"workspace_type_name\": \"string\",\n \"x_test_env\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Get workspace details", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Get workspace in workgroup" + } + }, + { + "name": "Update a workspace", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Update workspace in workgroup", + "body": { + "mode": "raw", + "raw": "{\n \"addons\": [],\n \"agent_config\": {\n \"catalog_activity_update_interval_seconds\": 0,\n \"enable_topology_force_update\": false,\n \"heartbeat_interval_seconds\": 0,\n \"query_activity_update_interval_seconds\": 0,\n \"topology_update_interval_seconds\": 0\n },\n \"auto_stop_minutes\": 0,\n \"auto_upgrade_state\": \"string\",\n \"desired_tg_version\": \"string\",\n \"enable_auto_start\": false,\n \"enable_ha\": false,\n \"maintenance_window_day_of_week\": 0,\n \"maintenance_window_hour_of_day\": 0,\n \"maintenance_window_interval_weeks\": 0,\n \"maintenance_window_time_zone\": \"string\",\n \"pause\": false,\n \"update_strategy\": \"string\",\n \"workspace_name\": \"string\",\n \"workspace_type_name\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete a workspace", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Delete workspace in workgroup" + } + }, + { + "name": "Resume a workspace", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/resume", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "resume" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Resume workspace in workgroup" + } + }, + { + "name": "Pause a workspace", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/pause", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "pause" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Pause workspace in workgroup" + } + }, + { + "name": "Refresh a workspace", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/refresh", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "refresh" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Refresh workspace in workgroup" + } + } + ] + }, + { + "name": "Add-ons", + "item": [ + { + "name": "List available add-ons", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/addons/meta", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "addons", + "meta" + ] + }, + "description": "Get metadata for add-ons." + } + }, + { + "name": "Install an add-on", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/addons/:addonsID/install", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "addons", + ":addonsID", + "install" + ], + "variable": [ + { + "key": "addonsID", + "value": "{{addonsID}}", + "description": "Add-on ID" + } + ], + "query": [ + { + "key": "enable", + "value": "{{enable}}", + "description": "Enable or disable add-on", + "disabled": false + } + ] + }, + "description": "Installs an add-on by ID." + } + }, + { + "name": "List installed add-ons", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/installed-addons", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "installed-addons" + ] + }, + "description": "List all installed add-ons for the organization." + } + }, + { + "name": "Get installed add-on details", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/installed-addons/:installedAddonsID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "installed-addons", + ":installedAddonsID" + ], + "variable": [ + { + "key": "installedAddonsID", + "value": "{{installedAddonsID}}", + "description": "Installed Add-on ID" + } + ] + }, + "description": "Get details of an installed add-on by its ID." + } + }, + { + "name": "List add-on workspaces", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/addons/:addonsID/workspaces", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "addons", + ":addonsID", + "workspaces" + ], + "variable": [ + { + "key": "addonsID", + "value": "{{addonsID}}", + "description": "Addons ID" + } + ] + }, + "description": "Retrieves a list of workspaces associated with a specific addons ID." + } + }, + { + "name": "List add-on configurations", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/installed-addons/:installedAddonsID/configs/:configName", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "installed-addons", + ":installedAddonsID", + "configs", + ":configName" + ], + "variable": [ + { + "key": "installedAddonsID", + "value": "{{installedAddonsID}}", + "description": "Installed Add-on ID" + }, + { + "key": "configName", + "value": "{{configName}}", + "description": "Configuration Name" + } + ] + }, + "description": "List configurations for a specific installed add-on." + } + }, + { + "name": "Create an add-on configuration", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/add-ons/:installedAddonsID/configs", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "add-ons", + ":installedAddonsID", + "configs" + ], + "variable": [ + { + "key": "installedAddonsID", + "value": "{{installedAddonsID}}", + "description": "Installed Add-on ID" + } + ] + }, + "description": "Create a new configuration for a specific installed add-on.", + "body": { + "mode": "raw", + "raw": "{\n \"config_name\": \"string\",\n \"config_value\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Update an add-on configuration", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/add-ons/:installedAddonsID/configs/:configID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "add-ons", + ":installedAddonsID", + "configs", + ":configID" + ], + "variable": [ + { + "key": "installedAddonsID", + "value": "{{installedAddonsID}}", + "description": "Installed Add-on ID" + }, + { + "key": "configID", + "value": "{{configID}}", + "description": "Configuration ID" + } + ] + }, + "description": "Update an existing configuration for an add-on.", + "body": { + "mode": "raw", + "raw": "{\n \"config_value\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete an add-on configuration", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/add-ons/:installedAddonsID/configs/:configID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "add-ons", + ":installedAddonsID", + "configs", + ":configID" + ], + "variable": [ + { + "key": "installedAddonsID", + "value": "{{installedAddonsID}}", + "description": "Installed Add-on ID" + }, + { + "key": "configID", + "value": "{{configID}}", + "description": "Configuration ID" + } + ] + }, + "description": "Delete a specific configuration for an add-on." + } + } + ] + }, + { + "name": "Workspace schedules", + "item": [ + { + "name": "Create a workspace schedule", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "schedules" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Create a new workspace schedule for a given workspace", + "body": { + "mode": "raw", + "raw": "{\n \"date\": \"string\",\n \"id\": \"string\",\n \"repeat\": \"string\",\n \"repeat_on\": \"string\",\n \"time\": \"string\",\n \"timezone\": \"string\",\n \"workspace_id\": \"string\",\n \"workspace_type_name\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "List workspace schedules", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "schedules" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Retrieve the schedule for a given workspace" + } + }, + { + "name": "Update a workspace schedule", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules/:scheduleID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "schedules", + ":scheduleID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + }, + { + "key": "scheduleID", + "value": "{{scheduleID}}", + "description": "Schedule ID" + } + ] + }, + "description": "Update an existing workspace schedule for a given workspace", + "body": { + "mode": "raw", + "raw": "{\n \"date\": \"string\",\n \"id\": \"string\",\n \"repeat\": \"string\",\n \"repeat_on\": \"string\",\n \"time\": \"string\",\n \"timezone\": \"string\",\n \"workspace_id\": \"string\",\n \"workspace_type_name\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete a workspace schedule", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules/:scheduleID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "schedules", + ":scheduleID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + }, + { + "key": "scheduleID", + "value": "{{scheduleID}}", + "description": "Schedule ID" + } + ] + }, + "description": "Delete an existing workspace schedule for a given workspace" + } + } + ] + }, + { + "name": "Databases", + "item": [ + { + "name": "Get database details", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/databases/:databaseID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "databases", + ":databaseID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "databaseID", + "value": "{{databaseID}}", + "description": "Database ID" + } + ] + }, + "description": "Get database in workgroup" + } + }, + { + "name": "Update a database", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/databases/:databaseID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "databases", + ":databaseID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "databaseID", + "value": "{{databaseID}}", + "description": "Database ID" + } + ] + }, + "description": "Update database in workgroup", + "body": { + "mode": "raw", + "raw": "{\n \"tg_database_name\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete a database", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/databases/:databaseID", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "databases", + ":databaseID" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "databaseID", + "value": "{{databaseID}}", + "description": "Database ID" + } + ] + }, + "description": "Delete database in workgroup" + } + } + ] + }, + { + "name": "Backups", + "item": [ + { + "name": "List backups", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "backups" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "List all backups for a workspace" + } + }, + { + "name": "Restore a backup", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/restore", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "backups", + "restore" + ], + "variable": [ + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + }, + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Restore a backup for a workspace", + "body": { + "mode": "raw", + "raw": "{\n \"backup_id\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Get backup restore status", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/:job/status", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "backups", + ":job", + "status" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + }, + { + "key": "job", + "value": "{{job}}", + "description": "Job ID" + } + ] + }, + "description": "Get the status of a backup restore job" + } + }, + { + "name": "Delete a backup", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "backups" + ], + "variable": [ + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + }, + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Delete a backup for a workspace", + "body": { + "mode": "raw", + "raw": "{\n \"backup_id\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Get backup schedule", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/schedule", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "backups", + "schedule" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Get the backup schedule for a workspace" + } + }, + { + "name": "Set backup schedule", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/schedule", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "backups", + "schedule" + ], + "variable": [ + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + }, + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Set a backup schedule for a workspace", + "body": { + "mode": "raw", + "raw": "{\n \"max_backup_files\": 0,\n \"max_reserved_days\": 0,\n \"max_retry\": 0,\n \"pause\": false,\n \"schedule\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + } + ] + }, + { + "name": "IP allow list", + "item": [ + { + "name": "Add an allowed IP", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Add a new allowed IP to the workgroup", + "body": { + "mode": "raw", + "raw": "{\n \"cidr\": \"string\",\n \"id\": \"string\",\n \"note\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "List allowed IPs", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "List all allowed IPs in the workgroup" + } + }, + { + "name": "Check the current IP", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/current", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list", + "current" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Get the current IP and check if it is allowed in the workgroup" + } + }, + { + "name": "Update an allowed IP", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/:id", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list", + ":id" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "id", + "value": "{{id}}", + "description": "Allowed IP ID" + } + ] + }, + "description": "Update an existing allowed IP in the workgroup", + "body": { + "mode": "raw", + "raw": "{\n \"cidr\": \"string\",\n \"id\": \"string\",\n \"note\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete an allowed IP", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/:id", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list", + ":id" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "id", + "value": "{{id}}", + "description": "Allowed IP ID" + } + ] + }, + "description": "Delete an existing allowed IP from the workgroup" + } + }, + { + "name": "Enable the allow list", + "request": { + "method": "PUT", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/enable", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list", + "enable" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Enable the allow list for the workgroup" + } + }, + { + "name": "Disable the allow list", + "request": { + "method": "PUT", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/disable", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "allow_list", + "disable" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + } + ] + }, + "description": "Disable the allow list for the workgroup" + } + } + ] + }, + { + "name": "In-database users", + "item": [ + { + "name": "Create an in-database user", + "request": { + "method": "POST", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "dbuser" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Create a new in-database GSQL user in the specified workspace and workgroup.", + "body": { + "mode": "raw", + "raw": "{\n \"password\": \"string\",\n \"username\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "List in-database users", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "dbuser" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "List all in-database GSQL users in the specified workspace and workgroup." + } + }, + { + "name": "Update an in-database user's password", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "dbuser" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Update the password of an in-database GSQL user in the specified workspace and workgroup.", + "body": { + "mode": "raw", + "raw": "{\n \"password\": \"string\",\n \"username\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + }, + { + "name": "Delete an in-database user", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workgroups", + ":workgroupID", + "workspaces", + ":workspaceID", + "dbuser" + ], + "variable": [ + { + "key": "workgroupID", + "value": "{{workgroupID}}", + "description": "Workgroup ID" + }, + { + "key": "workspaceID", + "value": "{{workspaceID}}", + "description": "Workspace ID" + } + ] + }, + "description": "Delete an in-database GSQL user in the specified workspace and workgroup.", + "body": { + "mode": "raw", + "raw": "{\n \"password\": \"string\",\n \"username\": \"string\"\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + } + ] + }, + { + "name": "Organization", + "item": [ + { + "name": "Get supported workspace options", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/controller/v4/v2/workspaces/meta", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "controller", + "v4", + "v2", + "workspaces", + "meta" + ], + "query": [ + { + "key": "upgrade", + "value": "{{upgrade}}", + "description": "When true, tgVersions only include versions with allow_upgrade; when false or omitted (default), all create-allowed versions for the org are returned", + "disabled": true + } + ] + }, + "description": "Get regions/tgVersions/workspaceTypes supported for your org" + } + }, + { + "name": "List org users", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{baseUrl}}/users", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "users" + ] + }, + "description": "List of users in the org. Note: this endpoint is not APIKEY compatible", + "auth": { + "type": "noauth" + } + } + }, + { + "name": "Update an org user's role", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "type": "text" + } + ], + "url": { + "raw": "{{baseUrl}}/users/:userId/roles", + "host": [ + "{{baseUrl}}" + ], + "path": [ + "users", + ":userId", + "roles" + ], + "variable": [ + { + "key": "userId", + "value": "{{userId}}", + "description": "Id of the user" + } + ] + }, + "description": "Updates the role of an org user. Note: this endpoint is not APIKEY compatible", + "auth": { + "type": "noauth" + }, + "body": { + "mode": "raw", + "raw": "{\n \"roles\": [\n \"string\"\n ]\n}", + "options": { + "raw": { + "language": "json" + } + } + } + } + } + ] + } + ] +} From 5cf82f572b5946f953f7bf855045f9275a92986b Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 16:37:19 +0530 Subject: [PATCH 17/22] build(savanna): drop generated Postman collection from splitter Remove postman-collection.js and the checked-in collection artifact; the REST API overview still links to the hosted Postman collection. --- lib/api-page.js | 2 +- lib/postman-collection.js | 155 -- lib/split-endpoints.js | 5 +- .../savanna-rest-api.postman_collection.json | 2225 ----------------- 4 files changed, 2 insertions(+), 2385 deletions(-) delete mode 100644 lib/postman-collection.js delete mode 100644 modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json diff --git a/lib/api-page.js b/lib/api-page.js index 1e3e2658..65abf809 100644 --- a/lib/api-page.js +++ b/lib/api-page.js @@ -647,4 +647,4 @@ function renderApiPage (endpoint) { return out.join('\n') } -module.exports = { renderApiPage, requestBodyJson } +module.exports = { renderApiPage } diff --git a/lib/postman-collection.js b/lib/postman-collection.js deleted file mode 100644 index a927684b..00000000 --- a/lib/postman-collection.js +++ /dev/null @@ -1,155 +0,0 @@ -'use strict' - -/** - * Builds a Postman Collection v2.1 from the public Savanna REST endpoints. - */ - -const fs = require('fs') -const path = require('path') -const { requestBodyJson } = require('./api-page') - -const SPEC = path.join(__dirname, '..', 'modules/savanna/modules/rest-api/_catalog/openapi.json') -const OUT = path.join( - __dirname, - '..', - 'modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json' -) - -const COLLECTION_ID = '7c4e1b2a-9d83-4f0e-a6c1-8b2d4e6f90ab' -const BASE_URL = 'https://api.tgcloud.io' - -function operationFor (spec, endpoint) { - const operation = (spec.paths[endpoint.path] || {})[endpoint.method.toLowerCase()] - if (!operation) throw new Error('no spec entry for ' + endpoint.method + ' ' + endpoint.path) - return operation -} - -function segmentPath (route) { - return String(route) - .split('/') - .filter(Boolean) - .map((segment) => { - const param = /^\{(.+)\}$/.exec(segment) - return param ? ':' + param[1] : segment - }) -} - -function pathVariables (parameters) { - return parameters - .filter((parameter) => parameter.in === 'path') - .map((parameter) => ({ - key: parameter.name, - value: '{{' + parameter.name + '}}', - description: parameter.description || '', - })) -} - -function queryParams (parameters) { - return parameters - .filter((parameter) => parameter.in === 'query') - .map((parameter) => ({ - key: parameter.name, - value: parameter.default != null ? String(parameter.default) : '{{' + parameter.name + '}}', - description: parameter.description || '', - disabled: !parameter.required, - })) -} - -function extraHeaders (parameters) { - return parameters - .filter((parameter) => parameter.in === 'header' && parameter.name.toLowerCase() !== 'x-api-key') - .map((parameter) => ({ - key: parameter.name, - value: '{{' + parameter.name + '}}', - type: 'text', - description: parameter.description || '', - })) -} - -function collectVariableKeys (endpoints) { - const keys = new Set(['baseUrl', 'apiKey']) - for (const endpoint of endpoints) { - for (const match of endpoint.path.matchAll(/\{([^}]+)\}/g)) keys.add(match[1]) - } - return [...keys] -} - -function requestItem (spec, endpoint) { - const operation = operationFor(spec, endpoint) - const parameters = operation.parameters || [] - const rawPath = endpoint.path.replace(/\{([^}]+)\}/g, ':$1') - const url = { - raw: '{{baseUrl}}' + rawPath, - host: ['{{baseUrl}}'], - path: segmentPath(endpoint.path), - } - const pathVars = pathVariables(parameters) - const query = queryParams(parameters) - if (pathVars.length) url.variable = pathVars - if (query.length) url.query = query - - const request = { - method: endpoint.method, - header: extraHeaders(parameters), - url, - description: operation.description || operation.summary || endpoint.label, - } - - const usesApiKey = (operation.security || []).some((entry) => Object.prototype.hasOwnProperty.call(entry, 'ApiKeyAuth')) - if (!usesApiKey) request.auth = { type: 'noauth' } - - const body = requestBodyJson(parameters) - if (body) { - request.header = request.header.concat({ key: 'Content-Type', value: 'application/json', type: 'text' }) - request.body = { mode: 'raw', raw: body, options: { raw: { language: 'json' } } } - } - - return { name: endpoint.label, request } -} - -function writePostmanCollection (grouped) { - const spec = JSON.parse(fs.readFileSync(SPEC, 'utf8')) - const endpoints = [] - const folders = [] - for (const [name, items] of grouped) { - if (!items.length) continue - folders.push({ - name, - item: items.map((endpoint) => { - endpoints.push(endpoint) - return requestItem(spec, endpoint) - }), - }) - } - - const collection = { - info: { - _postman_id: COLLECTION_ID, - name: 'TigerGraph Savanna REST API', - description: - 'Control-plane endpoints for TigerGraph Savanna (' + - BASE_URL + - '). Set apiKey to your Savanna API key (x-api-key). Org user endpoints do not accept API keys.', - schema: 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json', - }, - auth: { - type: 'apikey', - apikey: [ - { key: 'key', value: 'x-api-key', type: 'string' }, - { key: 'value', value: '{{apiKey}}', type: 'string' }, - { key: 'in', value: 'header', type: 'string' }, - ], - }, - variable: collectVariableKeys(endpoints).map((key) => ({ - key, - value: key === 'baseUrl' ? BASE_URL : '', - })), - item: folders, - } - - fs.mkdirSync(path.dirname(OUT), { recursive: true }) - fs.writeFileSync(OUT, JSON.stringify(collection, null, 2) + '\n') - return OUT -} - -module.exports = { writePostmanCollection } diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index a136f010..846256fb 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -1,7 +1,7 @@ 'use strict' /** - * Writes one reference page per endpoint, the module nav, and the Postman collection. + * Writes one reference page per endpoint, then the module nav. * * Source of truth is modules/savanna/modules/rest-api/_catalog: endpoints.adoc * supplies the nav grouping and the anchors older deep links point at, and @@ -15,7 +15,6 @@ const fs = require('fs') const path = require('path') const { renderApiPage } = require('./api-page') -const { writePostmanCollection } = require('./postman-collection') const MODULE_DIR = path.join(__dirname, '..', 'modules/savanna/modules/rest-api') const CATALOG = path.join(MODULE_DIR, '_catalog/endpoints.adoc') @@ -234,11 +233,9 @@ function main () { fs.writeFileSync(path.join(ENDPOINTS_DIR, endpoint.slug + '.adoc'), renderPage(endpoint, endpoint.label)) } fs.writeFileSync(NAV, renderNav(grouped)) - const collection = writePostmanCollection(grouped) const rewritten = rewriteIncomingLinks(endpoints) console.log('wrote ' + endpoints.length + ' endpoint pages and nav') - console.log('wrote ' + path.relative(path.join(__dirname, '..'), collection)) if (rewritten.length) console.log('rewrote deep links in ' + rewritten.join(', ')) } diff --git a/modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json b/modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json deleted file mode 100644 index 6a21eac7..00000000 --- a/modules/savanna/modules/rest-api/assets/attachments/savanna-rest-api.postman_collection.json +++ /dev/null @@ -1,2225 +0,0 @@ -{ - "info": { - "_postman_id": "7c4e1b2a-9d83-4f0e-a6c1-8b2d4e6f90ab", - "name": "TigerGraph Savanna REST API", - "description": "Control-plane endpoints for TigerGraph Savanna (https://api.tgcloud.io). Set apiKey to your Savanna API key (x-api-key). Org user endpoints do not accept API keys.", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "auth": { - "type": "apikey", - "apikey": [ - { - "key": "key", - "value": "x-api-key", - "type": "string" - }, - { - "key": "value", - "value": "{{apiKey}}", - "type": "string" - }, - { - "key": "in", - "value": "header", - "type": "string" - } - ] - }, - "variable": [ - { - "key": "baseUrl", - "value": "https://api.tgcloud.io" - }, - { - "key": "apiKey", - "value": "" - }, - { - "key": "cloudProviderID", - "value": "" - }, - { - "key": "workgroupID", - "value": "" - }, - { - "key": "workspaceID", - "value": "" - }, - { - "key": "addonsID", - "value": "" - }, - { - "key": "installedAddonsID", - "value": "" - }, - { - "key": "configName", - "value": "" - }, - { - "key": "configID", - "value": "" - }, - { - "key": "scheduleID", - "value": "" - }, - { - "key": "databaseID", - "value": "" - }, - { - "key": "job", - "value": "" - }, - { - "key": "id", - "value": "" - }, - { - "key": "userId", - "value": "" - } - ], - "item": [ - { - "name": "Cloud providers", - "item": [ - { - "name": "Create a cloud provider", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers" - ] - }, - "description": "Create a new cloud provider", - "body": { - "mode": "raw", - "raw": "{\n \"created_by\": \"string\",\n \"name\": \"string\",\n \"options\": {\n \"account_id\": \"string\",\n \"secure_connection\": false\n },\n \"platform\": \"string\",\n \"region\": \"string\",\n \"role_arn\": \"string\",\n \"role_external_id\": \"string\",\n \"type\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "List cloud providers", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers" - ] - }, - "description": "List all cloud provider belonging to the org" - } - }, - { - "name": "List public cloud providers", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/public", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers", - "public" - ] - }, - "description": "List of public cloud providers" - } - }, - { - "name": "Validate a cloud provider", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/validate", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers", - "validate" - ] - }, - "description": "Validate the cloud provider request", - "body": { - "mode": "raw", - "raw": "{\n \"account_id\": \"string\",\n \"platform\": \"string\",\n \"region\": \"string\",\n \"role_arn\": \"string\",\n \"role_external_id\": \"string\",\n \"secure_connection\": false\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Get cloud provider details", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers", - ":cloudProviderID" - ], - "variable": [ - { - "key": "cloudProviderID", - "value": "{{cloudProviderID}}", - "description": "Cloud Provider ID" - } - ] - }, - "description": "Get a cloud provider by ID" - } - }, - { - "name": "Update a cloud provider", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers", - ":cloudProviderID" - ], - "variable": [ - { - "key": "cloudProviderID", - "value": "{{cloudProviderID}}", - "description": "Cloud Provider ID" - } - ] - }, - "description": "Update a cloud provider", - "body": { - "mode": "raw", - "raw": "{\n \"name\": \"string\",\n \"version\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete a cloud provider", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers", - ":cloudProviderID" - ], - "variable": [ - { - "key": "cloudProviderID", - "value": "{{cloudProviderID}}", - "description": "Cloud Provider ID" - } - ] - }, - "description": "Delete a cloud provider" - } - }, - { - "name": "Upgrade a cloud provider", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/cloud-providers/:cloudProviderID/upgrade", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "cloud-providers", - ":cloudProviderID", - "upgrade" - ], - "variable": [ - { - "key": "cloudProviderID", - "value": "{{cloudProviderID}}", - "description": "Cloud Provider ID" - } - ] - }, - "description": "Upgrade a cloud provider", - "body": { - "mode": "raw", - "raw": "{\n \"cluster_enabled_log_types\": [\n \"api\"\n ],\n \"components\": [],\n \"node_group_config\": {\n \"ng_16\": {},\n \"ng_32\": {},\n \"ng_48\": {},\n \"ng_64\": {},\n \"ng_system\": {},\n \"prefetch_image_list\": [\n \"string\"\n ]\n }\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - } - ] - }, - { - "name": "Workgroups", - "item": [ - { - "name": "Create a workgroup", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups" - ] - }, - "description": "Create workgroups in your org", - "body": { - "mode": "raw", - "raw": "{\n \"cloud_provider_id\": \"string\",\n \"enable_application_log\": false,\n \"enable_encryption\": false,\n \"name\": \"string\",\n \"platform\": \"aws\",\n \"region\": \"string\",\n \"shared_storage\": false\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "List workgroups", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups" - ] - }, - "description": "Get workgroups for your org" - } - }, - { - "name": "Get workgroup details", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Get workgroup detail in your org" - } - }, - { - "name": "Update a workgroup", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Update workgroups in your org", - "body": { - "mode": "raw", - "raw": "{\n \"enable_application_log\": false,\n \"encryption_method\": \"TMK\",\n \"workgroup_name\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete a workgroup", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Get workgroup detail in your org" - } - } - ] - }, - { - "name": "Workspaces", - "item": [ - { - "name": "Create a workspace", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Create workspace in workgroup", - "body": { - "mode": "raw", - "raw": "{\n \"addons\": [],\n \"auto_stop_minutes\": 0,\n \"enable_auto_start\": false,\n \"enable_ha\": false,\n \"is_rw\": false,\n \"maintenance_window_day_of_week\": 0,\n \"maintenance_window_hour_of_day\": 0,\n \"maintenance_window_interval_weeks\": 0,\n \"maintenance_window_time_zone\": \"string\",\n \"name\": \"string\",\n \"solution_install_request\": {\n \"addons\": [],\n \"data_source_origin\": \"string\",\n \"name\": \"string\",\n \"solution_catalog_id\": \"string\"\n },\n \"tg_database_id\": \"string\",\n \"tg_version\": \"string\",\n \"update_strategy\": \"string\",\n \"workspace_type_name\": \"string\",\n \"x_test_env\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Get workspace details", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Get workspace in workgroup" - } - }, - { - "name": "Update a workspace", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Update workspace in workgroup", - "body": { - "mode": "raw", - "raw": "{\n \"addons\": [],\n \"agent_config\": {\n \"catalog_activity_update_interval_seconds\": 0,\n \"enable_topology_force_update\": false,\n \"heartbeat_interval_seconds\": 0,\n \"query_activity_update_interval_seconds\": 0,\n \"topology_update_interval_seconds\": 0\n },\n \"auto_stop_minutes\": 0,\n \"auto_upgrade_state\": \"string\",\n \"desired_tg_version\": \"string\",\n \"enable_auto_start\": false,\n \"enable_ha\": false,\n \"maintenance_window_day_of_week\": 0,\n \"maintenance_window_hour_of_day\": 0,\n \"maintenance_window_interval_weeks\": 0,\n \"maintenance_window_time_zone\": \"string\",\n \"pause\": false,\n \"update_strategy\": \"string\",\n \"workspace_name\": \"string\",\n \"workspace_type_name\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete a workspace", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Delete workspace in workgroup" - } - }, - { - "name": "Resume a workspace", - "request": { - "method": "POST", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/resume", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "resume" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Resume workspace in workgroup" - } - }, - { - "name": "Pause a workspace", - "request": { - "method": "POST", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/pause", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "pause" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Pause workspace in workgroup" - } - }, - { - "name": "Refresh a workspace", - "request": { - "method": "POST", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/refresh", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "refresh" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Refresh workspace in workgroup" - } - } - ] - }, - { - "name": "Add-ons", - "item": [ - { - "name": "List available add-ons", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/addons/meta", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "addons", - "meta" - ] - }, - "description": "Get metadata for add-ons." - } - }, - { - "name": "Install an add-on", - "request": { - "method": "POST", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/addons/:addonsID/install", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "addons", - ":addonsID", - "install" - ], - "variable": [ - { - "key": "addonsID", - "value": "{{addonsID}}", - "description": "Add-on ID" - } - ], - "query": [ - { - "key": "enable", - "value": "{{enable}}", - "description": "Enable or disable add-on", - "disabled": false - } - ] - }, - "description": "Installs an add-on by ID." - } - }, - { - "name": "List installed add-ons", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/installed-addons", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "installed-addons" - ] - }, - "description": "List all installed add-ons for the organization." - } - }, - { - "name": "Get installed add-on details", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/installed-addons/:installedAddonsID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "installed-addons", - ":installedAddonsID" - ], - "variable": [ - { - "key": "installedAddonsID", - "value": "{{installedAddonsID}}", - "description": "Installed Add-on ID" - } - ] - }, - "description": "Get details of an installed add-on by its ID." - } - }, - { - "name": "List add-on workspaces", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/addons/:addonsID/workspaces", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "addons", - ":addonsID", - "workspaces" - ], - "variable": [ - { - "key": "addonsID", - "value": "{{addonsID}}", - "description": "Addons ID" - } - ] - }, - "description": "Retrieves a list of workspaces associated with a specific addons ID." - } - }, - { - "name": "List add-on configurations", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/installed-addons/:installedAddonsID/configs/:configName", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "installed-addons", - ":installedAddonsID", - "configs", - ":configName" - ], - "variable": [ - { - "key": "installedAddonsID", - "value": "{{installedAddonsID}}", - "description": "Installed Add-on ID" - }, - { - "key": "configName", - "value": "{{configName}}", - "description": "Configuration Name" - } - ] - }, - "description": "List configurations for a specific installed add-on." - } - }, - { - "name": "Create an add-on configuration", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/add-ons/:installedAddonsID/configs", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "add-ons", - ":installedAddonsID", - "configs" - ], - "variable": [ - { - "key": "installedAddonsID", - "value": "{{installedAddonsID}}", - "description": "Installed Add-on ID" - } - ] - }, - "description": "Create a new configuration for a specific installed add-on.", - "body": { - "mode": "raw", - "raw": "{\n \"config_name\": \"string\",\n \"config_value\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Update an add-on configuration", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/add-ons/:installedAddonsID/configs/:configID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "add-ons", - ":installedAddonsID", - "configs", - ":configID" - ], - "variable": [ - { - "key": "installedAddonsID", - "value": "{{installedAddonsID}}", - "description": "Installed Add-on ID" - }, - { - "key": "configID", - "value": "{{configID}}", - "description": "Configuration ID" - } - ] - }, - "description": "Update an existing configuration for an add-on.", - "body": { - "mode": "raw", - "raw": "{\n \"config_value\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete an add-on configuration", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/add-ons/:installedAddonsID/configs/:configID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "add-ons", - ":installedAddonsID", - "configs", - ":configID" - ], - "variable": [ - { - "key": "installedAddonsID", - "value": "{{installedAddonsID}}", - "description": "Installed Add-on ID" - }, - { - "key": "configID", - "value": "{{configID}}", - "description": "Configuration ID" - } - ] - }, - "description": "Delete a specific configuration for an add-on." - } - } - ] - }, - { - "name": "Workspace schedules", - "item": [ - { - "name": "Create a workspace schedule", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "schedules" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Create a new workspace schedule for a given workspace", - "body": { - "mode": "raw", - "raw": "{\n \"date\": \"string\",\n \"id\": \"string\",\n \"repeat\": \"string\",\n \"repeat_on\": \"string\",\n \"time\": \"string\",\n \"timezone\": \"string\",\n \"workspace_id\": \"string\",\n \"workspace_type_name\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "List workspace schedules", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "schedules" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Retrieve the schedule for a given workspace" - } - }, - { - "name": "Update a workspace schedule", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules/:scheduleID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "schedules", - ":scheduleID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - }, - { - "key": "scheduleID", - "value": "{{scheduleID}}", - "description": "Schedule ID" - } - ] - }, - "description": "Update an existing workspace schedule for a given workspace", - "body": { - "mode": "raw", - "raw": "{\n \"date\": \"string\",\n \"id\": \"string\",\n \"repeat\": \"string\",\n \"repeat_on\": \"string\",\n \"time\": \"string\",\n \"timezone\": \"string\",\n \"workspace_id\": \"string\",\n \"workspace_type_name\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete a workspace schedule", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/schedules/:scheduleID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "schedules", - ":scheduleID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - }, - { - "key": "scheduleID", - "value": "{{scheduleID}}", - "description": "Schedule ID" - } - ] - }, - "description": "Delete an existing workspace schedule for a given workspace" - } - } - ] - }, - { - "name": "Databases", - "item": [ - { - "name": "Get database details", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/databases/:databaseID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "databases", - ":databaseID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "databaseID", - "value": "{{databaseID}}", - "description": "Database ID" - } - ] - }, - "description": "Get database in workgroup" - } - }, - { - "name": "Update a database", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/databases/:databaseID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "databases", - ":databaseID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "databaseID", - "value": "{{databaseID}}", - "description": "Database ID" - } - ] - }, - "description": "Update database in workgroup", - "body": { - "mode": "raw", - "raw": "{\n \"tg_database_name\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete a database", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/databases/:databaseID", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "databases", - ":databaseID" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "databaseID", - "value": "{{databaseID}}", - "description": "Database ID" - } - ] - }, - "description": "Delete database in workgroup" - } - } - ] - }, - { - "name": "Backups", - "item": [ - { - "name": "List backups", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "backups" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "List all backups for a workspace" - } - }, - { - "name": "Restore a backup", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/restore", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "backups", - "restore" - ], - "variable": [ - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - }, - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Restore a backup for a workspace", - "body": { - "mode": "raw", - "raw": "{\n \"backup_id\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Get backup restore status", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/:job/status", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "backups", - ":job", - "status" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - }, - { - "key": "job", - "value": "{{job}}", - "description": "Job ID" - } - ] - }, - "description": "Get the status of a backup restore job" - } - }, - { - "name": "Delete a backup", - "request": { - "method": "DELETE", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "backups" - ], - "variable": [ - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - }, - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Delete a backup for a workspace", - "body": { - "mode": "raw", - "raw": "{\n \"backup_id\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Get backup schedule", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/schedule", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "backups", - "schedule" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Get the backup schedule for a workspace" - } - }, - { - "name": "Set backup schedule", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/backups/schedule", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "backups", - "schedule" - ], - "variable": [ - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - }, - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Set a backup schedule for a workspace", - "body": { - "mode": "raw", - "raw": "{\n \"max_backup_files\": 0,\n \"max_reserved_days\": 0,\n \"max_retry\": 0,\n \"pause\": false,\n \"schedule\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - } - ] - }, - { - "name": "IP allow list", - "item": [ - { - "name": "Add an allowed IP", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Add a new allowed IP to the workgroup", - "body": { - "mode": "raw", - "raw": "{\n \"cidr\": \"string\",\n \"id\": \"string\",\n \"note\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "List allowed IPs", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "List all allowed IPs in the workgroup" - } - }, - { - "name": "Check the current IP", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/current", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list", - "current" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Get the current IP and check if it is allowed in the workgroup" - } - }, - { - "name": "Update an allowed IP", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/:id", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list", - ":id" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "id", - "value": "{{id}}", - "description": "Allowed IP ID" - } - ] - }, - "description": "Update an existing allowed IP in the workgroup", - "body": { - "mode": "raw", - "raw": "{\n \"cidr\": \"string\",\n \"id\": \"string\",\n \"note\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete an allowed IP", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/:id", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list", - ":id" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "id", - "value": "{{id}}", - "description": "Allowed IP ID" - } - ] - }, - "description": "Delete an existing allowed IP from the workgroup" - } - }, - { - "name": "Enable the allow list", - "request": { - "method": "PUT", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/enable", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list", - "enable" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Enable the allow list for the workgroup" - } - }, - { - "name": "Disable the allow list", - "request": { - "method": "PUT", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/allow_list/disable", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "allow_list", - "disable" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - } - ] - }, - "description": "Disable the allow list for the workgroup" - } - } - ] - }, - { - "name": "In-database users", - "item": [ - { - "name": "Create an in-database user", - "request": { - "method": "POST", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "dbuser" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Create a new in-database GSQL user in the specified workspace and workgroup.", - "body": { - "mode": "raw", - "raw": "{\n \"password\": \"string\",\n \"username\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "List in-database users", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "dbuser" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "List all in-database GSQL users in the specified workspace and workgroup." - } - }, - { - "name": "Update an in-database user's password", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "dbuser" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Update the password of an in-database GSQL user in the specified workspace and workgroup.", - "body": { - "mode": "raw", - "raw": "{\n \"password\": \"string\",\n \"username\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - }, - { - "name": "Delete an in-database user", - "request": { - "method": "DELETE", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workgroups/:workgroupID/workspaces/:workspaceID/dbuser", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workgroups", - ":workgroupID", - "workspaces", - ":workspaceID", - "dbuser" - ], - "variable": [ - { - "key": "workgroupID", - "value": "{{workgroupID}}", - "description": "Workgroup ID" - }, - { - "key": "workspaceID", - "value": "{{workspaceID}}", - "description": "Workspace ID" - } - ] - }, - "description": "Delete an in-database GSQL user in the specified workspace and workgroup.", - "body": { - "mode": "raw", - "raw": "{\n \"password\": \"string\",\n \"username\": \"string\"\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - } - ] - }, - { - "name": "Organization", - "item": [ - { - "name": "Get supported workspace options", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/controller/v4/v2/workspaces/meta", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "controller", - "v4", - "v2", - "workspaces", - "meta" - ], - "query": [ - { - "key": "upgrade", - "value": "{{upgrade}}", - "description": "When true, tgVersions only include versions with allow_upgrade; when false or omitted (default), all create-allowed versions for the org are returned", - "disabled": true - } - ] - }, - "description": "Get regions/tgVersions/workspaceTypes supported for your org" - } - }, - { - "name": "List org users", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{baseUrl}}/users", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "users" - ] - }, - "description": "List of users in the org. Note: this endpoint is not APIKEY compatible", - "auth": { - "type": "noauth" - } - } - }, - { - "name": "Update an org user's role", - "request": { - "method": "PUT", - "header": [ - { - "key": "Content-Type", - "value": "application/json", - "type": "text" - } - ], - "url": { - "raw": "{{baseUrl}}/users/:userId/roles", - "host": [ - "{{baseUrl}}" - ], - "path": [ - "users", - ":userId", - "roles" - ], - "variable": [ - { - "key": "userId", - "value": "{{userId}}", - "description": "Id of the user" - } - ] - }, - "description": "Updates the role of an org user. Note: this endpoint is not APIKEY compatible", - "auth": { - "type": "noauth" - }, - "body": { - "mode": "raw", - "raw": "{\n \"roles\": [\n \"string\"\n ]\n}", - "options": { - "raw": { - "language": "json" - } - } - } - } - } - ] - } - ] -} From 248e50e2f0dd028667057ba79c3f9589ce1e8fe1 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 16:57:15 +0530 Subject: [PATCH 18/22] fix(savanna): use angle-bracket placeholders in API samples Render synthesized string fields as and stop forcing empty Message values on success responses in generated examples. --- lib/api-page.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/api-page.js b/lib/api-page.js index 65abf809..3d3e6b1f 100644 --- a/lib/api-page.js +++ b/lib/api-page.js @@ -19,6 +19,8 @@ const BASE_URL = 'https://api.tgcloud.io' // pathological one. Recursion already stops when a definition repeats. const MAX_DEPTH = 12 const MAX_EXAMPLE_DEPTH = 4 +// Angle brackets mark a string as a slot to fill or read, not a literal value. +const STRING_PLACEHOLDER = '' const LANGUAGES = [ ['curl', 'cURL', 'bash'], @@ -388,7 +390,7 @@ function sampleValue (schema, trail, depth) { if (resolved.type === 'boolean') return false if (resolved.type === 'integer' || resolved.type === 'number') return 0 if (resolved.format === 'date-time') return '2026-01-01T00:00:00Z' - return 'string' + return STRING_PLACEHOLDER } /** @@ -403,7 +405,6 @@ function asStatus (sample, code) { const out = { ...sample } if ('Error' in out) out.Error = failed if ('ErrorDetails' in out && !failed) out.ErrorDetails = [] - if ('Message' in out) out.Message = failed ? 'string' : '' if ('Result' in out && failed) delete out.Result return out } From 0382600ce9911ef67e873a831c3e8971dc2562bc Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 16:57:19 +0530 Subject: [PATCH 19/22] docs(savanna): regenerate endpoint pages with placeholder samples --- .../pages/endpoints/add-an-allowed-ip.adoc | 68 +++--- .../pages/endpoints/check-the-current-ip.adoc | 14 +- .../endpoints/create-a-cloud-provider.adoc | 168 ++++++------- .../pages/endpoints/create-a-workgroup.adoc | 150 ++++++------ .../create-a-workspace-schedule.adoc | 148 ++++++------ .../pages/endpoints/create-a-workspace.adoc | 222 +++++++++--------- .../create-an-add-on-configuration.adoc | 50 ++-- .../endpoints/create-an-in-database-user.adoc | 76 +++--- .../pages/endpoints/delete-a-backup.adoc | 36 +-- .../endpoints/delete-a-cloud-provider.adoc | 6 +- .../pages/endpoints/delete-a-database.adoc | 6 +- .../pages/endpoints/delete-a-workgroup.adoc | 6 +- .../delete-a-workspace-schedule.adoc | 14 +- .../pages/endpoints/delete-a-workspace.adoc | 6 +- .../delete-an-add-on-configuration.adoc | 20 +- .../pages/endpoints/delete-an-allowed-ip.adoc | 14 +- .../endpoints/delete-an-in-database-user.adoc | 50 ++-- .../endpoints/disable-the-allow-list.adoc | 14 +- .../endpoints/enable-the-allow-list.adoc | 14 +- .../endpoints/get-backup-restore-status.adoc | 20 +- .../pages/endpoints/get-backup-schedule.adoc | 14 +- .../endpoints/get-cloud-provider-details.adoc | 56 ++--- .../pages/endpoints/get-database-details.adoc | 90 +++---- .../get-installed-add-on-details.adoc | 22 +- .../get-supported-workspace-options.adoc | 26 +- .../endpoints/get-workspace-details.adoc | 82 +++---- .../pages/endpoints/install-an-add-on.adoc | 22 +- .../endpoints/list-add-on-configurations.adoc | 22 +- .../endpoints/list-add-on-workspaces.adoc | 96 ++++---- .../pages/endpoints/list-allowed-ips.adoc | 18 +- .../endpoints/list-available-add-ons.adoc | 22 +- .../pages/endpoints/list-backups.adoc | 26 +- .../pages/endpoints/list-cloud-providers.adoc | 56 ++--- .../endpoints/list-in-database-users.adoc | 40 ++-- .../endpoints/list-installed-add-ons.adoc | 14 +- .../pages/endpoints/list-org-users.adoc | 40 ++-- .../list-public-cloud-providers.adoc | 20 +- .../pages/endpoints/list-workgroups.adoc | 102 ++++---- .../endpoints/list-workspace-schedules.adoc | 28 +-- .../pages/endpoints/pause-a-workspace.adoc | 6 +- .../pages/endpoints/refresh-a-workspace.adoc | 6 +- .../pages/endpoints/restore-a-backup.adoc | 36 +-- .../pages/endpoints/resume-a-workspace.adoc | 6 +- .../pages/endpoints/set-backup-schedule.adoc | 36 +-- .../endpoints/update-a-cloud-provider.adoc | 84 +++---- .../pages/endpoints/update-a-database.adoc | 104 ++++---- .../pages/endpoints/update-a-workgroup.adoc | 122 +++++----- .../update-a-workspace-schedule.adoc | 134 +++++------ .../pages/endpoints/update-a-workspace.adoc | 166 ++++++------- .../update-an-add-on-configuration.adoc | 36 +-- .../pages/endpoints/update-an-allowed-ip.adoc | 68 +++--- .../update-an-in-database-users-password.adoc | 50 ++-- .../endpoints/update-an-org-users-role.adoc | 14 +- .../endpoints/upgrade-a-cloud-provider.adoc | 20 +- .../endpoints/validate-a-cloud-provider.adoc | 76 +++--- 55 files changed, 1431 insertions(+), 1431 deletions(-) diff --git a/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc index 0c69c74d..1dcad7ed 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/add-an-allowed-ip.adoc @@ -337,18 +337,18 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" }' method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" }), } ) @@ -376,15 +376,15 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" } """)) .build(); @@ -417,9 +417,9 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -445,37 +445,37 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "cidr": "string",
-    "id": "string",
-    "note": "string"
+    "cidr": "<string>",
+    "id": "<string>",
+    "note": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc index 1ab11de1..80dc219c 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/check-the-current-ip.adoc @@ -301,24 +301,24 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     " IsAllowed": false,
-    "CurrentIP": "string"
+    "CurrentIP": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc index 876c5e95..3100e021 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-cloud-provider.adoc @@ -496,34 +496,34 @@ and 'public' when called by the public cloud provider creation API.

--header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "created_by": "string", - "name": "string", + "created_by": "<string>", + "name": "<string>", "options": { - "account_id": "string", + "account_id": "<string>", "secure_connection": false }, - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", - "type": "string" + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", + "type": "<string>" }' method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "created_by": "string", - "name": "string", + "created_by": "<string>", + "name": "<string>", "options": { - "account_id": "string", + "account_id": "<string>", "secure_connection": false }, - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", - "type": "string" + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", + "type": "<string>" }), } ) @@ -559,31 +559,31 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "created_by": "string", - "name": "string", + "created_by": "<string>", + "name": "<string>", "options": { - "account_id": "string", + "account_id": "<string>", "secure_connection": false }, - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", - "type": "string" + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", + "type": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "created_by": "string", - "name": "string", + "created_by": "<string>", + "name": "<string>", "options": { - "account_id": "string", + "account_id": "<string>", "secure_connection": false }, - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", - "type": "string" + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", + "type": "<string>" } """)) .build(); @@ -624,17 +624,17 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "created_by": "string", - "name": "string", + "created_by": "<string>", + "name": "<string>", "options": { - "account_id": "string", + "account_id": "<string>", "secure_connection": false }, - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", - "type": "string" + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", + "type": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -658,26 +658,26 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "api_tokens": [
-      "string"
+      "<string>"
     ],
     "availability_zones": [
-      "string"
+      "<string>"
     ],
     "cluster_enabled_log_types": [
       "api"
     ],
-    "component_versions": "string",
-    "created_at": "string",
-    "created_by": "string",
-    "eks_id": "string",
-    "endpoint_service_name": "string",
-    "id": "string",
-    "last_error": "string",
-    "name": "string",
+    "component_versions": "<string>",
+    "created_at": "<string>",
+    "created_by": "<string>",
+    "eks_id": "<string>",
+    "endpoint_service_name": "<string>",
+    "id": "<string>",
+    "last_error": "<string>",
+    "name": "<string>",
     "node_group_config": {
       "ng_16": {
         "max_size": 0,
@@ -705,31 +705,31 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         "overprovisioning_factor": 0
       },
       "prefetch_image_list": [
-        "string"
+        "<string>"
       ]
     },
     "options": {
-      "account_id": "string",
+      "account_id": "<string>",
       "secure_connection": false
     },
-    "org_id": "string",
-    "platform": "string",
-    "region": "string",
-    "role_arn": "string",
-    "role_external_id": "string",
-    "security_group_id": "string",
-    "short_id": "string",
-    "status": "string",
+    "org_id": "<string>",
+    "platform": "<string>",
+    "region": "<string>",
+    "role_arn": "<string>",
+    "role_external_id": "<string>",
+    "security_group_id": "<string>",
+    "short_id": "<string>",
+    "status": "<string>",
     "subnet_id": [
-      "string"
+      "<string>"
     ],
-    "type": "string",
-    "updated_at": "string",
-    "version": "string",
+    "type": "<string>",
+    "updated_at": "<string>",
+    "version": "<string>",
     "version_number": 0,
-    "vpc_id": "string",
+    "vpc_id": "<string>",
     "vpc_owned_by_tg": false,
-    "work_dir": "string"
+    "work_dir": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc index 727c2306..86e2f991 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workgroup.adoc @@ -1050,12 +1050,12 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "cloud_provider_id": "string", + "cloud_provider_id": "<string>", "enable_application_log": false, "enable_encryption": false, - "name": "string", + "name": "<string>", "platform": "aws", - "region": "string", + "region": "<string>", "shared_storage": false }' method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "cloud_provider_id": "string", + "cloud_provider_id": "<string>", "enable_application_log": false, "enable_encryption": false, - "name": "string", + "name": "<string>", "platform": "aws", - "region": "string", + "region": "<string>", "shared_storage": false }), } @@ -1101,22 +1101,22 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "cloud_provider_id": "string", + "cloud_provider_id": "<string>", "enable_application_log": false, "enable_encryption": false, - "name": "string", + "name": "<string>", "platform": "aws", - "region": "string", + "region": "<string>", "shared_storage": false }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "cloud_provider_id": "string", + "cloud_provider_id": "<string>", "enable_application_log": false, "enable_encryption": false, - "name": "string", + "name": "<string>", "platform": "aws", - "region": "string", + "region": "<string>", "shared_storage": false } """)) @@ -1154,12 +1154,12 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "cloud_provider_id": "string", + "cloud_provider_id": "<string>", "enable_application_log": false, "enable_encryption": false, - "name": "string", + "name": "<string>", "platform": "aws", - "region": "string", + "region": "<string>", "shared_storage": false } JSON @@ -1184,28 +1184,28 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "cloud_provider_id": "string",
-    "cloud_provider_name": "string",
-    "cloud_provider_status": "string",
-    "cloud_provider_type": "string",
-    "creator": "string",
+    "cloud_provider_id": "<string>",
+    "cloud_provider_name": "<string>",
+    "cloud_provider_status": "<string>",
+    "cloud_provider_type": "<string>",
+    "creator": "<string>",
     "enable_allow_list": false,
     "enable_application_log": false,
     "encryption_method": "TMK",
     "is_current_ip_allowed": false,
-    "name": "string",
-    "org_id": "string",
-    "org_name": "string",
+    "name": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
     "platform": "aws",
-    "region": "string",
+    "region": "<string>",
     "shared_storage": false,
     "tg_databases": [
       {
-        "create_time": "string",
-        "database_id": "string",
+        "create_time": "<string>",
+        "database_id": "<string>",
         "folder_statistics": {
           "backup_size": 0,
           "billed_size": 0,
@@ -1214,16 +1214,16 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "total_size": 0,
           "workspaces": []
         },
-        "name": "string",
-        "org_id": "string",
-        "org_name": "string",
-        "region": "string",
-        "tg_version": "string",
-        "workgroup_id": "string",
+        "name": "<string>",
+        "org_id": "<string>",
+        "org_name": "<string>",
+        "region": "<string>",
+        "tg_version": "<string>",
+        "workgroup_id": "<string>",
         "workspaces": []
       }
     ],
-    "workgroup_id": "string",
+    "workgroup_id": "<string>",
     "workspaces": [
       {
         "addons": [],
@@ -1235,23 +1235,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "topology_update_interval_seconds": 0
         },
         "auto_stop_minutes": 0,
-        "auto_upgrade_state": "string",
-        "cloud_provider_id": "string",
-        "cloud_provider_name": "string",
-        "cloud_provider_short_id": "string",
-        "condition_type": "string",
-        "created_at": "string",
-        "creator": "string",
-        "database_id": "string",
-        "database_name": "string",
-        "deleted_at": "string",
-        "desired_tg_version": "string",
-        "display_status": "string",
+        "auto_upgrade_state": "<string>",
+        "cloud_provider_id": "<string>",
+        "cloud_provider_name": "<string>",
+        "cloud_provider_short_id": "<string>",
+        "condition_type": "<string>",
+        "created_at": "<string>",
+        "creator": "<string>",
+        "database_id": "<string>",
+        "database_name": "<string>",
+        "deleted_at": "<string>",
+        "desired_tg_version": "<string>",
+        "display_status": "<string>",
         "edge_count": 0,
         "enable_auto_start": false,
         "enable_copilot": false,
         "enable_ha": false,
-        "err_message": "string",
+        "err_message": "<string>",
         "folder_statistics": {
           "backup_size": 0,
           "billed_size": 0,
@@ -1262,36 +1262,36 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         },
         "graph_topology_size_bytes": 0,
         "is_rw": false,
-        "last_maintenance": "string",
-        "last_modified_time": "string",
+        "last_maintenance": "<string>",
+        "last_modified_time": "<string>",
         "maintenance_window_day_of_week": 0,
         "maintenance_window_hour_of_day": 0,
         "maintenance_window_interval_weeks": 0,
-        "maintenance_window_time_zone": "string",
-        "name": "string",
-        "nginx_host": "string",
-        "org_id": "string",
-        "org_name": "string",
-        "refresh_message": "string",
-        "refresh_status": "string",
-        "region": "string",
+        "maintenance_window_time_zone": "<string>",
+        "name": "<string>",
+        "nginx_host": "<string>",
+        "org_id": "<string>",
+        "org_name": "<string>",
+        "refresh_message": "<string>",
+        "refresh_status": "<string>",
+        "region": "<string>",
         "replicas": 0,
-        "snapshot_time": "string",
-        "solution_catalog_id": "string",
-        "status": "string",
-        "tg_version": "string",
-        "update_strategy": "string",
+        "snapshot_time": "<string>",
+        "solution_catalog_id": "<string>",
+        "status": "<string>",
+        "tg_version": "<string>",
+        "update_strategy": "<string>",
         "version_number": 0,
         "vertex_count": 0,
-        "workgroup_id": "string",
-        "workgroup_name": "string",
-        "workspace_id": "string",
+        "workgroup_id": "<string>",
+        "workgroup_name": "<string>",
+        "workspace_id": "<string>",
         "workspace_type": {
-          "cpu": "string",
+          "cpu": "<string>",
           "ha": 0,
-          "memory": "string",
+          "memory": "<string>",
           "partition": 0,
-          "typeName": "string"
+          "typeName": "<string>"
         }
       }
     ]
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc
index d405c980..814cbd41 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace-schedule.adoc
@@ -410,28 +410,28 @@
   --header 'x-api-key: <your-api-key>' \
   --header 'Content-Type: application/json' \
   --data '{
-    "date": "string",
-    "id": "string",
-    "repeat": "string",
-    "repeat_on": "string",
-    "time": "string",
-    "timezone": "string",
-    "workspace_id": "string",
-    "workspace_type_name": "string"
+    "date": "<string>",
+    "id": "<string>",
+    "repeat": "<string>",
+    "repeat_on": "<string>",
+    "time": "<string>",
+    "timezone": "<string>",
+    "workspace_id": "<string>",
+    "workspace_type_name": "<string>"
   }'
method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" }), } ) @@ -464,25 +464,25 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" } """)) .build(); @@ -520,14 +520,14 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -553,42 +553,42 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "date": "string",
-    "id": "string",
-    "repeat": "string",
-    "repeat_on": "string",
-    "time": "string",
-    "timezone": "string",
-    "workspace_id": "string",
-    "workspace_type_name": "string"
+    "date": "<string>",
+    "id": "<string>",
+    "repeat": "<string>",
+    "repeat_on": "<string>",
+    "time": "<string>",
+    "timezone": "<string>",
+    "workspace_id": "<string>",
+    "workspace_type_name": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc index 859d90aa..e21a5022 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-a-workspace.adoc @@ -715,19 +715,19 @@ "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", - "name": "string", + "maintenance_window_time_zone": "<string>", + "name": "<string>", "solution_install_request": { "addons": [], - "data_source_origin": "string", - "name": "string", - "solution_catalog_id": "string" + "data_source_origin": "<string>", + "name": "<string>", + "solution_catalog_id": "<string>" }, - "tg_database_id": "string", - "tg_version": "string", - "update_strategy": "string", - "workspace_type_name": "string", - "x_test_env": "string" + "tg_database_id": "<string>", + "tg_version": "<string>", + "update_strategy": "<string>", + "workspace_type_name": "<string>", + "x_test_env": "<string>" }' "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", - "name": "string", + "maintenance_window_time_zone": "<string>", + "name": "<string>", "solution_install_request": { "addons": [], - "data_source_origin": "string", - "name": "string", - "solution_catalog_id": "string" + "data_source_origin": "<string>", + "name": "<string>", + "solution_catalog_id": "<string>" }, - "tg_database_id": "string", - "tg_version": "string", - "update_strategy": "string", - "workspace_type_name": "string", - "x_test_env": "string" + "tg_database_id": "<string>", + "tg_version": "<string>", + "update_strategy": "<string>", + "workspace_type_name": "<string>", + "x_test_env": "<string>" }), } ) @@ -808,19 +808,19 @@ curl_setopt($request, CURLOPT_POSTFIELDS, '{ "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", - "name": "string", + "maintenance_window_time_zone": "<string>", + "name": "<string>", "solution_install_request": { "addons": [], - "data_source_origin": "string", - "name": "string", - "solution_catalog_id": "string" + "data_source_origin": "<string>", + "name": "<string>", + "solution_catalog_id": "<string>" }, - "tg_database_id": "string", - "tg_version": "string", - "update_strategy": "string", - "workspace_type_name": "string", - "x_test_env": "string" + "tg_database_id": "<string>", + "tg_version": "<string>", + "update_strategy": "<string>", + "workspace_type_name": "<string>", + "x_test_env": "<string>" }'); curl_exec($request); "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", - "name": "string", + "maintenance_window_time_zone": "<string>", + "name": "<string>", "solution_install_request": { "addons": [], - "data_source_origin": "string", - "name": "string", - "solution_catalog_id": "string" + "data_source_origin": "<string>", + "name": "<string>", + "solution_catalog_id": "<string>" }, - "tg_database_id": "string", - "tg_version": "string", - "update_strategy": "string", - "workspace_type_name": "string", - "x_test_env": "string" + "tg_database_id": "<string>", + "tg_version": "<string>", + "update_strategy": "<string>", + "workspace_type_name": "<string>", + "x_test_env": "<string>" }`) request, _ := http.NewRequest( @@ -871,19 +871,19 @@ response, _ := http.DefaultClient.Do(request) "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", - "name": "string", + "maintenance_window_time_zone": "<string>", + "name": "<string>", "solution_install_request": { "addons": [], - "data_source_origin": "string", - "name": "string", - "solution_catalog_id": "string" + "data_source_origin": "<string>", + "name": "<string>", + "solution_catalog_id": "<string>" }, - "tg_database_id": "string", - "tg_version": "string", - "update_strategy": "string", - "workspace_type_name": "string", - "x_test_env": "string" + "tg_database_id": "<string>", + "tg_version": "<string>", + "update_strategy": "<string>", + "workspace_type_name": "<string>", + "x_test_env": "<string>" } """)) .build(); @@ -903,19 +903,19 @@ request.body = <<~JSON "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", - "name": "string", + "maintenance_window_time_zone": "<string>", + "name": "<string>", "solution_install_request": { "addons": [], - "data_source_origin": "string", - "name": "string", - "solution_catalog_id": "string" + "data_source_origin": "<string>", + "name": "<string>", + "solution_catalog_id": "<string>" }, - "tg_database_id": "string", - "tg_version": "string", - "update_strategy": "string", - "workspace_type_name": "string", - "x_test_env": "string" + "tg_database_id": "<string>", + "tg_version": "<string>", + "update_strategy": "<string>", + "workspace_type_name": "<string>", + "x_test_env": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -939,17 +939,17 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "addons": [
       {
-        "addons_id": "string",
+        "addons_id": "<string>",
         "enable": false,
-        "enable_configuration": "string",
+        "enable_configuration": "<string>",
         "is_free": false,
-        "unique_name": "string",
-        "workspace_id": "string"
+        "unique_name": "<string>",
+        "workspace_id": "<string>"
       }
     ],
     "agent_config": {
@@ -960,23 +960,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "topology_update_interval_seconds": 0
     },
     "auto_stop_minutes": 0,
-    "auto_upgrade_state": "string",
-    "cloud_provider_id": "string",
-    "cloud_provider_name": "string",
-    "cloud_provider_short_id": "string",
-    "condition_type": "string",
-    "created_at": "string",
-    "creator": "string",
-    "database_id": "string",
-    "database_name": "string",
-    "deleted_at": "string",
-    "desired_tg_version": "string",
-    "display_status": "string",
+    "auto_upgrade_state": "<string>",
+    "cloud_provider_id": "<string>",
+    "cloud_provider_name": "<string>",
+    "cloud_provider_short_id": "<string>",
+    "condition_type": "<string>",
+    "created_at": "<string>",
+    "creator": "<string>",
+    "database_id": "<string>",
+    "database_name": "<string>",
+    "deleted_at": "<string>",
+    "desired_tg_version": "<string>",
+    "display_status": "<string>",
     "edge_count": 0,
     "enable_auto_start": false,
     "enable_copilot": false,
     "enable_ha": false,
-    "err_message": "string",
+    "err_message": "<string>",
     "folder_statistics": {
       "backup_size": 0,
       "billed_size": 0,
@@ -986,42 +986,42 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "workspaces": [
         {
           "size": 0,
-          "workspace_id": "string"
+          "workspace_id": "<string>"
         }
       ]
     },
     "graph_topology_size_bytes": 0,
     "is_rw": false,
-    "last_maintenance": "string",
-    "last_modified_time": "string",
+    "last_maintenance": "<string>",
+    "last_modified_time": "<string>",
     "maintenance_window_day_of_week": 0,
     "maintenance_window_hour_of_day": 0,
     "maintenance_window_interval_weeks": 0,
-    "maintenance_window_time_zone": "string",
-    "name": "string",
-    "nginx_host": "string",
-    "org_id": "string",
-    "org_name": "string",
-    "refresh_message": "string",
-    "refresh_status": "string",
-    "region": "string",
+    "maintenance_window_time_zone": "<string>",
+    "name": "<string>",
+    "nginx_host": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
+    "refresh_message": "<string>",
+    "refresh_status": "<string>",
+    "region": "<string>",
     "replicas": 0,
-    "snapshot_time": "string",
-    "solution_catalog_id": "string",
-    "status": "string",
-    "tg_version": "string",
-    "update_strategy": "string",
+    "snapshot_time": "<string>",
+    "solution_catalog_id": "<string>",
+    "status": "<string>",
+    "tg_version": "<string>",
+    "update_strategy": "<string>",
     "version_number": 0,
     "vertex_count": 0,
-    "workgroup_id": "string",
-    "workgroup_name": "string",
-    "workspace_id": "string",
+    "workgroup_id": "<string>",
+    "workgroup_name": "<string>",
+    "workspace_id": "<string>",
     "workspace_type": {
-      "cpu": "string",
+      "cpu": "<string>",
       "ha": 0,
-      "memory": "string",
+      "memory": "<string>",
       "partition": 0,
-      "typeName": "string"
+      "typeName": "<string>"
     }
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc index 60c87f90..6b5b313d 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-add-on-configuration.adoc @@ -310,16 +310,16 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "config_name": "string", - "config_value": "string" + "config_name": "<string>", + "config_value": "<string>" }' method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "config_name": "string", - "config_value": "string" + "config_name": "<string>", + "config_value": "<string>" }), } ) @@ -346,13 +346,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "config_name": "string", - "config_value": "string" + "config_name": "<string>", + "config_value": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "config_name": "string", - "config_value": "string" + "config_name": "<string>", + "config_value": "<string>" } """)) .build(); @@ -384,8 +384,8 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "config_name": "string", - "config_value": "string" + "config_name": "<string>", + "config_value": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -411,33 +411,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc b/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc index 82e59c47..4a4883a6 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/create-an-in-database-user.adoc @@ -386,16 +386,16 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }' method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }), } ) @@ -422,13 +422,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" } """)) .build(); @@ -460,8 +460,8 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -487,49 +487,49 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "auth0UserID": "string",
-    "created": "string",
-    "description": "string",
-    "email": "string",
+    "auth0UserID": "<string>",
+    "created": "<string>",
+    "description": "<string>",
+    "email": "<string>",
     "enabled": false,
-    "firstName": "string",
-    "id": "string",
-    "lastName": "string",
-    "metadata": "string",
-    "path": "string",
-    "role": "string",
-    "tenantID": "string",
-    "trn": "string",
-    "updated": "string",
-    "username": "string"
+    "firstName": "<string>",
+    "id": "<string>",
+    "lastName": "<string>",
+    "metadata": "<string>",
+    "path": "<string>",
+    "role": "<string>",
+    "tenantID": "<string>",
+    "trn": "<string>",
+    "updated": "<string>",
+    "username": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc index cf9805bc..0e28ea00 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-backup.adoc @@ -311,14 +311,14 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "backup_id": "string" + "backup_id": "<string>" }' method: "DELETE", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "backup_id": "string" + "backup_id": "<string>" }), } ) @@ -344,11 +344,11 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "backup_id": "string" + "backup_id": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("DELETE", HttpRequest.BodyPublishers.ofString(""" { - "backup_id": "string" + "backup_id": "<string>" } """)) .build(); @@ -379,7 +379,7 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "backup_id": "string" + "backup_id": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -405,33 +405,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc index 5c8826ea..7ac744e6 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-cloud-provider.adoc @@ -213,9 +213,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc index e16e6c53..7f444f66 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-database.adoc @@ -223,9 +223,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc index 9b2afadd..73947620 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workgroup.adoc @@ -213,9 +213,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc index 800b0ee5..1e7a0780 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace-schedule.adoc @@ -307,21 +307,21 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc index 7234a9e6..3e058600 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-a-workspace.adoc @@ -223,9 +223,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc index 37d4fcbf..76ac8b7e 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-add-on-configuration.adoc @@ -362,33 +362,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": false
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc index d38f2e7e..206d6038 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-allowed-ip.adoc @@ -297,21 +297,21 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc index 909226f7..f60c7ed3 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/delete-an-in-database-user.adoc @@ -318,16 +318,16 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }' method: "DELETE", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }), } ) @@ -354,13 +354,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("DELETE", HttpRequest.BodyPublishers.ofString(""" { - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" } """)) .build(); @@ -392,8 +392,8 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -419,33 +419,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc b/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc index ffd8349c..406a47dc 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/disable-the-allow-list.adoc @@ -287,21 +287,21 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc b/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc index 490af041..9e6cf263 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/enable-the-allow-list.adoc @@ -287,21 +287,21 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc index 5417503f..ab170720 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-restore-status.adoc @@ -331,26 +331,26 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "created_at": "string",
-    "name": "string",
-    "output": "string",
-    "status": "string"
+    "created_at": "<string>",
+    "name": "<string>",
+    "output": "<string>",
+    "status": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc index 641a66fd..06148787 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-backup-schedule.adoc @@ -325,27 +325,27 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "max_backup_files": 0,
     "max_reserved_days": 0,
     "max_retry": 0,
     "pause": false,
-    "schedule": "string"
+    "schedule": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc index 619a2788..30b0a1d7 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-cloud-provider-details.adoc @@ -486,26 +486,26 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "api_tokens": [
-      "string"
+      "<string>"
     ],
     "availability_zones": [
-      "string"
+      "<string>"
     ],
     "cluster_enabled_log_types": [
       "api"
     ],
-    "component_versions": "string",
-    "created_at": "string",
-    "created_by": "string",
-    "eks_id": "string",
-    "endpoint_service_name": "string",
-    "id": "string",
-    "last_error": "string",
-    "name": "string",
+    "component_versions": "<string>",
+    "created_at": "<string>",
+    "created_by": "<string>",
+    "eks_id": "<string>",
+    "endpoint_service_name": "<string>",
+    "id": "<string>",
+    "last_error": "<string>",
+    "name": "<string>",
     "node_group_config": {
       "ng_16": {
         "max_size": 0,
@@ -533,31 +533,31 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         "overprovisioning_factor": 0
       },
       "prefetch_image_list": [
-        "string"
+        "<string>"
       ]
     },
     "options": {
-      "account_id": "string",
+      "account_id": "<string>",
       "secure_connection": false
     },
-    "org_id": "string",
-    "platform": "string",
-    "region": "string",
-    "role_arn": "string",
-    "role_external_id": "string",
-    "security_group_id": "string",
-    "short_id": "string",
-    "status": "string",
+    "org_id": "<string>",
+    "platform": "<string>",
+    "region": "<string>",
+    "role_arn": "<string>",
+    "role_external_id": "<string>",
+    "security_group_id": "<string>",
+    "short_id": "<string>",
+    "status": "<string>",
     "subnet_id": [
-      "string"
+      "<string>"
     ],
-    "type": "string",
-    "updated_at": "string",
-    "version": "string",
+    "type": "<string>",
+    "updated_at": "<string>",
+    "version": "<string>",
     "version_number": 0,
-    "vpc_id": "string",
+    "vpc_id": "<string>",
     "vpc_owned_by_tg": false,
-    "work_dir": "string"
+    "work_dir": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc index 7a65286c..6e5d8ea3 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-database-details.adoc @@ -655,11 +655,11 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "create_time": "string",
-    "database_id": "string",
+    "create_time": "<string>",
+    "database_id": "<string>",
     "folder_statistics": {
       "backup_size": 0,
       "billed_size": 0,
@@ -669,16 +669,16 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "workspaces": [
         {
           "size": 0,
-          "workspace_id": "string"
+          "workspace_id": "<string>"
         }
       ]
     },
-    "name": "string",
-    "org_id": "string",
-    "org_name": "string",
-    "region": "string",
-    "tg_version": "string",
-    "workgroup_id": "string",
+    "name": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
+    "region": "<string>",
+    "tg_version": "<string>",
+    "workgroup_id": "<string>",
     "workspaces": [
       {
         "addons": [],
@@ -690,23 +690,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "topology_update_interval_seconds": 0
         },
         "auto_stop_minutes": 0,
-        "auto_upgrade_state": "string",
-        "cloud_provider_id": "string",
-        "cloud_provider_name": "string",
-        "cloud_provider_short_id": "string",
-        "condition_type": "string",
-        "created_at": "string",
-        "creator": "string",
-        "database_id": "string",
-        "database_name": "string",
-        "deleted_at": "string",
-        "desired_tg_version": "string",
-        "display_status": "string",
+        "auto_upgrade_state": "<string>",
+        "cloud_provider_id": "<string>",
+        "cloud_provider_name": "<string>",
+        "cloud_provider_short_id": "<string>",
+        "condition_type": "<string>",
+        "created_at": "<string>",
+        "creator": "<string>",
+        "database_id": "<string>",
+        "database_name": "<string>",
+        "deleted_at": "<string>",
+        "desired_tg_version": "<string>",
+        "display_status": "<string>",
         "edge_count": 0,
         "enable_auto_start": false,
         "enable_copilot": false,
         "enable_ha": false,
-        "err_message": "string",
+        "err_message": "<string>",
         "folder_statistics": {
           "backup_size": 0,
           "billed_size": 0,
@@ -717,36 +717,36 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         },
         "graph_topology_size_bytes": 0,
         "is_rw": false,
-        "last_maintenance": "string",
-        "last_modified_time": "string",
+        "last_maintenance": "<string>",
+        "last_modified_time": "<string>",
         "maintenance_window_day_of_week": 0,
         "maintenance_window_hour_of_day": 0,
         "maintenance_window_interval_weeks": 0,
-        "maintenance_window_time_zone": "string",
-        "name": "string",
-        "nginx_host": "string",
-        "org_id": "string",
-        "org_name": "string",
-        "refresh_message": "string",
-        "refresh_status": "string",
-        "region": "string",
+        "maintenance_window_time_zone": "<string>",
+        "name": "<string>",
+        "nginx_host": "<string>",
+        "org_id": "<string>",
+        "org_name": "<string>",
+        "refresh_message": "<string>",
+        "refresh_status": "<string>",
+        "region": "<string>",
         "replicas": 0,
-        "snapshot_time": "string",
-        "solution_catalog_id": "string",
-        "status": "string",
-        "tg_version": "string",
-        "update_strategy": "string",
+        "snapshot_time": "<string>",
+        "solution_catalog_id": "<string>",
+        "status": "<string>",
+        "tg_version": "<string>",
+        "update_strategy": "<string>",
         "version_number": 0,
         "vertex_count": 0,
-        "workgroup_id": "string",
-        "workgroup_name": "string",
-        "workspace_id": "string",
+        "workgroup_id": "<string>",
+        "workgroup_name": "<string>",
+        "workspace_id": "<string>",
         "workspace_type": {
-          "cpu": "string",
+          "cpu": "<string>",
           "ha": 0,
-          "memory": "string",
+          "memory": "<string>",
           "partition": 0,
-          "typeName": "string"
+          "typeName": "<string>"
         }
       }
     ]
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc
index e531ea9d..a7ddbb0e 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/get-installed-add-on-details.adoc
@@ -352,33 +352,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc index b79836be..289aee5c 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/get-supported-workspace-options.adoc @@ -316,38 +316,38 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "regions": [
       {
-        "description": "string",
-        "name": "string"
+        "description": "<string>",
+        "name": "<string>"
       }
     ],
     "tgVersions": [
       {
         "allow_create": false,
         "allow_upgrade": false,
-        "channel": "string",
-        "end_of_life": "string",
-        "image": "string",
+        "channel": "<string>",
+        "end_of_life": "<string>",
+        "image": "<string>",
         "incompatible_upgrades_from": [
-          "string"
+          "<string>"
         ],
-        "name": "string",
+        "name": "<string>",
         "orgs": [
-          "string"
+          "<string>"
         ]
       }
     ],
     "workspaceTypes": [
       {
-        "cpu": "string",
+        "cpu": "<string>",
         "ha": 0,
-        "memory": "string",
+        "memory": "<string>",
         "partition": 0,
-        "typeName": "string"
+        "typeName": "<string>"
       }
     ]
   }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc
index d20feb5d..5c7d2a94 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/get-workspace-details.adoc
@@ -559,17 +559,17 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "addons": [
       {
-        "addons_id": "string",
+        "addons_id": "<string>",
         "enable": false,
-        "enable_configuration": "string",
+        "enable_configuration": "<string>",
         "is_free": false,
-        "unique_name": "string",
-        "workspace_id": "string"
+        "unique_name": "<string>",
+        "workspace_id": "<string>"
       }
     ],
     "agent_config": {
@@ -580,23 +580,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "topology_update_interval_seconds": 0
     },
     "auto_stop_minutes": 0,
-    "auto_upgrade_state": "string",
-    "cloud_provider_id": "string",
-    "cloud_provider_name": "string",
-    "cloud_provider_short_id": "string",
-    "condition_type": "string",
-    "created_at": "string",
-    "creator": "string",
-    "database_id": "string",
-    "database_name": "string",
-    "deleted_at": "string",
-    "desired_tg_version": "string",
-    "display_status": "string",
+    "auto_upgrade_state": "<string>",
+    "cloud_provider_id": "<string>",
+    "cloud_provider_name": "<string>",
+    "cloud_provider_short_id": "<string>",
+    "condition_type": "<string>",
+    "created_at": "<string>",
+    "creator": "<string>",
+    "database_id": "<string>",
+    "database_name": "<string>",
+    "deleted_at": "<string>",
+    "desired_tg_version": "<string>",
+    "display_status": "<string>",
     "edge_count": 0,
     "enable_auto_start": false,
     "enable_copilot": false,
     "enable_ha": false,
-    "err_message": "string",
+    "err_message": "<string>",
     "folder_statistics": {
       "backup_size": 0,
       "billed_size": 0,
@@ -606,42 +606,42 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "workspaces": [
         {
           "size": 0,
-          "workspace_id": "string"
+          "workspace_id": "<string>"
         }
       ]
     },
     "graph_topology_size_bytes": 0,
     "is_rw": false,
-    "last_maintenance": "string",
-    "last_modified_time": "string",
+    "last_maintenance": "<string>",
+    "last_modified_time": "<string>",
     "maintenance_window_day_of_week": 0,
     "maintenance_window_hour_of_day": 0,
     "maintenance_window_interval_weeks": 0,
-    "maintenance_window_time_zone": "string",
-    "name": "string",
-    "nginx_host": "string",
-    "org_id": "string",
-    "org_name": "string",
-    "refresh_message": "string",
-    "refresh_status": "string",
-    "region": "string",
+    "maintenance_window_time_zone": "<string>",
+    "name": "<string>",
+    "nginx_host": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
+    "refresh_message": "<string>",
+    "refresh_status": "<string>",
+    "region": "<string>",
     "replicas": 0,
-    "snapshot_time": "string",
-    "solution_catalog_id": "string",
-    "status": "string",
-    "tg_version": "string",
-    "update_strategy": "string",
+    "snapshot_time": "<string>",
+    "solution_catalog_id": "<string>",
+    "status": "<string>",
+    "tg_version": "<string>",
+    "update_strategy": "<string>",
     "version_number": 0,
     "vertex_count": 0,
-    "workgroup_id": "string",
-    "workgroup_name": "string",
-    "workspace_id": "string",
+    "workgroup_id": "<string>",
+    "workgroup_name": "<string>",
+    "workspace_id": "<string>",
     "workspace_type": {
-      "cpu": "string",
+      "cpu": "<string>",
       "ha": 0,
-      "memory": "string",
+      "memory": "<string>",
       "partition": 0,
-      "typeName": "string"
+      "typeName": "<string>"
     }
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc index a83d5f20..fb85f7e3 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/install-an-add-on.adoc @@ -365,33 +365,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc index 866eca7e..eb59983a 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-configurations.adoc @@ -362,33 +362,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc index 0207491a..1b3acae5 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-add-on-workspaces.adoc @@ -688,18 +688,18 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
       "addons": [
         {
-          "addons_id": "string",
+          "addons_id": "<string>",
           "enable": false,
-          "enable_configuration": "string",
+          "enable_configuration": "<string>",
           "is_free": false,
-          "unique_name": "string",
-          "workspace_id": "string"
+          "unique_name": "<string>",
+          "workspace_id": "<string>"
         }
       ],
       "agent_config": {
@@ -710,23 +710,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         "topology_update_interval_seconds": 0
       },
       "auto_stop_minutes": 0,
-      "auto_upgrade_state": "string",
-      "cloud_provider_id": "string",
-      "cloud_provider_name": "string",
-      "cloud_provider_short_id": "string",
-      "condition_type": "string",
-      "created_at": "string",
-      "creator": "string",
-      "database_id": "string",
-      "database_name": "string",
-      "deleted_at": "string",
-      "desired_tg_version": "string",
-      "display_status": "string",
+      "auto_upgrade_state": "<string>",
+      "cloud_provider_id": "<string>",
+      "cloud_provider_name": "<string>",
+      "cloud_provider_short_id": "<string>",
+      "condition_type": "<string>",
+      "created_at": "<string>",
+      "creator": "<string>",
+      "database_id": "<string>",
+      "database_name": "<string>",
+      "deleted_at": "<string>",
+      "desired_tg_version": "<string>",
+      "display_status": "<string>",
       "edge_count": 0,
       "enable_auto_start": false,
       "enable_copilot": false,
       "enable_ha": false,
-      "err_message": "string",
+      "err_message": "<string>",
       "folder_statistics": {
         "backup_size": 0,
         "billed_size": 0,
@@ -737,36 +737,36 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       },
       "graph_topology_size_bytes": 0,
       "is_rw": false,
-      "last_maintenance": "string",
-      "last_modified_time": "string",
+      "last_maintenance": "<string>",
+      "last_modified_time": "<string>",
       "maintenance_window_day_of_week": 0,
       "maintenance_window_hour_of_day": 0,
       "maintenance_window_interval_weeks": 0,
-      "maintenance_window_time_zone": "string",
-      "name": "string",
-      "nginx_host": "string",
-      "org_id": "string",
-      "org_name": "string",
-      "refresh_message": "string",
-      "refresh_status": "string",
-      "region": "string",
+      "maintenance_window_time_zone": "<string>",
+      "name": "<string>",
+      "nginx_host": "<string>",
+      "org_id": "<string>",
+      "org_name": "<string>",
+      "refresh_message": "<string>",
+      "refresh_status": "<string>",
+      "region": "<string>",
       "replicas": 0,
-      "snapshot_time": "string",
-      "solution_catalog_id": "string",
-      "status": "string",
-      "tg_version": "string",
-      "update_strategy": "string",
+      "snapshot_time": "<string>",
+      "solution_catalog_id": "<string>",
+      "status": "<string>",
+      "tg_version": "<string>",
+      "update_strategy": "<string>",
       "version_number": 0,
       "vertex_count": 0,
-      "workgroup_id": "string",
-      "workgroup_name": "string",
-      "workspace_id": "string",
+      "workgroup_id": "<string>",
+      "workgroup_name": "<string>",
+      "workspace_id": "<string>",
       "workspace_type": {
-        "cpu": "string",
+        "cpu": "<string>",
         "ha": 0,
-        "memory": "string",
+        "memory": "<string>",
         "partition": 0,
-        "typeName": "string"
+        "typeName": "<string>"
       }
     }
   ]
@@ -775,25 +775,25 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
   "Error": true,
   "ErrorDetails": [
     {
-      "FieldName": "string",
-      "Reason": "string",
+      "FieldName": "<string>",
+      "Reason": "<string>",
       "Type": "Internal-Error"
     }
   ],
-  "Message": "string",
-  "RequestID": "string"
+  "Message": "<string>",
+  "RequestID": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc index 52e3c9d0..0a144c72 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-allowed-ips.adoc @@ -307,13 +307,13 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
-      "cidr": "string",
-      "id": "string",
-      "note": "string"
+      "cidr": "<string>",
+      "id": "<string>",
+      "note": "<string>"
     }
   ]
 }
@@ -321,13 +321,13 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { "Error": true, "ErrorDetails": [ { - "FieldName": "string", - "Reason": "string", + "FieldName": "<string>", + "Reason": "<string>", "Type": "Internal-Error" } ], - "Message": "string", - "RequestID": "string" + "Message": "<string>", + "RequestID": "<string>" }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc index 205f52a0..bd2d174f 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-available-add-ons.adoc @@ -339,33 +339,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc index 1ff89576..58352f53 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-backups.adoc @@ -337,18 +337,18 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
-      "id": "string",
+      "id": "<string>",
       "is_automatic": false,
-      "size_bytes": "string",
-      "status": "string",
-      "tag": "string",
-      "time": "string",
-      "type": "string",
-      "version": "string"
+      "size_bytes": "<string>",
+      "status": "<string>",
+      "tag": "<string>",
+      "time": "<string>",
+      "type": "<string>",
+      "version": "<string>"
     }
   ]
 }
@@ -356,13 +356,13 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { "Error": true, "ErrorDetails": [ { - "FieldName": "string", - "Reason": "string", + "FieldName": "<string>", + "Reason": "<string>", "Type": "Internal-Error" } ], - "Message": "string", - "RequestID": "string" + "Message": "<string>", + "RequestID": "<string>" }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc index c47085c5..4b73d3f8 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-cloud-providers.adoc @@ -473,27 +473,27 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
       "api_tokens": [
-        "string"
+        "<string>"
       ],
       "availability_zones": [
-        "string"
+        "<string>"
       ],
       "cluster_enabled_log_types": [
         "api"
       ],
-      "component_versions": "string",
-      "created_at": "string",
-      "created_by": "string",
-      "eks_id": "string",
-      "endpoint_service_name": "string",
-      "id": "string",
-      "last_error": "string",
-      "name": "string",
+      "component_versions": "<string>",
+      "created_at": "<string>",
+      "created_by": "<string>",
+      "eks_id": "<string>",
+      "endpoint_service_name": "<string>",
+      "id": "<string>",
+      "last_error": "<string>",
+      "name": "<string>",
       "node_group_config": {
         "ng_16": {
           "max_size": 0,
@@ -521,31 +521,31 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "overprovisioning_factor": 0
         },
         "prefetch_image_list": [
-          "string"
+          "<string>"
         ]
       },
       "options": {
-        "account_id": "string",
+        "account_id": "<string>",
         "secure_connection": false
       },
-      "org_id": "string",
-      "platform": "string",
-      "region": "string",
-      "role_arn": "string",
-      "role_external_id": "string",
-      "security_group_id": "string",
-      "short_id": "string",
-      "status": "string",
+      "org_id": "<string>",
+      "platform": "<string>",
+      "region": "<string>",
+      "role_arn": "<string>",
+      "role_external_id": "<string>",
+      "security_group_id": "<string>",
+      "short_id": "<string>",
+      "status": "<string>",
       "subnet_id": [
-        "string"
+        "<string>"
       ],
-      "type": "string",
-      "updated_at": "string",
-      "version": "string",
+      "type": "<string>",
+      "updated_at": "<string>",
+      "version": "<string>",
       "version_number": 0,
-      "vpc_id": "string",
+      "vpc_id": "<string>",
       "vpc_owned_by_tg": false,
-      "work_dir": "string"
+      "work_dir": "<string>"
     }
   ]
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc index 2f3532fc..c3f828cc 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-in-database-users.adoc @@ -365,25 +365,25 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
-      "auth0UserID": "string",
-      "created": "string",
-      "description": "string",
-      "email": "string",
+      "auth0UserID": "<string>",
+      "created": "<string>",
+      "description": "<string>",
+      "email": "<string>",
       "enabled": false,
-      "firstName": "string",
-      "id": "string",
-      "lastName": "string",
-      "metadata": "string",
-      "path": "string",
-      "role": "string",
-      "tenantID": "string",
-      "trn": "string",
-      "updated": "string",
-      "username": "string"
+      "firstName": "<string>",
+      "id": "<string>",
+      "lastName": "<string>",
+      "metadata": "<string>",
+      "path": "<string>",
+      "role": "<string>",
+      "tenantID": "<string>",
+      "trn": "<string>",
+      "updated": "<string>",
+      "username": "<string>"
     }
   ]
 }
@@ -391,13 +391,13 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { "Error": true, "ErrorDetails": [ { - "FieldName": "string", - "Reason": "string", + "FieldName": "<string>", + "Reason": "<string>", "Type": "Internal-Error" } ], - "Message": "string", - "RequestID": "string" + "Message": "<string>", + "RequestID": "<string>" } diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc index b5d2a727..df2270fd 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-installed-add-ons.adoc @@ -274,21 +274,21 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc index 5f4b14dc..c80017ca 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-org-users.adoc @@ -292,35 +292,35 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
-  "auth0UserID": "string",
-  "authID": "string",
-  "created": "string",
-  "email": "string",
+  "auth0UserID": "<string>",
+  "authID": "<string>",
+  "created": "<string>",
+  "email": "<string>",
   "enabled": false,
-  "firstName": "string",
-  "id": "string",
-  "lastName": "string",
+  "firstName": "<string>",
+  "id": "<string>",
+  "lastName": "<string>",
   "metadata": {
     "attachedTo": [
-      "string"
+      "<string>"
     ],
-    "lastLogin": "string"
+    "lastLogin": "<string>"
   },
-  "path": "string",
+  "path": "<string>",
   "roles": [
     {
-      "displayName": "string",
-      "id": "string",
-      "name": "string",
-      "path": "string",
-      "tenantID": "string",
-      "trn": "string"
+      "displayName": "<string>",
+      "id": "<string>",
+      "name": "<string>",
+      "path": "<string>",
+      "tenantID": "<string>",
+      "trn": "<string>"
     }
   ],
-  "tenantID": "string",
-  "trn": "string",
-  "updated": "string",
-  "username": "string"
+  "tenantID": "<string>",
+  "trn": "<string>",
+  "updated": "<string>",
+  "username": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc index 4a3b59e5..b91becf1 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/list-public-cloud-providers.adoc @@ -244,18 +244,18 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
-      "component_versions": "string",
-      "id": "string",
-      "name": "string",
-      "org_id": "string",
-      "platform": "string",
-      "region": "string",
-      "status": "string",
-      "version": "string",
+      "component_versions": "<string>",
+      "id": "<string>",
+      "name": "<string>",
+      "org_id": "<string>",
+      "platform": "<string>",
+      "region": "<string>",
+      "status": "<string>",
+      "version": "<string>",
       "version_number": 0
     }
   ]
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc
index a794ac18..f09a6d04 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workgroups.adoc
@@ -1050,89 +1050,89 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
-      "cloud_provider_id": "string",
-      "cloud_provider_name": "string",
-      "cloud_provider_status": "string",
-      "cloud_provider_type": "string",
-      "creator": "string",
+      "cloud_provider_id": "<string>",
+      "cloud_provider_name": "<string>",
+      "cloud_provider_status": "<string>",
+      "cloud_provider_type": "<string>",
+      "creator": "<string>",
       "enable_allow_list": false,
       "enable_application_log": false,
       "encryption_method": "TMK",
       "is_current_ip_allowed": false,
-      "name": "string",
-      "org_id": "string",
-      "org_name": "string",
+      "name": "<string>",
+      "org_id": "<string>",
+      "org_name": "<string>",
       "platform": "aws",
-      "region": "string",
+      "region": "<string>",
       "shared_storage": false,
       "tg_databases": [
         {
-          "create_time": "string",
-          "database_id": "string",
+          "create_time": "<string>",
+          "database_id": "<string>",
           "folder_statistics": {},
-          "name": "string",
-          "org_id": "string",
-          "org_name": "string",
-          "region": "string",
-          "tg_version": "string",
-          "workgroup_id": "string",
+          "name": "<string>",
+          "org_id": "<string>",
+          "org_name": "<string>",
+          "region": "<string>",
+          "tg_version": "<string>",
+          "workgroup_id": "<string>",
           "workspaces": []
         }
       ],
-      "workgroup_id": "string",
+      "workgroup_id": "<string>",
       "workspaces": [
         {
           "addons": [],
           "agent_config": {},
           "auto_stop_minutes": 0,
-          "auto_upgrade_state": "string",
-          "cloud_provider_id": "string",
-          "cloud_provider_name": "string",
-          "cloud_provider_short_id": "string",
-          "condition_type": "string",
-          "created_at": "string",
-          "creator": "string",
-          "database_id": "string",
-          "database_name": "string",
-          "deleted_at": "string",
-          "desired_tg_version": "string",
-          "display_status": "string",
+          "auto_upgrade_state": "<string>",
+          "cloud_provider_id": "<string>",
+          "cloud_provider_name": "<string>",
+          "cloud_provider_short_id": "<string>",
+          "condition_type": "<string>",
+          "created_at": "<string>",
+          "creator": "<string>",
+          "database_id": "<string>",
+          "database_name": "<string>",
+          "deleted_at": "<string>",
+          "desired_tg_version": "<string>",
+          "display_status": "<string>",
           "edge_count": 0,
           "enable_auto_start": false,
           "enable_copilot": false,
           "enable_ha": false,
-          "err_message": "string",
+          "err_message": "<string>",
           "folder_statistics": {},
           "graph_topology_size_bytes": 0,
           "is_rw": false,
-          "last_maintenance": "string",
-          "last_modified_time": "string",
+          "last_maintenance": "<string>",
+          "last_modified_time": "<string>",
           "maintenance_window_day_of_week": 0,
           "maintenance_window_hour_of_day": 0,
           "maintenance_window_interval_weeks": 0,
-          "maintenance_window_time_zone": "string",
-          "name": "string",
-          "nginx_host": "string",
-          "org_id": "string",
-          "org_name": "string",
-          "refresh_message": "string",
-          "refresh_status": "string",
-          "region": "string",
+          "maintenance_window_time_zone": "<string>",
+          "name": "<string>",
+          "nginx_host": "<string>",
+          "org_id": "<string>",
+          "org_name": "<string>",
+          "refresh_message": "<string>",
+          "refresh_status": "<string>",
+          "region": "<string>",
           "replicas": 0,
-          "snapshot_time": "string",
-          "solution_catalog_id": "string",
-          "status": "string",
-          "tg_version": "string",
-          "update_strategy": "string",
+          "snapshot_time": "<string>",
+          "solution_catalog_id": "<string>",
+          "status": "<string>",
+          "tg_version": "<string>",
+          "update_strategy": "<string>",
           "version_number": 0,
           "vertex_count": 0,
-          "workgroup_id": "string",
-          "workgroup_name": "string",
-          "workspace_id": "string",
+          "workgroup_id": "<string>",
+          "workgroup_name": "<string>",
+          "workspace_id": "<string>",
           "workspace_type": {}
         }
       ]
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc b/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc
index b1420c3a..f571df2d 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/list-workspace-schedules.adoc
@@ -337,18 +337,18 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": [
     {
-      "date": "string",
-      "id": "string",
-      "repeat": "string",
-      "repeat_on": "string",
-      "time": "string",
-      "timezone": "string",
-      "workspace_id": "string",
-      "workspace_type_name": "string"
+      "date": "<string>",
+      "id": "<string>",
+      "repeat": "<string>",
+      "repeat_on": "<string>",
+      "time": "<string>",
+      "timezone": "<string>",
+      "workspace_id": "<string>",
+      "workspace_type_name": "<string>"
     }
   ]
 }
@@ -356,13 +356,13 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { "Error": true, "ErrorDetails": [ { - "FieldName": "string", - "Reason": "string", + "FieldName": "<string>", + "Reason": "<string>", "Type": "Internal-Error" } ], - "Message": "string", - "RequestID": "string" + "Message": "<string>", + "RequestID": "<string>" }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc index 320995e7..6494252d 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/pause-a-workspace.adoc @@ -223,9 +223,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc index ae22b48e..02e52c70 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/refresh-a-workspace.adoc @@ -223,9 +223,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc index cb4450ca..e1a63ff8 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/restore-a-backup.adoc @@ -311,14 +311,14 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "backup_id": "string" + "backup_id": "<string>" }'
method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "backup_id": "string" + "backup_id": "<string>" }), } ) @@ -344,11 +344,11 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "backup_id": "string" + "backup_id": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "backup_id": "string" + "backup_id": "<string>" } """)) .build(); @@ -379,7 +379,7 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "backup_id": "string" + "backup_id": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -405,33 +405,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc index 6c761bdb..7fc5be3a 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/resume-a-workspace.adoc @@ -223,9 +223,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc index e980defe..d6468292 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/set-backup-schedule.adoc @@ -347,7 +347,7 @@ "max_reserved_days": 0, "max_retry": 0, "pause": false, - "schedule": "string" + "schedule": "<string>" }' "max_reserved_days": 0, "max_retry": 0, "pause": false, - "schedule": "string" + "schedule": "<string>" }), } ) @@ -392,7 +392,7 @@ curl_setopt($request, CURLOPT_POSTFIELDS, '{ "max_reserved_days": 0, "max_retry": 0, "pause": false, - "schedule": "string" + "schedule": "<string>" }'); curl_exec($request); "max_reserved_days": 0, "max_retry": 0, "pause": false, - "schedule": "string" + "schedule": "<string>" }`) request, _ := http.NewRequest( @@ -423,7 +423,7 @@ response, _ := http.DefaultClient.Do(request) "max_reserved_days": 0, "max_retry": 0, "pause": false, - "schedule": "string" + "schedule": "<string>" } """)) .build(); @@ -439,7 +439,7 @@ request.body = <<~JSON "max_reserved_days": 0, "max_retry": 0, "pause": false, - "schedule": "string" + "schedule": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -465,33 +465,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc index c87a1750..3160ca21 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-cloud-provider.adoc @@ -444,16 +444,16 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "name": "string", - "version": "string" + "name": "<string>", + "version": "<string>" }' method: "PUT", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "name": "string", - "version": "string" + "name": "<string>", + "version": "<string>" }), } ) @@ -480,13 +480,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "name": "string", - "version": "string" + "name": "<string>", + "version": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(""" { - "name": "string", - "version": "string" + "name": "<string>", + "version": "<string>" } """)) .build(); @@ -518,8 +518,8 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "name": "string", - "version": "string" + "name": "<string>", + "version": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -543,26 +543,26 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "api_tokens": [
-      "string"
+      "<string>"
     ],
     "availability_zones": [
-      "string"
+      "<string>"
     ],
     "cluster_enabled_log_types": [
       "api"
     ],
-    "component_versions": "string",
-    "created_at": "string",
-    "created_by": "string",
-    "eks_id": "string",
-    "endpoint_service_name": "string",
-    "id": "string",
-    "last_error": "string",
-    "name": "string",
+    "component_versions": "<string>",
+    "created_at": "<string>",
+    "created_by": "<string>",
+    "eks_id": "<string>",
+    "endpoint_service_name": "<string>",
+    "id": "<string>",
+    "last_error": "<string>",
+    "name": "<string>",
     "node_group_config": {
       "ng_16": {
         "max_size": 0,
@@ -590,31 +590,31 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         "overprovisioning_factor": 0
       },
       "prefetch_image_list": [
-        "string"
+        "<string>"
       ]
     },
     "options": {
-      "account_id": "string",
+      "account_id": "<string>",
       "secure_connection": false
     },
-    "org_id": "string",
-    "platform": "string",
-    "region": "string",
-    "role_arn": "string",
-    "role_external_id": "string",
-    "security_group_id": "string",
-    "short_id": "string",
-    "status": "string",
+    "org_id": "<string>",
+    "platform": "<string>",
+    "region": "<string>",
+    "role_arn": "<string>",
+    "role_external_id": "<string>",
+    "security_group_id": "<string>",
+    "short_id": "<string>",
+    "status": "<string>",
     "subnet_id": [
-      "string"
+      "<string>"
     ],
-    "type": "string",
-    "updated_at": "string",
-    "version": "string",
+    "type": "<string>",
+    "updated_at": "<string>",
+    "version": "<string>",
     "version_number": 0,
-    "vpc_id": "string",
+    "vpc_id": "<string>",
     "vpc_owned_by_tg": false,
-    "work_dir": "string"
+    "work_dir": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc index dbfd2b25..ce8f107d 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-database.adoc @@ -606,14 +606,14 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "tg_database_name": "string" + "tg_database_name": "<string>" }' method: "PUT", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "tg_database_name": "string" + "tg_database_name": "<string>" }), } ) @@ -639,11 +639,11 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "tg_database_name": "string" + "tg_database_name": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(""" { - "tg_database_name": "string" + "tg_database_name": "<string>" } """)) .build(); @@ -674,7 +674,7 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "tg_database_name": "string" + "tg_database_name": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -698,11 +698,11 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "create_time": "string",
-    "database_id": "string",
+    "create_time": "<string>",
+    "database_id": "<string>",
     "folder_statistics": {
       "backup_size": 0,
       "billed_size": 0,
@@ -712,16 +712,16 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "workspaces": [
         {
           "size": 0,
-          "workspace_id": "string"
+          "workspace_id": "<string>"
         }
       ]
     },
-    "name": "string",
-    "org_id": "string",
-    "org_name": "string",
-    "region": "string",
-    "tg_version": "string",
-    "workgroup_id": "string",
+    "name": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
+    "region": "<string>",
+    "tg_version": "<string>",
+    "workgroup_id": "<string>",
     "workspaces": [
       {
         "addons": [],
@@ -733,23 +733,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "topology_update_interval_seconds": 0
         },
         "auto_stop_minutes": 0,
-        "auto_upgrade_state": "string",
-        "cloud_provider_id": "string",
-        "cloud_provider_name": "string",
-        "cloud_provider_short_id": "string",
-        "condition_type": "string",
-        "created_at": "string",
-        "creator": "string",
-        "database_id": "string",
-        "database_name": "string",
-        "deleted_at": "string",
-        "desired_tg_version": "string",
-        "display_status": "string",
+        "auto_upgrade_state": "<string>",
+        "cloud_provider_id": "<string>",
+        "cloud_provider_name": "<string>",
+        "cloud_provider_short_id": "<string>",
+        "condition_type": "<string>",
+        "created_at": "<string>",
+        "creator": "<string>",
+        "database_id": "<string>",
+        "database_name": "<string>",
+        "deleted_at": "<string>",
+        "desired_tg_version": "<string>",
+        "display_status": "<string>",
         "edge_count": 0,
         "enable_auto_start": false,
         "enable_copilot": false,
         "enable_ha": false,
-        "err_message": "string",
+        "err_message": "<string>",
         "folder_statistics": {
           "backup_size": 0,
           "billed_size": 0,
@@ -760,36 +760,36 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         },
         "graph_topology_size_bytes": 0,
         "is_rw": false,
-        "last_maintenance": "string",
-        "last_modified_time": "string",
+        "last_maintenance": "<string>",
+        "last_modified_time": "<string>",
         "maintenance_window_day_of_week": 0,
         "maintenance_window_hour_of_day": 0,
         "maintenance_window_interval_weeks": 0,
-        "maintenance_window_time_zone": "string",
-        "name": "string",
-        "nginx_host": "string",
-        "org_id": "string",
-        "org_name": "string",
-        "refresh_message": "string",
-        "refresh_status": "string",
-        "region": "string",
+        "maintenance_window_time_zone": "<string>",
+        "name": "<string>",
+        "nginx_host": "<string>",
+        "org_id": "<string>",
+        "org_name": "<string>",
+        "refresh_message": "<string>",
+        "refresh_status": "<string>",
+        "region": "<string>",
         "replicas": 0,
-        "snapshot_time": "string",
-        "solution_catalog_id": "string",
-        "status": "string",
-        "tg_version": "string",
-        "update_strategy": "string",
+        "snapshot_time": "<string>",
+        "solution_catalog_id": "<string>",
+        "status": "<string>",
+        "tg_version": "<string>",
+        "update_strategy": "<string>",
         "version_number": 0,
         "vertex_count": 0,
-        "workgroup_id": "string",
-        "workgroup_name": "string",
-        "workspace_id": "string",
+        "workgroup_id": "<string>",
+        "workgroup_name": "<string>",
+        "workspace_id": "<string>",
         "workspace_type": {
-          "cpu": "string",
+          "cpu": "<string>",
           "ha": 0,
-          "memory": "string",
+          "memory": "<string>",
           "partition": 0,
-          "typeName": "string"
+          "typeName": "<string>"
         }
       }
     ]
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc
index 8430e107..dfbb7743 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workgroup.adoc
@@ -1032,7 +1032,7 @@
   --data '{
     "enable_application_log": false,
     "encryption_method": "TMK",
-    "workgroup_name": "string"
+    "workgroup_name": "<string>"
   }'
body: JSON.stringify({ "enable_application_log": false, "encryption_method": "TMK", - "workgroup_name": "string" + "workgroup_name": "<string>" }), } ) @@ -1071,13 +1071,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ curl_setopt($request, CURLOPT_POSTFIELDS, '{ "enable_application_log": false, "encryption_method": "TMK", - "workgroup_name": "string" + "workgroup_name": "<string>" }'); curl_exec($request); { "enable_application_log": false, "encryption_method": "TMK", - "workgroup_name": "string" + "workgroup_name": "<string>" } """)) .build(); @@ -1112,7 +1112,7 @@ request.body = <<~JSON { "enable_application_log": false, "encryption_method": "TMK", - "workgroup_name": "string" + "workgroup_name": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -1136,28 +1136,28 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "cloud_provider_id": "string",
-    "cloud_provider_name": "string",
-    "cloud_provider_status": "string",
-    "cloud_provider_type": "string",
-    "creator": "string",
+    "cloud_provider_id": "<string>",
+    "cloud_provider_name": "<string>",
+    "cloud_provider_status": "<string>",
+    "cloud_provider_type": "<string>",
+    "creator": "<string>",
     "enable_allow_list": false,
     "enable_application_log": false,
     "encryption_method": "TMK",
     "is_current_ip_allowed": false,
-    "name": "string",
-    "org_id": "string",
-    "org_name": "string",
+    "name": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
     "platform": "aws",
-    "region": "string",
+    "region": "<string>",
     "shared_storage": false,
     "tg_databases": [
       {
-        "create_time": "string",
-        "database_id": "string",
+        "create_time": "<string>",
+        "database_id": "<string>",
         "folder_statistics": {
           "backup_size": 0,
           "billed_size": 0,
@@ -1166,16 +1166,16 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "total_size": 0,
           "workspaces": []
         },
-        "name": "string",
-        "org_id": "string",
-        "org_name": "string",
-        "region": "string",
-        "tg_version": "string",
-        "workgroup_id": "string",
+        "name": "<string>",
+        "org_id": "<string>",
+        "org_name": "<string>",
+        "region": "<string>",
+        "tg_version": "<string>",
+        "workgroup_id": "<string>",
         "workspaces": []
       }
     ],
-    "workgroup_id": "string",
+    "workgroup_id": "<string>",
     "workspaces": [
       {
         "addons": [],
@@ -1187,23 +1187,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
           "topology_update_interval_seconds": 0
         },
         "auto_stop_minutes": 0,
-        "auto_upgrade_state": "string",
-        "cloud_provider_id": "string",
-        "cloud_provider_name": "string",
-        "cloud_provider_short_id": "string",
-        "condition_type": "string",
-        "created_at": "string",
-        "creator": "string",
-        "database_id": "string",
-        "database_name": "string",
-        "deleted_at": "string",
-        "desired_tg_version": "string",
-        "display_status": "string",
+        "auto_upgrade_state": "<string>",
+        "cloud_provider_id": "<string>",
+        "cloud_provider_name": "<string>",
+        "cloud_provider_short_id": "<string>",
+        "condition_type": "<string>",
+        "created_at": "<string>",
+        "creator": "<string>",
+        "database_id": "<string>",
+        "database_name": "<string>",
+        "deleted_at": "<string>",
+        "desired_tg_version": "<string>",
+        "display_status": "<string>",
         "edge_count": 0,
         "enable_auto_start": false,
         "enable_copilot": false,
         "enable_ha": false,
-        "err_message": "string",
+        "err_message": "<string>",
         "folder_statistics": {
           "backup_size": 0,
           "billed_size": 0,
@@ -1214,36 +1214,36 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
         },
         "graph_topology_size_bytes": 0,
         "is_rw": false,
-        "last_maintenance": "string",
-        "last_modified_time": "string",
+        "last_maintenance": "<string>",
+        "last_modified_time": "<string>",
         "maintenance_window_day_of_week": 0,
         "maintenance_window_hour_of_day": 0,
         "maintenance_window_interval_weeks": 0,
-        "maintenance_window_time_zone": "string",
-        "name": "string",
-        "nginx_host": "string",
-        "org_id": "string",
-        "org_name": "string",
-        "refresh_message": "string",
-        "refresh_status": "string",
-        "region": "string",
+        "maintenance_window_time_zone": "<string>",
+        "name": "<string>",
+        "nginx_host": "<string>",
+        "org_id": "<string>",
+        "org_name": "<string>",
+        "refresh_message": "<string>",
+        "refresh_status": "<string>",
+        "region": "<string>",
         "replicas": 0,
-        "snapshot_time": "string",
-        "solution_catalog_id": "string",
-        "status": "string",
-        "tg_version": "string",
-        "update_strategy": "string",
+        "snapshot_time": "<string>",
+        "solution_catalog_id": "<string>",
+        "status": "<string>",
+        "tg_version": "<string>",
+        "update_strategy": "<string>",
         "version_number": 0,
         "vertex_count": 0,
-        "workgroup_id": "string",
-        "workgroup_name": "string",
-        "workspace_id": "string",
+        "workgroup_id": "<string>",
+        "workgroup_name": "<string>",
+        "workspace_id": "<string>",
         "workspace_type": {
-          "cpu": "string",
+          "cpu": "<string>",
           "ha": 0,
-          "memory": "string",
+          "memory": "<string>",
           "partition": 0,
-          "typeName": "string"
+          "typeName": "<string>"
         }
       }
     ]
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc
index aa31c6be..8e9cd808 100644
--- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc
+++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace-schedule.adoc
@@ -380,28 +380,28 @@
   --header 'x-api-key: <your-api-key>' \
   --header 'Content-Type: application/json' \
   --data '{
-    "date": "string",
-    "id": "string",
-    "repeat": "string",
-    "repeat_on": "string",
-    "time": "string",
-    "timezone": "string",
-    "workspace_id": "string",
-    "workspace_type_name": "string"
+    "date": "<string>",
+    "id": "<string>",
+    "repeat": "<string>",
+    "repeat_on": "<string>",
+    "time": "<string>",
+    "timezone": "<string>",
+    "workspace_id": "<string>",
+    "workspace_type_name": "<string>"
   }'
method: "PUT", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" }), } ) @@ -434,25 +434,25 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(""" { - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" } """)) .build(); @@ -490,14 +490,14 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "date": "string", - "id": "string", - "repeat": "string", - "repeat_on": "string", - "time": "string", - "timezone": "string", - "workspace_id": "string", - "workspace_type_name": "string" + "date": "<string>", + "id": "<string>", + "repeat": "<string>", + "repeat_on": "<string>", + "time": "<string>", + "timezone": "<string>", + "workspace_id": "<string>", + "workspace_type_name": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -523,33 +523,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc index 3a190ae4..e4b584f3 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-a-workspace.adoc @@ -691,18 +691,18 @@ "topology_update_interval_seconds": 0 }, "auto_stop_minutes": 0, - "auto_upgrade_state": "string", - "desired_tg_version": "string", + "auto_upgrade_state": "<string>", + "desired_tg_version": "<string>", "enable_auto_start": false, "enable_ha": false, "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", + "maintenance_window_time_zone": "<string>", "pause": false, - "update_strategy": "string", - "workspace_name": "string", - "workspace_type_name": "string" + "update_strategy": "<string>", + "workspace_name": "<string>", + "workspace_type_name": "<string>" }' "topology_update_interval_seconds": 0 }, "auto_stop_minutes": 0, - "auto_upgrade_state": "string", - "desired_tg_version": "string", + "auto_upgrade_state": "<string>", + "desired_tg_version": "<string>", "enable_auto_start": false, "enable_ha": false, "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", + "maintenance_window_time_zone": "<string>", "pause": false, - "update_strategy": "string", - "workspace_name": "string", - "workspace_type_name": "string" + "update_strategy": "<string>", + "workspace_name": "<string>", + "workspace_type_name": "<string>" }), } ) @@ -784,18 +784,18 @@ curl_setopt($request, CURLOPT_POSTFIELDS, '{ "topology_update_interval_seconds": 0 }, "auto_stop_minutes": 0, - "auto_upgrade_state": "string", - "desired_tg_version": "string", + "auto_upgrade_state": "<string>", + "desired_tg_version": "<string>", "enable_auto_start": false, "enable_ha": false, "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", + "maintenance_window_time_zone": "<string>", "pause": false, - "update_strategy": "string", - "workspace_name": "string", - "workspace_type_name": "string" + "update_strategy": "<string>", + "workspace_name": "<string>", + "workspace_type_name": "<string>" }'); curl_exec($request); "topology_update_interval_seconds": 0 }, "auto_stop_minutes": 0, - "auto_upgrade_state": "string", - "desired_tg_version": "string", + "auto_upgrade_state": "<string>", + "desired_tg_version": "<string>", "enable_auto_start": false, "enable_ha": false, "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", + "maintenance_window_time_zone": "<string>", "pause": false, - "update_strategy": "string", - "workspace_name": "string", - "workspace_type_name": "string" + "update_strategy": "<string>", + "workspace_name": "<string>", + "workspace_type_name": "<string>" }`) request, _ := http.NewRequest( @@ -847,18 +847,18 @@ response, _ := http.DefaultClient.Do(request) "topology_update_interval_seconds": 0 }, "auto_stop_minutes": 0, - "auto_upgrade_state": "string", - "desired_tg_version": "string", + "auto_upgrade_state": "<string>", + "desired_tg_version": "<string>", "enable_auto_start": false, "enable_ha": false, "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", + "maintenance_window_time_zone": "<string>", "pause": false, - "update_strategy": "string", - "workspace_name": "string", - "workspace_type_name": "string" + "update_strategy": "<string>", + "workspace_name": "<string>", + "workspace_type_name": "<string>" } """)) .build(); @@ -879,18 +879,18 @@ request.body = <<~JSON "topology_update_interval_seconds": 0 }, "auto_stop_minutes": 0, - "auto_upgrade_state": "string", - "desired_tg_version": "string", + "auto_upgrade_state": "<string>", + "desired_tg_version": "<string>", "enable_auto_start": false, "enable_ha": false, "maintenance_window_day_of_week": 0, "maintenance_window_hour_of_day": 0, "maintenance_window_interval_weeks": 0, - "maintenance_window_time_zone": "string", + "maintenance_window_time_zone": "<string>", "pause": false, - "update_strategy": "string", - "workspace_name": "string", - "workspace_type_name": "string" + "update_strategy": "<string>", + "workspace_name": "<string>", + "workspace_type_name": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -914,17 +914,17 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
     "addons": [
       {
-        "addons_id": "string",
+        "addons_id": "<string>",
         "enable": false,
-        "enable_configuration": "string",
+        "enable_configuration": "<string>",
         "is_free": false,
-        "unique_name": "string",
-        "workspace_id": "string"
+        "unique_name": "<string>",
+        "workspace_id": "<string>"
       }
     ],
     "agent_config": {
@@ -935,23 +935,23 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "topology_update_interval_seconds": 0
     },
     "auto_stop_minutes": 0,
-    "auto_upgrade_state": "string",
-    "cloud_provider_id": "string",
-    "cloud_provider_name": "string",
-    "cloud_provider_short_id": "string",
-    "condition_type": "string",
-    "created_at": "string",
-    "creator": "string",
-    "database_id": "string",
-    "database_name": "string",
-    "deleted_at": "string",
-    "desired_tg_version": "string",
-    "display_status": "string",
+    "auto_upgrade_state": "<string>",
+    "cloud_provider_id": "<string>",
+    "cloud_provider_name": "<string>",
+    "cloud_provider_short_id": "<string>",
+    "condition_type": "<string>",
+    "created_at": "<string>",
+    "creator": "<string>",
+    "database_id": "<string>",
+    "database_name": "<string>",
+    "deleted_at": "<string>",
+    "desired_tg_version": "<string>",
+    "display_status": "<string>",
     "edge_count": 0,
     "enable_auto_start": false,
     "enable_copilot": false,
     "enable_ha": false,
-    "err_message": "string",
+    "err_message": "<string>",
     "folder_statistics": {
       "backup_size": 0,
       "billed_size": 0,
@@ -961,42 +961,42 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
       "workspaces": [
         {
           "size": 0,
-          "workspace_id": "string"
+          "workspace_id": "<string>"
         }
       ]
     },
     "graph_topology_size_bytes": 0,
     "is_rw": false,
-    "last_maintenance": "string",
-    "last_modified_time": "string",
+    "last_maintenance": "<string>",
+    "last_modified_time": "<string>",
     "maintenance_window_day_of_week": 0,
     "maintenance_window_hour_of_day": 0,
     "maintenance_window_interval_weeks": 0,
-    "maintenance_window_time_zone": "string",
-    "name": "string",
-    "nginx_host": "string",
-    "org_id": "string",
-    "org_name": "string",
-    "refresh_message": "string",
-    "refresh_status": "string",
-    "region": "string",
+    "maintenance_window_time_zone": "<string>",
+    "name": "<string>",
+    "nginx_host": "<string>",
+    "org_id": "<string>",
+    "org_name": "<string>",
+    "refresh_message": "<string>",
+    "refresh_status": "<string>",
+    "region": "<string>",
     "replicas": 0,
-    "snapshot_time": "string",
-    "solution_catalog_id": "string",
-    "status": "string",
-    "tg_version": "string",
-    "update_strategy": "string",
+    "snapshot_time": "<string>",
+    "solution_catalog_id": "<string>",
+    "status": "<string>",
+    "tg_version": "<string>",
+    "update_strategy": "<string>",
     "version_number": 0,
     "vertex_count": 0,
-    "workgroup_id": "string",
-    "workgroup_name": "string",
-    "workspace_id": "string",
+    "workgroup_id": "<string>",
+    "workgroup_name": "<string>",
+    "workspace_id": "<string>",
     "workspace_type": {
-      "cpu": "string",
+      "cpu": "<string>",
       "ha": 0,
-      "memory": "string",
+      "memory": "<string>",
       "partition": 0,
-      "typeName": "string"
+      "typeName": "<string>"
     }
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc index 743747b9..df876791 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-add-on-configuration.adoc @@ -311,14 +311,14 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "config_value": "string" + "config_value": "<string>" }' method: "PUT", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "config_value": "string" + "config_value": "<string>" }), } ) @@ -344,11 +344,11 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "config_value": "string" + "config_value": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(""" { - "config_value": "string" + "config_value": "<string>" } """)) .build(); @@ -379,7 +379,7 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "config_value": "string" + "config_value": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -405,33 +405,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc index df0b9622..aaddfedd 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-allowed-ip.adoc @@ -347,18 +347,18 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" }' method: "PUT", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" }), } ) @@ -386,15 +386,15 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(""" { - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" } """)) .build(); @@ -427,9 +427,9 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "cidr": "string", - "id": "string", - "note": "string" + "cidr": "<string>", + "id": "<string>", + "note": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -455,37 +455,37 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
+  "Message": "<string>",
+  "RequestID": "<string>",
   "Result": {
-    "cidr": "string",
-    "id": "string",
-    "note": "string"
+    "cidr": "<string>",
+    "id": "<string>",
+    "note": "<string>"
   }
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc index e0d95941..3804334f 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-in-database-users-password.adoc @@ -318,16 +318,16 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }' method: "PUT", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }), } ) @@ -354,13 +354,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" }'); curl_exec($request); .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofString(""" { - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" } """)) .build(); @@ -392,8 +392,8 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "password": "string", - "username": "string" + "password": "<string>", + "username": "<string>" } JSON response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { @@ -419,33 +419,33 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc b/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc index 85e325a0..cbbf3dc3 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/update-an-org-users-role.adoc @@ -90,7 +90,7 @@ --header 'Content-Type: application/json' \ --data '{ "roles": [ - "string" + "<string>" ] }' headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ "roles": [ - "string" + "<string>" ] }), } @@ -129,13 +129,13 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ "roles": [ - "string" + "<string>" ] }'); curl_exec($request); .method("PUT", HttpRequest.BodyPublishers.ofString(""" { "roles": [ - "string" + "<string>" ] } """)) @@ -170,7 +170,7 @@ request["Content-Type"] = "application/json" request.body = <<~JSON { "roles": [ - "string" + "<string>" ] } JSON diff --git a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc index 39e38b2e..be8348fd 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/upgrade-a-cloud-provider.adoc @@ -339,7 +339,7 @@ "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } }' @@ -359,7 +359,7 @@ payload = { "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } } @@ -383,7 +383,7 @@ print(response.json()) "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } }), @@ -411,7 +411,7 @@ curl_setopt($request, CURLOPT_POSTFIELDS, '{ "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } }'); @@ -428,7 +428,7 @@ curl_exec($request); "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } }`) @@ -460,7 +460,7 @@ response, _ := http.DefaultClient.Do(request) "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } } @@ -485,7 +485,7 @@ request.body = <<~JSON "ng_64": {}, "ng_system": {}, "prefetch_image_list": [ - "string" + "<string>" ] } } @@ -511,9 +511,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
diff --git a/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc index ff3971ed..69ceed43 100644 --- a/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc +++ b/modules/savanna/modules/rest-api/pages/endpoints/validate-a-cloud-provider.adoc @@ -193,11 +193,11 @@ --header 'x-api-key: <your-api-key>' \ --header 'Content-Type: application/json' \ --data '{ - "account_id": "string", - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", + "account_id": "<string>", + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", "secure_connection": false }' method: "POST", headers: { "x-api-key": "<your-api-key>", "Content-Type": "application/json" }, body: JSON.stringify({ - "account_id": "string", - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", + "account_id": "<string>", + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", "secure_connection": false }), } @@ -241,20 +241,20 @@ curl_setopt($request, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); curl_setopt($request, CURLOPT_POSTFIELDS, '{ - "account_id": "string", - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", + "account_id": "<string>", + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", "secure_connection": false }'); curl_exec($request); .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString(""" { - "account_id": "string", - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", + "account_id": "<string>", + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", "secure_connection": false } """)) @@ -291,11 +291,11 @@ request["x-api-key"] = "<your-api-key>" request["Content-Type"] = "application/json" request.body = <<~JSON { - "account_id": "string", - "platform": "string", - "region": "string", - "role_arn": "string", - "role_external_id": "string", + "account_id": "<string>", + "platform": "<string>", + "region": "<string>", + "role_arn": "<string>", + "role_external_id": "<string>", "secure_connection": false } JSON @@ -320,9 +320,9 @@ response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) {
{
   "Error": false,
   "ErrorDetails": [],
-  "Message": "",
-  "RequestID": "string",
-  "Result": "string"
+  "Message": "<string>",
+  "RequestID": "<string>",
+  "Result": "<string>"
 }
From c63efcec2419a9f4658d9d9361b9361b2194d66e Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Mon, 21 Sep 2026 23:07:36 +0530 Subject: [PATCH 20/22] docs(savanna): hide data-plane page and link server API docs Remove Data-plane APIs from REST API nav, mark the page hidden for deep links, and point the overview at TigerGraph Server GSQL and REST++ docs. --- lib/split-endpoints.js | 1 - modules/savanna/modules/rest-api/nav.adoc | 1 - modules/savanna/modules/rest-api/pages/data-plane-apis.adoc | 1 + modules/savanna/modules/rest-api/pages/index.adoc | 3 +-- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index 846256fb..5f38a70c 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -169,7 +169,6 @@ function renderNav (grouped) { '* REST API reference', '** xref:index.adoc[Overview]', '** xref:rest-api:create-api-key.adoc[Create an API key]', - '** xref:rest-api:data-plane-apis.adoc[Data-plane APIs]', ] // Resource groups sit beside the other pages: one less level of indent // leaves room for the method badge. diff --git a/modules/savanna/modules/rest-api/nav.adoc b/modules/savanna/modules/rest-api/nav.adoc index 9fa28a49..89ce4ba9 100644 --- a/modules/savanna/modules/rest-api/nav.adoc +++ b/modules/savanna/modules/rest-api/nav.adoc @@ -4,7 +4,6 @@ * REST API reference ** xref:index.adoc[Overview] ** xref:rest-api:create-api-key.adoc[Create an API key] -** xref:rest-api:data-plane-apis.adoc[Data-plane APIs] ** Cloud providers *** xref:rest-api:endpoints/create-a-cloud-provider.adoc[POST Create a cloud provider] *** xref:rest-api:endpoints/list-cloud-providers.adoc[GET List cloud providers] diff --git a/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc b/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc index 35e99171..901d8a2f 100644 --- a/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc +++ b/modules/savanna/modules/rest-api/pages/data-plane-apis.adoc @@ -1,5 +1,6 @@ = Data-plane APIs (REST++ and GSQL) :experimental: +:page-hidden: true The xref:savanna:rest-api:index.adoc[Savanna REST API] is the *control plane*: it manages the resources _around_ your graph (workgroups, workspaces, backups). To read and write the data _inside_ a workspace, you call that workspace's *data-plane* APIs directly. diff --git a/modules/savanna/modules/rest-api/pages/index.adoc b/modules/savanna/modules/rest-api/pages/index.adoc index 599e41f9..5aba22c9 100644 --- a/modules/savanna/modules/rest-api/pages/index.adoc +++ b/modules/savanna/modules/rest-api/pages/index.adoc @@ -12,7 +12,7 @@ The Savanna REST API is the *control plane* for TigerGraph Savanna. It manages t https://api.tgcloud.io ---- -To read and write the data inside a workspace (schema, loading jobs, and GSQL), use the workspace's xref:savanna:rest-api:data-plane-apis.adoc[data-plane APIs (REST{plus}{plus} and GSQL)]. You can also generate snippets from the console with xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs], or xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP] to drive Savanna in natural language. +To read and write the data inside a workspace (schema, loading jobs, and GSQL), call that workspace host with the https://www.tigergraph.com/docs/tigergraph-server/4.3/api/gsql-endpoints[GSQL endpoints^] (schema, loading, and query installation) and the https://www.tigergraph.com/docs/tigergraph-server/4.3/api/built-in-endpoints[REST{plus}{plus} built-in endpoints^] (run queries and read or upsert graph data). You can also generate snippets from the console with xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. == The resource model @@ -131,4 +131,3 @@ Discover available capacity and manage the people in your org. * xref:savanna:rest-api:create-api-key.adoc[Create an API key]. Generate a key in Organization Settings. * xref:savanna:workgroup-workspace:workspaces/connect-via-api.adoc[Connect via APIs]. Data-plane curl, Python, and JavaScript examples. -* xref:savanna:get-started:connect-agent-mcp.adoc[Connect AI tools with MCP]. Drive Savanna with an AI agent. From 0c101fe699afb339b6b39a87c96b8b42c31bc2a4 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Fri, 25 Sep 2026 00:48:25 +0530 Subject: [PATCH 21/22] chore: rebuild deploy preview against updated UI bundle From 1b053758abe0f869344391d696f241ef615bd846 Mon Sep 17 00:00:00 2001 From: nik_garakapati Date: Fri, 25 Sep 2026 15:57:24 +0530 Subject: [PATCH 22/22] fix(savanna): fail if an allowlist endpoint is missing from the catalog --- lib/split-endpoints.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lib/split-endpoints.js b/lib/split-endpoints.js index 5f38a70c..c27e625d 100644 --- a/lib/split-endpoints.js +++ b/lib/split-endpoints.js @@ -207,6 +207,7 @@ function main () { const groupTitles = new Map(GROUPS) const grouped = new Map(GROUPS.map(([, title]) => [title, []])) const slugs = new Set() + const seen = new Set() for (const endpoint of endpoints) { const tag = endpoint.tags[0] @@ -216,12 +217,18 @@ function main () { if (!PUBLIC_ENDPOINTS.has(request)) { throw new Error('"' + request + '" is not in the public API allowlist') } + seen.add(request) endpoint.label = LABELS[request] endpoint.slug = slugify(endpoint.label) if (slugs.has(endpoint.slug)) throw new Error('duplicate slug ' + endpoint.slug) slugs.add(endpoint.slug) grouped.get(groupTitles.get(tag)).push(endpoint) } + for (const request of PUBLIC_ENDPOINTS) { + if (!seen.has(request)) { + throw new Error('allowlist endpoint "' + request + '" is missing from the catalog') + } + } for (const list of grouped.values()) { list.sort((a, b) => LABEL_ORDER[a.method + ' ' + a.path] - LABEL_ORDER[b.method + ' ' + b.path]) }