Files
autoglue/sdk/go/api/openapi.yaml
2025-11-02 13:19:30 +00:00

2087 lines
52 KiB
YAML

openapi: 3.0.1
info:
contact:
name: GlueOps
description: API for managing K3s clusters across cloud providers
title: AutoGlue API
version: "1.0"
servers:
- url: http://localhost:8080/api/v1
- url: https://localhost:8080/api/v1
paths:
/.well-known/jwks.json:
get:
description: Returns the JSON Web Key Set for token verification
operationId: getJWKS
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.JWKS"
description: OK
summary: Get JWKS
tags:
- Auth
/auth/logout:
post:
operationId: Logout
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.LogoutRequest"
description: Refresh token
required: true
responses:
"204":
content: {}
description: No Content
summary: Revoke refresh token family (logout everywhere)
tags:
- Auth
x-codegen-request-body-name: body
/auth/refresh:
post:
operationId: Refresh
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.RefreshRequest"
description: Refresh token
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.TokenPair"
description: OK
summary: Rotate refresh token
tags:
- Auth
x-codegen-request-body-name: body
/auth/{provider}/callback:
get:
operationId: AuthCallback
parameters:
- description: google|github
in: path
name: provider
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.TokenPair"
description: OK
summary: Handle social login callback
tags:
- Auth
/auth/{provider}/start:
post:
description: Returns provider authorization URL for the frontend to redirect
operationId: AuthStart
parameters:
- description: google|github
in: path
name: provider
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.AuthStartResponse"
description: OK
summary: Begin social login
tags:
- Auth
/me:
get:
operationId: GetMe
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.meResponse"
description: OK
security:
- BearerAuth: []
- ApiKeyAuth: []
summary: Get current user profile
tags:
- Me
patch:
operationId: UpdateMe
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.updateMeRequest"
description: Patch profile
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/models.User"
description: OK
security:
- BearerAuth: []
- ApiKeyAuth: []
summary: Update current user profile
tags:
- Me
x-codegen-request-body-name: body
/me/api-keys:
get:
operationId: ListUserAPIKeys
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/handlers.userAPIKeyOut"
type: array
description: OK
security:
- BearerAuth: []
- ApiKeyAuth: []
summary: List my API keys
tags:
- Me / API Keys
post:
description: Returns the plaintext key once. Store it securely on the client
side.
operationId: CreateUserAPIKey
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.createUserKeyRequest"
description: Key options
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.userAPIKeyOut"
description: Created
security:
- BearerAuth: []
- ApiKeyAuth: []
summary: Create a new user API key
tags:
- Me / API Keys
x-codegen-request-body-name: body
/me/api-keys/{id}:
delete:
operationId: DeleteUserAPIKey
parameters:
- description: Key ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"204":
content: {}
description: No Content
security:
- BearerAuth: []
summary: Delete a user API key
tags:
- Me / API Keys
/orgs:
get:
operationId: listMyOrgs
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/models.Organization"
type: array
description: OK
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: List organizations I belong to
tags:
- Orgs
post:
operationId: createOrg
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.orgCreateReq"
description: Org payload
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/models.Organization"
description: Created
"400":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Bad Request
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
"409":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Conflict
security:
- BearerAuth: []
summary: Create organization
tags:
- Orgs
x-codegen-request-body-name: body
/orgs/{id}:
delete:
operationId: deleteOrg
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"204":
content: {}
description: Deleted
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
"404":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Not Found
security:
- BearerAuth: []
summary: Delete organization (owner)
tags:
- Orgs
get:
operationId: getOrg
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/models.Organization"
description: OK
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
"404":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Not Found
security:
- BearerAuth: []
summary: Get organization
tags:
- Orgs
patch:
operationId: updateOrg
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.orgUpdateReq"
description: Update payload
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/models.Organization"
description: OK
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
"404":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Not Found
security:
- BearerAuth: []
summary: Update organization (owner/admin)
tags:
- Orgs
x-codegen-request-body-name: body
/orgs/{id}/api-keys:
get:
operationId: listOrgKeys
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/models.APIKey"
type: array
description: OK
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: List org-scoped API keys (no secrets)
tags:
- Orgs
post:
operationId: createOrgKey
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.orgKeyCreateReq"
description: Key name + optional expiry
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.orgKeyCreateResp"
description: Created
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: Create org key/secret pair (owner/admin)
tags:
- Orgs
x-codegen-request-body-name: body
/orgs/{id}/api-keys/{key_id}:
delete:
operationId: deleteOrgKey
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
- description: Key ID (UUID)
in: path
name: key_id
required: true
schema:
type: string
responses:
"204":
content: {}
description: Deleted
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: Delete org key (owner/admin)
tags:
- Orgs
/orgs/{id}/members:
get:
operationId: listMembers
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/handlers.memberOut"
type: array
description: OK
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: List members in org
tags:
- Orgs
post:
operationId: addOrUpdateMember
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.memberUpsertReq"
description: User & role
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/handlers.memberOut"
description: OK
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: Add or update a member (owner/admin)
tags:
- Orgs
x-codegen-request-body-name: body
/orgs/{id}/members/{user_id}:
delete:
operationId: removeMember
parameters:
- description: Org ID (UUID)
in: path
name: id
required: true
schema:
type: string
- description: User ID (UUID)
in: path
name: user_id
required: true
schema:
type: string
responses:
"204":
content: {}
description: Removed
"401":
content:
application/json:
schema:
$ref: "#/components/schemas/utils.ErrorResponse"
description: Unauthorized
security:
- BearerAuth: []
summary: Remove a member (owner/admin)
tags:
- Orgs
/servers:
get:
description: "Returns servers for the organization in X-Org-ID. Optional filters:\
\ status, role."
operationId: ListServers
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Filter by status (pending|provisioning|ready|failed)
in: query
name: status
schema:
type: string
- description: Filter by role
in: query
name: role
schema:
type: string
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/dto.ServerResponse"
type: array
description: OK
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: failed to list servers
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: List servers (org scoped)
tags:
- Servers
post:
description: Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id
belongs to the org.
operationId: CreateServer
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.CreateServerRequest"
description: Server payload
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.ServerResponse"
description: Created
"400":
content:
application/json:
schema:
type: string
description: invalid json / missing fields / invalid status / invalid ssh_key_id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: create failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Create server (org scoped)
tags:
- Servers
x-codegen-request-body-name: body
/servers/{id}:
delete:
description: Permanently deletes the server.
operationId: DeleteServer
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Server ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"204":
content:
application/json:
schema:
type: string
description: No Content
"400":
content:
application/json:
schema:
type: string
description: invalid id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: delete failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Delete server (org scoped)
tags:
- Servers
get:
description: Returns one server in the given organization.
operationId: GetServer
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Server ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.ServerResponse"
description: OK
"400":
content:
application/json:
schema:
type: string
description: invalid id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"404":
content:
application/json:
schema:
type: string
description: not found
"500":
content:
application/json:
schema:
type: string
description: fetch failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Get server by ID (org scoped)
tags:
- Servers
patch:
description: Partially update fields; changing ssh_key_id validates ownership.
operationId: UpdateServer
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Server ID (UUID)
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.UpdateServerRequest"
description: Fields to update
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.ServerResponse"
description: OK
"400":
content:
application/json:
schema:
type: string
description: invalid id / invalid json / invalid status / invalid ssh_key_id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"404":
content:
application/json:
schema:
type: string
description: not found
"500":
content:
application/json:
schema:
type: string
description: update failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Update server (org scoped)
tags:
- Servers
x-codegen-request-body-name: body
/ssh:
get:
description: Returns ssh keys for the organization in X-Org-ID.
operationId: ListPublicSshKeys
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/dto.SshResponse"
type: array
description: OK
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: failed to list keys
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: List ssh keys (org scoped)
tags:
- Ssh
post:
description: "Generates an RSA or ED25519 keypair, saves it, and returns metadata.\
\ For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores\
\ bits."
operationId: CreateSSHKey
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.CreateSSHRequest"
description: Key generation options
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.SshResponse"
description: Created
"400":
content:
application/json:
schema:
type: string
description: invalid json / invalid bits
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: generation/create failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Create ssh keypair (org scoped)
tags:
- Ssh
x-codegen-request-body-name: body
/ssh/{id}:
delete:
description: Permanently deletes a keypair.
operationId: DeleteSSHKey
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: SSH Key ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"204":
content:
application/json:
schema:
type: string
description: No Content
"400":
content:
application/json:
schema:
type: string
description: invalid id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: delete failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Delete ssh keypair (org scoped)
tags:
- Ssh
get:
description: Returns public key fields. Append `?reveal=true` to include the
private key PEM.
operationId: GetSSHKey
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: SSH Key ID (UUID)
in: path
name: id
required: true
schema:
type: string
- description: Reveal private key PEM
in: query
name: reveal
schema:
type: boolean
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.SshRevealResponse"
description: When reveal=true
"400":
content:
application/json:
schema:
type: string
description: invalid id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"404":
content:
application/json:
schema:
type: string
description: not found
"500":
content:
application/json:
schema:
type: string
description: fetch failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Get ssh key by ID (org scoped)
tags:
- Ssh
/ssh/{id}/download:
get:
description: Download `part=public|private|both` of the keypair. `both` returns
a zip file.
operationId: DownloadSSHKey
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
required: true
schema:
type: string
- description: SSH Key ID (UUID)
in: path
name: id
required: true
schema:
type: string
- description: Which part to download
in: query
name: part
required: true
schema:
enum:
- public
- private
- both
type: string
responses:
"200":
content:
application/json:
schema:
type: string
description: file content
"400":
content:
application/json:
schema:
type: string
description: invalid id / invalid part
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"404":
content:
application/json:
schema:
type: string
description: not found
"500":
content:
application/json:
schema:
type: string
description: download failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Download ssh key files by ID (org scoped)
tags:
- Ssh
/taints:
get:
description: "Returns node taints for the organization in X-Org-ID. Filters:\
\ `key`, `value`, and `q` (key contains). Add `include=node_pools` to include\
\ linked node pools."
operationId: ListTaints
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Exact key
in: query
name: key
schema:
type: string
- description: Exact value
in: query
name: value
schema:
type: string
- description: key contains (case-insensitive)
in: query
name: q
schema:
type: string
responses:
"200":
content:
application/json:
schema:
items:
$ref: "#/components/schemas/dto.TaintResponse"
type: array
description: OK
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: failed to list node taints
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: List node pool taints (org scoped)
tags:
- Taints
post:
description: Creates a taint.
operationId: CreateTaint
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.CreateTaintRequest"
description: Taint payload
required: true
responses:
"201":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.TaintResponse"
description: Created
"400":
content:
application/json:
schema:
type: string
description: invalid json / missing fields / invalid node_pool_ids
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: create failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Create node taint (org scoped)
tags:
- Taints
x-codegen-request-body-name: body
/taints/{id}:
delete:
description: Permanently deletes the taint.
operationId: DeleteTaint
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Node Taint ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"204":
content:
application/json:
schema:
type: string
description: No Content
"400":
content:
application/json:
schema:
type: string
description: invalid id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"500":
content:
application/json:
schema:
type: string
description: delete failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Delete taint (org scoped)
tags:
- Taints
get:
operationId: GetTaint
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Node Taint ID (UUID)
in: path
name: id
required: true
schema:
type: string
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.TaintResponse"
description: OK
"400":
content:
application/json:
schema:
type: string
description: invalid id
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"404":
content:
application/json:
schema:
type: string
description: not found
"500":
content:
application/json:
schema:
type: string
description: fetch failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Get node taint by ID (org scoped)
tags:
- Taints
patch:
description: Partially update taint fields.
operationId: UpdateTaint
parameters:
- description: Organization UUID
in: header
name: X-Org-ID
schema:
type: string
- description: Node Taint ID (UUID)
in: path
name: id
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/dto.UpdateTaintRequest"
description: Fields to update
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/dto.TaintResponse"
description: OK
"400":
content:
application/json:
schema:
type: string
description: invalid id / invalid json
"401":
content:
application/json:
schema:
type: string
description: Unauthorized
"403":
content:
application/json:
schema:
type: string
description: organization required
"404":
content:
application/json:
schema:
type: string
description: not found
"500":
content:
application/json:
schema:
type: string
description: update failed
security:
- BearerAuth: []
- OrgKeyAuth: []
- OrgSecretAuth: []
summary: Update node taint (org scoped)
tags:
- Taints
x-codegen-request-body-name: body
components:
schemas:
dto.AuthStartResponse:
example:
auth_url: https://accounts.google.com/o/oauth2/v2/auth?client_id=...
properties:
auth_url:
example: https://accounts.google.com/o/oauth2/v2/auth?client_id=...
type: string
type: object
dto.CreateSSHRequest:
properties:
bits:
description: Only for RSA
type: integer
comment:
example: deploy@autoglue
type: string
name:
type: string
type:
description: '"rsa" (default) or "ed25519"'
type: string
type: object
dto.CreateServerRequest:
properties:
hostname:
type: string
private_ip_address:
type: string
public_ip_address:
type: string
role:
example: master|worker|bastion
type: string
ssh_key_id:
type: string
ssh_user:
type: string
status:
example: pending|provisioning|ready|failed
type: string
type: object
dto.CreateTaintRequest:
properties:
effect:
type: string
key:
type: string
value:
type: string
type: object
dto.JWK:
example:
kty: RSA
e: AQAB
use: sig
kid: 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345
x: x
alg: RS256
"n": "n"
properties:
alg:
example: RS256
type: string
e:
example: AQAB
type: string
kid:
example: 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345
type: string
kty:
example: RSA
type: string
"n":
type: string
use:
example: sig
type: string
x:
type: string
type: object
dto.JWKS:
example:
keys:
- kty: RSA
e: AQAB
use: sig
kid: 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345
x: x
alg: RS256
"n": "n"
- kty: RSA
e: AQAB
use: sig
kid: 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345
x: x
alg: RS256
"n": "n"
properties:
keys:
items:
$ref: "#/components/schemas/dto.JWK"
type: array
type: object
dto.LogoutRequest:
properties:
refresh_token:
example: m0l9o8rT3t0V8d3eFf...
type: string
type: object
dto.RefreshRequest:
properties:
refresh_token:
example: m0l9o8rT3t0V8d3eFf...
type: string
type: object
dto.ServerResponse:
example:
hostname: hostname
public_ip_address: public_ip_address
role: role
updated_at: updated_at
ssh_key_id: ssh_key_id
organization_id: organization_id
created_at: created_at
private_ip_address: private_ip_address
id: id
ssh_user: ssh_user
status: status
properties:
created_at:
type: string
hostname:
type: string
id:
type: string
organization_id:
type: string
private_ip_address:
type: string
public_ip_address:
type: string
role:
type: string
ssh_key_id:
type: string
ssh_user:
type: string
status:
type: string
updated_at:
type: string
type: object
dto.SshResponse:
example:
public_key: public_key
updated_at: updated_at
organization_id: organization_id
fingerprint: fingerprint
name: name
created_at: created_at
id: id
properties:
created_at:
type: string
fingerprint:
type: string
id:
type: string
name:
type: string
organization_id:
type: string
public_key:
type: string
updated_at:
type: string
type: object
dto.SshRevealResponse:
example:
public_key: public_key
updated_at: updated_at
organization_id: organization_id
fingerprint: fingerprint
name: name
created_at: created_at
private_key: private_key
id: id
properties:
created_at:
type: string
fingerprint:
type: string
id:
type: string
name:
type: string
organization_id:
type: string
private_key:
type: string
public_key:
type: string
updated_at:
type: string
type: object
dto.TaintResponse:
example:
effect: effect
id: id
value: value
key: key
properties:
effect:
type: string
id:
type: string
key:
type: string
value:
type: string
type: object
dto.TokenPair:
example:
access_token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij...
refresh_token: m0l9o8rT3t0V8d3eFf....
token_type: Bearer
expires_in: 3600
properties:
access_token:
example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij...
type: string
expires_in:
example: 3600
type: integer
refresh_token:
example: m0l9o8rT3t0V8d3eFf....
type: string
token_type:
example: Bearer
type: string
type: object
dto.UpdateServerRequest:
properties:
hostname:
type: string
private_ip_address:
type: string
public_ip_address:
type: string
role:
example: master|worker|bastion
type: string
ssh_key_id:
type: string
ssh_user:
type: string
status:
example: pending|provisioning|ready|failed
type: string
type: object
dto.UpdateTaintRequest:
properties:
effect:
type: string
key:
type: string
value:
type: string
type: object
handlers.createUserKeyRequest:
properties:
expires_in_hours:
description: optional TTL
type: integer
name:
type: string
type: object
handlers.meResponse:
example:
emails:
- is_primary: true
updated_at: 2000-01-23T04:56:07.000+00:00
user_id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
is_verified: true
user:
avatar_url: avatar_url
updated_at: 2000-01-23T04:56:07.000+00:00
is_disabled: true
created_at: 2000-01-23T04:56:07.000+00:00
primary_email: primary_email
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
display_name: display_name
email: email
- is_primary: true
updated_at: 2000-01-23T04:56:07.000+00:00
user_id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
is_verified: true
user:
avatar_url: avatar_url
updated_at: 2000-01-23T04:56:07.000+00:00
is_disabled: true
created_at: 2000-01-23T04:56:07.000+00:00
primary_email: primary_email
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
display_name: display_name
email: email
avatar_url: avatar_url
updated_at: 2000-01-23T04:56:07.000+00:00
is_disabled: true
organizations:
- updated_at: 2000-01-23T04:56:07.000+00:00
domain: domain
name: name
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
- updated_at: 2000-01-23T04:56:07.000+00:00
domain: domain
name: name
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
created_at: 2000-01-23T04:56:07.000+00:00
primary_email: primary_email
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
display_name: display_name
properties:
avatar_url:
type: string
created_at:
format: date-time
type: string
display_name:
type: string
emails:
items:
$ref: "#/components/schemas/models.UserEmail"
type: array
id:
description: "example: 3fa85f64-5717-4562-b3fc-2c963f66afa6"
format: uuid
type: string
is_disabled:
type: boolean
organizations:
items:
$ref: "#/components/schemas/models.Organization"
type: array
primary_email:
type: string
updated_at:
format: date-time
type: string
type: object
handlers.memberOut:
example:
role: role
user_id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
email: email
properties:
email:
type: string
role:
description: owner/admin/member
type: string
user_id:
format: uuid
type: string
type: object
handlers.memberUpsertReq:
properties:
role:
example: member
type: string
user_id:
format: uuid
type: string
type: object
handlers.orgCreateReq:
properties:
domain:
example: acme.com
type: string
name:
example: Acme Corp
type: string
type: object
handlers.orgKeyCreateReq:
properties:
expires_in_hours:
example: 720
type: integer
name:
example: automation-bot
type: string
type: object
handlers.orgKeyCreateResp:
example:
org_key: org_key
expires_at: expires_at
scope: scope
name: name
created_at: created_at
id: id
org_secret: org_secret
properties:
created_at:
type: string
expires_at:
type: string
id:
type: string
name:
type: string
org_key:
description: "shown once:"
type: string
org_secret:
description: "shown once:"
type: string
scope:
description: '"org"'
type: string
type: object
handlers.orgUpdateReq:
properties:
domain:
type: string
name:
type: string
type: object
handlers.updateMeRequest:
properties:
display_name:
type: string
type: object
handlers.userAPIKeyOut:
example:
last_used_at: last_used_at
expires_at: expires_at
plain: plain
scope: scope
name: name
created_at: created_at
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
properties:
created_at:
type: string
expires_at:
type: string
id:
format: uuid
type: string
last_used_at:
type: string
name:
type: string
plain:
description: "Shown only on create:"
type: string
scope:
description: '"user"'
type: string
type: object
models.APIKey:
example:
last_used_at: 2000-01-23T04:56:07.000+00:00
expires_at: 2000-01-23T04:56:07.000+00:00
updated_at: 2000-01-23T04:56:07.000+00:00
user_id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
org_id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
prefix: prefix
scope: scope
name: name
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
revoked: true
properties:
created_at:
format: date-time
type: string
expires_at:
format: date-time
type: string
id:
format: uuid
type: string
last_used_at:
format: date-time
type: string
name:
type: string
org_id:
format: uuid
type: string
prefix:
type: string
revoked:
type: boolean
scope:
type: string
updated_at:
format: date-time
type: string
user_id:
format: uuid
type: string
type: object
models.Organization:
example:
updated_at: 2000-01-23T04:56:07.000+00:00
domain: domain
name: name
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
properties:
created_at:
format: date-time
type: string
domain:
type: string
id:
description: "example: 3fa85f64-5717-4562-b3fc-2c963f66afa6"
format: uuid
type: string
name:
type: string
updated_at:
format: date-time
type: string
type: object
models.User:
example:
avatar_url: avatar_url
updated_at: 2000-01-23T04:56:07.000+00:00
is_disabled: true
created_at: 2000-01-23T04:56:07.000+00:00
primary_email: primary_email
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
display_name: display_name
properties:
avatar_url:
type: string
created_at:
format: date-time
type: string
display_name:
type: string
id:
description: "example: 3fa85f64-5717-4562-b3fc-2c963f66afa6"
format: uuid
type: string
is_disabled:
type: boolean
primary_email:
type: string
updated_at:
format: date-time
type: string
type: object
models.UserEmail:
example:
is_primary: true
updated_at: 2000-01-23T04:56:07.000+00:00
user_id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
created_at: 2000-01-23T04:56:07.000+00:00
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
is_verified: true
user:
avatar_url: avatar_url
updated_at: 2000-01-23T04:56:07.000+00:00
is_disabled: true
created_at: 2000-01-23T04:56:07.000+00:00
primary_email: primary_email
id: 046b6c7f-0b8a-43b9-b35d-6489e6daee91
display_name: display_name
email: email
properties:
created_at:
format: date-time
type: string
email:
type: string
id:
description: "example: 3fa85f64-5717-4562-b3fc-2c963f66afa6"
format: uuid
type: string
is_primary:
type: boolean
is_verified:
type: boolean
updated_at:
format: date-time
type: string
user:
$ref: "#/components/schemas/models.User"
user_id:
format: uuid
type: string
type: object
utils.ErrorResponse:
example:
code: code
message: message
properties:
code:
description: |-
A machine-readable error code, e.g. "validation_error"
example: validation_error
type: string
message:
description: |-
Human-readable message
example: slug is required
type: string
type: object
securitySchemes:
ApiKeyAuth:
description: User API key
in: header
name: X-API-KEY
type: apiKey
BearerAuth:
description: Bearer token authentication
in: header
name: Authorization
type: apiKey
OrgKeyAuth:
description: Org-level key/secret authentication
in: header
name: X-ORG-KEY
type: apiKey
OrgSecretAuth:
description: Org-level secret
in: header
name: X-ORG-SECRET
type: apiKey
x-original-swagger-version: "2.0"