ReferenciaReferencia de la API

Referencia de la API

Todos los endpoints de la API de eQuantic Space, generados desde la propia API.

La API que usan la aplicación web, la CLI eqs y los runners. Esta página se genera a partir del documento OpenAPI de la propia API, así que lista exactamente los endpoints que sirve.

URL base

DóndeURL base
Nube de eQuantic Spacehttps://api.app.equantic.space
Una instalación self-hostedhttps://api.<tu-dominio>

Autenticación

Envía un token en la cabecera Authorization:

bash
curl -H "Authorization: Bearer $EQS_TOKEN" https://api.app.equantic.space/v1/workspaces

El token puede ser un token de acceso personal o el secreto de un service principal (consulta Acceso (RBAC)). Cada petición se comprueba contra los roles de la identidad que hay detrás del token.

Endpoints

Los resúmenes están en inglés, tal como los documenta la API.

400 endpoints en 74 áreas

Access

GET/v1/access/assignments

Parámetros

NombreUbicaciónTipoDescripción
scopeTypequerystring
scopeIdquerystring
inheritedquerystring

Respuestas

  • 200
POST/v1/access/assignments

Cuerpo de la peticiónAddAssignmentDto

Respuestas

  • 201
DELETE/v1/access/assignments/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/access/effective

Parámetros

NombreUbicaciónTipoDescripción
principalTypequerystring
principalIdobligatorioquerystring
scopeTypequerystring
scopeIdquerystring

Respuestas

  • 200
GET/v1/access/roles

Respuestas

  • 200
POST/v1/access/roles

Cuerpo de la peticiónCreateRoleDto

Respuestas

  • 201
PATCH/v1/access/roles/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateRoleDto

Respuestas

  • 200
DELETE/v1/access/roles/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/access/scopes

Respuestas

  • 200
GET/v1/access/service-principals

Respuestas

  • 200
POST/v1/access/service-principals

Cuerpo de la peticiónCreateSpDto

Respuestas

  • 201
GET/v1/access/service-principals/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
scopeTypequerystring
scopeIdquerystring

Respuestas

  • 200
PATCH/v1/access/service-principals/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateSpDto

Respuestas

  • 200
DELETE/v1/access/service-principals/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/access/service-principals/{id}/assignments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónAddSpAssignmentDto

Respuestas

  • 201
DELETE/v1/access/service-principals/{id}/assignments/{assignmentId}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
assignmentIdobligatoriopathstring

Respuestas

  • 204
POST/v1/access/service-principals/{id}/certificates

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónAddSpCertDto

Respuestas

  • 201
POST/v1/access/service-principals/{id}/credentials

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónAddSpCredentialDto

Respuestas

  • 201
DELETE/v1/access/service-principals/{id}/credentials/{credentialId}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
credentialIdobligatoriopathstring

Respuestas

  • 204
GET/v1/access/tokens

Respuestas

  • 200
POST/v1/access/tokens

Cuerpo de la peticiónCreateTokenDto

Respuestas

  • 201
DELETE/v1/access/tokens/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204

App

GET/

Respuestas

  • 200
GET/health

Respuestas

  • 200

ArtifactBlob

GET/_apis/results/download/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PUT/_apis/results/upload/{uploadId}

Parámetros

NombreUbicaciónTipoDescripción
uploadIdobligatoriopathstring
blockidqueryobject
compqueryobject

Respuestas

  • 201

ArtifactResults

POST/twirp/github.actions.results.api.v1.ArtifactService/CreateArtifact

Respuestas

  • 201
POST/twirp/github.actions.results.api.v1.ArtifactService/FinalizeArtifact

Respuestas

  • 201
POST/twirp/github.actions.results.api.v1.ArtifactService/GetSignedArtifactURL

Respuestas

  • 201
POST/twirp/github.actions.results.api.v1.ArtifactService/ListArtifacts

Respuestas

  • 201

Artifacts

GET/v1/artifacts

Respuestas

  • 200
POST/v1/artifacts

Cuerpo de la peticiónCreateArtifactRepoDto

NombreTipoDescripción
typeobligatorio"container" | "npm" | "maven" | "nuget" | "rubygems" | "pypi"
nameobligatoriostring
visibilityobligatorio"private" | "public" | "internal"
descriptionstring
immutableTagsboolean
scanOnPushboolean

Respuestas

  • 201
GET/v1/artifacts/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PATCH/v1/artifacts/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateArtifactRepoDto

NombreTipoDescripción
visibility"private" | "public" | "internal"
descriptionstring
immutableTagsboolean
scanOnPushboolean
requireSignedPullboolean

Respuestas

  • 204
DELETE/v1/artifacts/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/artifacts/{id}/policies

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreatePolicyDto

NombreTipoDescripción
nameobligatoriostring
kindobligatorio"keep-n" | "age" | "policy"
scopeobligatoriostring
valueobligatorionumber
actionobligatorio"keep" | "delete" | "block"
enabledboolean

Respuestas

  • 201
PATCH/v1/artifacts/{id}/policies/{policyId}

Parámetros

NombreUbicaciónTipoDescripción
policyIdobligatoriopathstring

Cuerpo de la peticiónUpdatePolicyDto

NombreTipoDescripción
namestring
kind"keep-n" | "age" | "policy"
scopestring
valuenumber
action"keep" | "delete" | "block"
enabledboolean

Respuestas

  • 204
DELETE/v1/artifacts/{id}/policies/{policyId}

Parámetros

NombreUbicaciónTipoDescripción
policyIdobligatoriopathstring

Respuestas

  • 204
GET/v1/artifacts/{id}/retention/preview

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/artifacts/{id}/signing-keys

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/artifacts/{id}/signing-keys

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónAddSigningKeyDto

NombreTipoDescripción
nameobligatoriostring
publicKeyobligatoriostringPEM-encoded cosign public key (`cosign.pub`).

Respuestas

  • 201
DELETE/v1/artifacts/{id}/signing-keys/{keyId}

Parámetros

NombreUbicaciónTipoDescripción
keyIdobligatoriopathstring

Respuestas

  • 204
GET/v1/artifacts/{id}/versions/{tag}/layers

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
tagobligatoriopathstring

Respuestas

  • 200
GET/v1/artifacts/usage

Respuestas

  • 200

AzureAccount

GET/v1/accounts/azure-devopsConnection state (organization + connections) for the connect UI (P1c).

Respuestas

  • 200
PUT/v1/accounts/azure-devopsConnect (or re-auth) an Azure DevOps organization with a PAT.

Cuerpo de la peticiónConnectAzureAccountDto

NombreTipoDescripción
organizationobligatoriostringOrganization name only — `equantic` in `https://dev.azure.com/equantic`.
patobligatoriostringAzure DevOps personal access token (Code read scope at minimum).

Respuestas

  • 200
GET/v1/accounts/azure-devops/repositories

Respuestas

  • 200

BitbucketAccount

GET/v1/accounts/bitbucketConnection state (login + connections) for the connect UI.

Respuestas

  • 200
PUT/v1/accounts/bitbucketConnect (or re-auth) a Bitbucket account with a username + secret pair.

Cuerpo de la peticiónConnectBitbucketAccountDto

NombreTipoDescripción
usernameobligatoriostringHTTP Basic username (ADR-025 B1): the Bitbucket USERNAME when pairing with an app password, or the Atlassian account E-MAIL when pairing with the newer API tokens. Stored as the connection's login and replayed on every Basic call.
secretobligatoriostringApp password or Atlassian API token (repository read at minimum).
workspaceobligatoriostringThe Bitbucket WORKSPACE slug to list repositories under — `equantic` in `bitbucket.org/equantic`. REQUIRED since CHANGE-2770 (the user-wide listing endpoints return HTTP 410); stored on the account's `host`. A workspace id is a slug: letters/numbers plus `-`/`_`.

Respuestas

  • 200
GET/v1/accounts/bitbucket/repositories

Respuestas

  • 200

Boards

POST/v1/containers/{containerId}/stages

Parámetros

NombreUbicaciónTipoDescripción
containerIdobligatoriopathstring

Cuerpo de la peticiónCreateStageDto

NombreTipoDescripción
nameobligatoriostring
stageType"TODO" | "IN_PROGRESS" | "REVIEW" | "TESTING" | "DONE" | "BLOCKED" | "CUSTOM"
colorstring

Respuestas

  • 201
GET/v1/containers/{containerId}/views

Parámetros

NombreUbicaciónTipoDescripción
containerIdobligatoriopathstring

Respuestas

  • 200
POST/v1/containers/{containerId}/views

Parámetros

NombreUbicaciónTipoDescripción
containerIdobligatoriopathstring

Cuerpo de la peticiónCreateViewDto

NombreTipoDescripción
nameobligatoriostring
typeobligatorio"TABLE" | "LIST" | "BOARD" | "CALENDAR" | "TIMELINE" | "GANTT"
configobjectfilters/sorts/groupBy/columns keyed by fieldId — stored, executed client-side.
isDefaultboolean

Respuestas

  • 201
GET/v1/containers/{containerId}/workflow

Parámetros

NombreUbicaciónTipoDescripción
containerIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/items/{id}/stage

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetItemStageDto

NombreTipoDescripción
stageIdstringThe target stage; omit / null to unstage the item.

Respuestas

  • 200
PATCH/v1/stages/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateStageDto

NombreTipoDescripción
namestring
colorstringnull clears the color.
stageType"TODO" | "IN_PROGRESS" | "REVIEW" | "TESTING" | "DONE" | "BLOCKED" | "CUSTOM"
afterStageIdstringReorder: place after this stage (omit / null for the first column).

Respuestas

  • 200
DELETE/v1/stages/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
PATCH/v1/views/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateViewDto

NombreTipoDescripción
namestring
configobject
isDefaultboolean

Respuestas

  • 200
DELETE/v1/views/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204

BranchProtections

GET/v1/repositories/{repositoryId}/branch-protections

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/repositories/{repositoryId}/branch-protectionsUpserts THE rule for `branchPattern` (the body's key). PUT is declarative full state — omitted fields fall back to the defaults, they never keep the previous value.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Cuerpo de la peticiónPutBranchProtectionDto

NombreTipoDescripción
branchPatternobligatoriostringExact branch name (`main`) or a simple segment-scoped `*` glob (`release/*`).
requiredApprovalsnumber
requireChecksboolean
requireLinearboolean
requireUpToDateboolean
dismissStaleboolean
blockOnUnresolvedBlockingboolean
strategies"merge" | "squash" | "rebase"[]
defaultStrategy"merge" | "squash" | "rebase"

Respuestas

  • 200
DELETE/v1/repositories/{repositoryId}/branch-protections/{ruleId}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
ruleIdobligatoriopathstring

Respuestas

  • 204

Cache

GET/_apis/artifactcache/artifacts/{id}Streams a committed entry — the target of every download URL we hand out, v1 and v2 alike. Answers `Range` with a 206 because that is how the Azure URLs GitHub issues behave, and buildkit's `type=gha` reads cache blobs through a ReaderAt that asks for `bytes=<offset>-`.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
tokenqueryobject

Respuestas

  • 200
GET/_apis/artifactcache/cache

Parámetros

NombreUbicaciónTipoDescripción
keysobligatorioquerystring
versionobligatorioquerystring

Respuestas

  • 200
POST/_apis/artifactcache/caches

Respuestas

  • 201
POST/_apis/artifactcache/caches/{cacheId}

Parámetros

NombreUbicaciónTipoDescripción
cacheIdobligatoriopathstring

Respuestas

  • 204
PATCH/_apis/artifactcache/caches/{cacheId}

Parámetros

NombreUbicaciónTipoDescripción
cacheIdobligatoriopathstring

Respuestas

  • 204

CacheBlob

PUT/_apis/results/cache-upload/{uploadId}

Parámetros

NombreUbicaciónTipoDescripción
uploadIdobligatoriopathstring
blockidqueryobject
compqueryobject

Respuestas

  • 201

CacheResults

POST/twirp/github.actions.results.api.v1.CacheService/CreateCacheEntry

Respuestas

  • 200
POST/twirp/github.actions.results.api.v1.CacheService/FinalizeCacheEntryUpload

Respuestas

  • 200
POST/twirp/github.actions.results.api.v1.CacheService/GetCacheEntryDownloadURL

Respuestas

  • 200

Catalog

GET/v1/catalog/categories

Respuestas

  • 200
GET/v1/catalog/services

Parámetros

NombreUbicaciónTipoDescripción
categoryobligatorioquerystring

Respuestas

  • 200
GET/v1/catalog/services/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200

CiStorage

GET/v1/ci-storage

Respuestas

  • 200
PUT/v1/ci-storage/policySaves the policy. The next sweep, at most an hour away, applies it.

Cuerpo de la peticiónCiStoragePolicyDto

NombreTipoDescripción
cacheIdleDaysnumberA cache entry nobody restored in more than this many days goes. 0 = never.
cacheRepoLimitGbnumberA repository's cache limit, in GB. 0 = no limit.
artifactRetentionDaysnumberArtifact retention in days: GitHub allows 1 to 400.
logRetentionDaysnumberRun log retention in days. 0 = never remove.
storageLimitGbnumberThe most cache and artifacts may hold together, in GB. Null = automatic (a fifth of the volume), 0 = no total limit.
diskFloorPercentnumberThe share of the volume kept free, in percent. 0 = off.

Respuestas

  • 200
POST/v1/ci-storage/previewWhat a candidate policy would come to on this disk, without saving it: the limit it sets, the disk's floor, and whether CI is over. The screen shows it while the operator types, from the same arithmetic the sweep uses, instead of a copy of that arithmetic in the browser. An empty field is the default, as it would be once saved.

Cuerpo de la peticiónCiStoragePolicyDto

NombreTipoDescripción
cacheIdleDaysnumberA cache entry nobody restored in more than this many days goes. 0 = never.
cacheRepoLimitGbnumberA repository's cache limit, in GB. 0 = no limit.
artifactRetentionDaysnumberArtifact retention in days: GitHub allows 1 to 400.
logRetentionDaysnumberRun log retention in days. 0 = never remove.
storageLimitGbnumberThe most cache and artifacts may hold together, in GB. Null = automatic (a fifth of the volume), 0 = no total limit.
diskFloorPercentnumberThe share of the volume kept free, in percent. 0 = off.

Respuestas

  • 200
POST/v1/ci-storage/sweepStarts a sweep now, for an operator who just lowered a limit, and answers as soon as it is recorded: the pass runs on, and the screen follows it in `sweeps`. `started` is false when this replica was already sweeping.

Respuestas

  • 202

CodeBrowser

GET/v1/repositories/{repositoryId}/code/branchesBranch names + the default branch (the ref picker).

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/code/detect-stackInferred build stack (buildpack, port, relevant files, suggested env) from the repo's real files — backs the deploy wizard's "detect stack".

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
refquerystring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/code/fileRaw content of a single file.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
pathobligatorioquerystring
refquerystring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/code/filepathsEvery file path at a ref (recursive) for the file finder.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
refquerystring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/code/rawRaw file bytes — backs the README image proxy so private-repo images load with the owner's token. Served with `nosniff` + a locked-down CSP so a non-image path can never execute as active content in our origin.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
pathobligatorioquerystring
refquerystring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/code/treeDirectory listing at `path` (root when omitted).

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
refquerystring
pathqueryobject

Respuestas

  • 200

Comments

GET/v1/blocks/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/blocks/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateCommentDto

NombreTipoDescripción
bodyobligatoriostring
mentionsstring[]Mentioned user ids.
parentCommentIdstringReply to this comment (must be on the same target); omit for top-level.

Respuestas

  • 201
PATCH/v1/comments/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateCommentDto

NombreTipoDescripción
bodystring
mentionsstring[]

Respuestas

  • 200
DELETE/v1/comments/{id}As editing: its author, or whoever may update the item.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/comments/{id}/reactions

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónReactionDto

NombreTipoDescripción
emojiobligatoriostringThe emoji to add (e.g. "👍", "🎉").

Respuestas

  • 204
DELETE/v1/comments/{id}/reactions/{emoji}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
emojiobligatoriopathstring

Respuestas

  • 204
PUT/v1/comments/{id}/resolution

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónResolveCommentDto

NombreTipoDescripción
resolvedobligatoriobooleantrue resolves the comment, false reopens it.

Respuestas

  • 200
GET/v1/docs/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/docs/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateCommentDto

NombreTipoDescripción
bodyobligatoriostring
mentionsstring[]Mentioned user ids.
parentCommentIdstringReply to this comment (must be on the same target); omit for top-level.

Respuestas

  • 201
GET/v1/items/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/items/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateCommentDto

NombreTipoDescripción
bodyobligatoriostring
mentionsstring[]Mentioned user ids.
parentCommentIdstringReply to this comment (must be on the same target); omit for top-level.

Respuestas

  • 201

Containers

GET/v1/container-types

Respuestas

  • 200
POST/v1/container-types

Cuerpo de la peticiónCreateContainerTypeDto

NombreTipoDescripción
nameobligatoriostring
iconstring
colorstring
allowedChildTypeIdsstring[]ContainerType ids this type may directly nest (empty = leaf).
allowedItemTypeIdsstring[]ItemType ids this type may directly hold (F2; reserved).

Respuestas

  • 201
PATCH/v1/containers/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateContainerDto

NombreTipoDescripción
namestring
configobject

Respuestas

  • 200
DELETE/v1/containers/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/containers/{id}/duplicate

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 201
POST/v1/containers/{id}/move

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónMoveContainerDto

NombreTipoDescripción
parentContainerIdstringNew parent; omit / null to move to the top level (under the Space).
afterContainerIdstringPlace directly after this sibling; omit / null for the first position.
spaceIdstringMove to another Space of the same workspace; omit to stay where it is. The whole subtree follows, and the items' Space-scoped links (sprint, key result, tags) are dropped — they belong to the Space being left.

Respuestas

  • 201
GET/v1/spaces/{spaceId}/containers

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/spaces/{spaceId}/containers

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónCreateContainerDto

NombreTipoDescripción
nameobligatoriostring
containerTypeIdobligatoriostring
parentContainerIdstringOmit / null for a top-level container directly under the Space.
configobject

Respuestas

  • 201

Dependencies

DELETE/v1/dependencies/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/items/{id}/dependencies

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/items/{id}/dependencies

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónAddItemDependencyDto

NombreTipoDescripción
targetItemIdobligatoriostringThe other item in the relation.
typeobligatorio"blocks" | "blocked_by"`blocks` → this item blocks the target; `blocked_by` → the target blocks it.

Respuestas

  • 201

DeployCluster

DELETE/v1/deploy/clusterDeprovisions the active workspace's vcluster — reclaims the whole cluster. Running workloads are removed and the services marked stopped; the records survive and a redeploy re-provisions. Irreversible until the next deploy.

Respuestas

  • 204

DeploymentLogs

GET/v1/deployments/{deploymentId}/logsLive build/deploy logs for a Deployment (Server-Sent Events).

Parámetros

NombreUbicaciónTipoDescripción
deploymentIdobligatoriopathstring

Respuestas

  • 200
GET/v1/deployments/{deploymentId}/logs/historyThe persisted log of a finished deploy (after the live SSE channel is gone).

Parámetros

NombreUbicaciónTipoDescripción
deploymentIdobligatoriopathstring

Respuestas

  • 200

DocCollab

POST/v1/docs/{id}/collab/token

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 201

Docs

PATCH/v1/blocks/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateBlockDto

NombreTipoDescripción
blockType"PARAGRAPH" | "HEADING_1" | "HEADING_2" | "HEADING_3" | "BULLET_ITEM" | "NUMBERED_ITEM" | "TODO" | "QUOTE" | "CODE" | "DIVIDER" | "CALLOUT" | "TOGGLE" | "IMAGE" | "FILE" | "EMBED" | "TABLE" | "MERMAID" | "EQUATION"
contentobjectnull clears the block's content.

Respuestas

  • 200
DELETE/v1/blocks/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/blocks/{id}/move

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónMoveBlockDto

NombreTipoDescripción
parentBlockIdstringNew parent block (nest/indent); omit / null for top-level in the doc.
afterBlockIdstringPlace after this sibling block; omit / null for the first position.

Respuestas

  • 201
POST/v1/docs/{docId}/blocks

Parámetros

NombreUbicaciónTipoDescripción
docIdobligatoriopathstring

Cuerpo de la peticiónCreateBlockDto

NombreTipoDescripción
blockTypeobligatorio"PARAGRAPH" | "HEADING_1" | "HEADING_2" | "HEADING_3" | "BULLET_ITEM" | "NUMBERED_ITEM" | "TODO" | "QUOTE" | "CODE" | "DIVIDER" | "CALLOUT" | "TOGGLE" | "IMAGE" | "FILE" | "EMBED" | "TABLE" | "MERMAID" | "EQUATION"
contentobject
parentBlockIdstringNest under this block (list item, table cell); omit for top-level.
afterBlockIdstringPlace after this sibling block; omit / null for the first position.

Respuestas

  • 201
GET/v1/docs/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PATCH/v1/docs/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateDocDto

NombreTipoDescripción
titlestring
iconstringnull clears the icon.
isArchivedboolean

Respuestas

  • 200
DELETE/v1/docs/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/docs/{id}/move

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónMoveDocDto

NombreTipoDescripción
parentDocIdstringNew parent doc; omit / null for the top level under the Space.
afterDocIdstringPlace after this sibling; omit / null for the first position.

Respuestas

  • 201
GET/v1/spaces/{spaceId}/docs

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/spaces/{spaceId}/docs

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónCreateDocDto

NombreTipoDescripción
titleobligatoriostring
parentDocIdstringOmit / null for a top-level doc under the Space.
iconstring

Respuestas

  • 201

DocUploads

POST/v1/docs/{docId}/uploads`POST /v1/docs/:docId/uploads` — raw-body upload (the global body parser skips `/v1/docs` uploads via RAW_STREAM_PREFIXES, so `req` is the unparsed stream). Filename from `x-filename`, content-type from `content-type`.

Parámetros

NombreUbicaciónTipoDescripción
docIdobligatoriopathstring

Respuestas

  • 201
GET/v1/uploads/{splat}`GET /v1/uploads/*splat` — serves an upload by its full key (which contains slashes). 404 when the key is unknown. Content-type is derived from the key's extension; the body is streamed back inline.

Respuestas

  • 200

DocVersions

GET/v1/docs/{id}/versions

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/docs/{id}/versions

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCaptureDocVersionDto

Respuestas

  • 201
GET/v1/docs/{id}/versions/{versionId}/content

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
versionIdobligatoriopathstring

Respuestas

  • 200

Fleet

POST/v1/fleet/join-grantReserves a slot + mints a single-use join grant for a new VPS.

Cuerpo de la peticiónRequestJoinGrantDto

NombreTipoDescripción
roleobligatorio"server" | "agent"The k3s role the new node will take.

Respuestas

  • 201
GET/v1/fleet/nodesThe fleet's nodes + the control-plane quorum summary (one round-trip).

Respuestas

  • 200
GET/v1/fleet/nodes/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
DELETE/v1/fleet/nodes/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/fleet/nodes/{id}/cordon

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/fleet/nodes/{id}/drain

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/fleet/nodes/provisionAuto-provisions a VPS that self-joins (ADR-017, Phase C slice 2): creates the cloud server from a saved provider credential with cloud-init that runs the fleet join one-liner on first boot. Returns metadata only — never the grant.

Cuerpo de la peticiónProvisionNodeDto

NombreTipoDescripción
providerConfigIdobligatoriostring (uuid)The registered FleetProvider credential to create the VPS with.
regionobligatoriostringProvider region/location slug (provider-specific).
serverTypeobligatoriostringProvider server-type/size slug (provider-specific).
roleobligatorio"server" | "agent"The k3s role the new node will take.
namestringOptional server name; defaults to `eqs-<shortId>` when omitted.

Respuestas

  • 201
POST/v1/fleet/nodes/registerRedeems a join grant — the caller is the unauthenticated new node, the grant is its credential. Returns what the join script needs to wire into the cluster (stubbed 503 this slice).

Cuerpo de la peticiónRegisterNodeDto

NombreTipoDescripción
tokenobligatoriostringThe single-use join grant the node was handed at provisioning time.
wgPublicKeyobligatoriostringThe node's WireGuard public key (the private key never leaves the box).
publicIpstringThe node's public IP / wg endpoint, when it has one.
k3sNodeNamestringThe k3s node name the box will register under, when known up front.

Respuestas

  • 201
GET/v1/fleet/peersThe WireGuard mesh registry — a joined node's host-side sync agent pulls this (authenticated with its long-lived node token) and reconciles its own `wg0`. `@Public()` because the caller is a node, not a session user; the node token is the credential.

Parámetros

NombreUbicaciónTipoDescripción
authorizationobligatorioheaderstring

Respuestas

  • 200

FleetProviders

GET/v1/fleet/providersLists registered credentials (metadata only — no tokens).

Respuestas

  • 200
POST/v1/fleet/providersRegisters a credential (verifies the token live, then encrypts it).

Cuerpo de la peticiónCreateFleetProviderDto

NombreTipoDescripción
nameobligatoriostringThe operator's label, e.g. "Hetzner prod".
providerobligatorio"hetzner" | "digitalocean"Which cloud this credential talks to.
tokenobligatoriostringThe provider API token (verified live, then encrypted at rest).
defaultRegionstringDefault location/region slug for created VPSs (provider-specific).
defaultServerTypestringDefault server type/size slug for created VPSs (provider-specific).

Respuestas

  • 201
DELETE/v1/fleet/providers/{id}Removes a credential (soft delete).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204

GithubAccount

GET/v1/accounts/github

Respuestas

  • 200
PUT/v1/accounts/github

Cuerpo de la peticiónConnectGithubAccountDto

NombreTipoDescripción
tokenobligatoriostringPersonal access token (classic or fine-grained).

Respuestas

  • 200
DELETE/v1/accounts/githubDisconnect every GitHub connection in the workspace.

Respuestas

  • 204
PUT/v1/accounts/github/appConnect a BYO GitHub App by its credentials (the workspace's own App).

Cuerpo de la peticiónConnectGithubAppDto

NombreTipoDescripción
installationIdobligatoriostring
appIdobligatoriostring
clientIdobligatoriostring
clientSecretstring
privateKeyobligatoriostring
webhookSecretstring

Respuestas

  • 200
GET/v1/accounts/github/app/configGitHub App configuration for the connect-flow UI (managed availability).

Respuestas

  • 200
GET/v1/accounts/github/app/installation-lookup"Already installed?" — look the managed App's installation up on an org/user, so an existing installation connects without a new install round-trip (the Install button stays for other orgs).

Parámetros

NombreUbicaciónTipoDescripción
ownerqueryobject

Respuestas

  • 200
POST/v1/accounts/github/app/managedFinalize a managed install (the platform App) from its installation id.

Cuerpo de la peticiónConnectGithubManagedAppDto

NombreTipoDescripción
installationIdobligatoriostring

Respuestas

  • 201
DELETE/v1/accounts/github/connections/{id}Disconnect one connection (App installation) by its id.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/accounts/github/repositories

Respuestas

  • 200

GithubIssues

GET/v1/github/repos/{owner}/{repo}/issues

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
statequery"open" | "closed" | "all"open (the default), closed or all.
assigneequerystringA login, `@me`, `none` (unassigned) or `*` (assigned to anyone).
authorquerystringA login or `@me`.
mentionquerystringA login or `@me`: the issues that mention them.
appquerystringA GitHub App's slug: the issues it opened.
labelsquerystringLabel names, separated by commas: the issue carries all of them.
milestonequerystringA milestone's number or title, `none` or `*`.
typequerystringAn issue type's name, `none` or `*`.
searchquerystringWords to search for, in GitHub's search syntax.
limitquerynumber30 by default.

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring

Cuerpo de la peticiónCreateGithubIssueDto

NombreTipoDescripción
titleobligatoriostring
bodystring
assigneesstring[]Logins, or `@me`.
labelsstring[]
milestonestringA milestone's number or title.
typestringAn issue type's name.
parentnumberThe number of the issue this one is a sub-issue of.
blockedBynumber[]Issues, by number, that block it.
blockingnumber[]Issues, by number, it blocks.

Respuestas

  • 201
GET/v1/github/repos/{owner}/{repo}/issues/{number}

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber
commentsquerybooleanWith its comments.
relationsquerybooleanWith its parent, its sub-issues, and what blocks it and what it blocks.

Respuestas

  • 200
PATCH/v1/github/repos/{owner}/{repo}/issues/{number}

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónEditGithubIssueDto

NombreTipoDescripción
titlestring
bodystring
addAssigneesstring[]
removeAssigneesstring[]
addLabelsstring[]
removeLabelsstring[]
milestonestringA milestone's number or title; null takes it off.
typestringAn issue type's name; null takes it off.
parentnumberThe number of the issue it becomes a sub-issue of.
removeParentbooleanTakes it off its parent.
addBlockedBynumber[]Issues, by number, that block it from now on.
removeBlockedBynumber[]
addBlockingnumber[]Issues, by number, it blocks from now on.
removeBlockingnumber[]
addSubIssuesnumber[]Issues, by number, that become its sub-issues.
removeSubIssuesnumber[]

Respuestas

  • 200
DELETE/v1/github/repos/{owner}/{repo}/issues/{number}GitHub cannot undo it, so it needs `issue.delete`, which only owners hold.

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Respuestas

  • 204
GET/v1/github/repos/{owner}/{repo}/issues/{number}/branchesgh issue develop --list.

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues/{number}/branchesgh issue develop: a branch linked to the issue.

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónCreateGithubIssueBranchDto

NombreTipoDescripción
repositorystringAnother repository for the branch, as `owner/name`, as a fork.
namestringBy default, as GitHub names it: the number and the title.
basestringThe branch it starts from; by default the repository's default branch.

Respuestas

  • 201
POST/v1/github/repos/{owner}/{repo}/issues/{number}/close

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónCloseGithubIssueDto

NombreTipoDescripción
reason"COMPLETED" | "NOT_PLANNED" | "DUPLICATE"COMPLETED (the default), NOT_PLANNED or DUPLICATE.
commentstringPosted before it is closed.
duplicateOfnumberWith DUPLICATE: the number of the issue it duplicates.

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues/{number}/comments

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónCommentGithubIssueDto

NombreTipoDescripción
bodyobligatoriostring

Respuestas

  • 201
PATCH/v1/github/repos/{owner}/{repo}/issues/{number}/comments/lastgh issue comment --edit-last: the member's last comment, which GitHub may show as the App's (see GithubMemberComments).

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónEditLastGithubCommentDto

NombreTipoDescripción
bodyobligatoriostring
createIfNonebooleanComment instead, when the member has none to edit.

Respuestas

  • 200
DELETE/v1/github/repos/{owner}/{repo}/issues/{number}/comments/lastgh issue comment --delete-last: answers the comment it deleted.

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues/{number}/lock

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónLockGithubIssueDto

NombreTipoDescripción
reason"OFF_TOPIC" | "RESOLVED" | "SPAM" | "TOO_HEATED"

Respuestas

  • 200
DELETE/v1/github/repos/{owner}/{repo}/issues/{number}/lock

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues/{number}/pin

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Respuestas

  • 200
DELETE/v1/github/repos/{owner}/{repo}/issues/{number}/pin

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues/{number}/reopen

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónReopenGithubIssueDto

NombreTipoDescripción
commentstringPosted before it is reopened.

Respuestas

  • 200
POST/v1/github/repos/{owner}/{repo}/issues/{number}/transfer

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring
numberobligatoriopathnumber

Cuerpo de la peticiónTransferGithubIssueDto

NombreTipoDescripción
repositoryobligatoriostringThe destination, as `owner/name`, of the same owner.

Respuestas

  • 200
GET/v1/github/repos/{owner}/{repo}/my-issuesgh issue status: the member's open issues, assigned, mentioning them and opened by them.

Parámetros

NombreUbicaciónTipoDescripción
ownerobligatoriopathstring
repoobligatoriopathstring

Respuestas

  • 200

GitlabAccount

GET/v1/accounts/gitlabConnection state (login + host + connections) for the connect UI.

Respuestas

  • 200
PUT/v1/accounts/gitlabConnect (or re-auth) a GitLab account with a PAT (+ optional host).

Cuerpo de la peticiónConnectGitlabAccountDto

NombreTipoDescripción
patobligatoriostringGitLab personal access token (`read_api`/`read_repository` at minimum).
hoststringSelf-hosted GitLab base URL (ADR-025 G1), e.g. `https://gitlab.example.com`. Omit/empty for gitlab.com. Normalized and fully validated (https-only, no credentials/path) by the handler — `normalizeGitlabHost` — so the error message can be precise.

Respuestas

  • 200
GET/v1/accounts/gitlab/repositories

Respuestas

  • 200

Goals

GET/v1/goals/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PATCH/v1/goals/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateGoalDto

NombreTipoDescripción
namestring
descriptionstringnull clears the description.
status"ON_TRACK" | "AT_RISK" | "OFF_TRACK" | "ACHIEVED"
startDatestring
endDatestring

Respuestas

  • 200
DELETE/v1/goals/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/goals/{id}/key-results

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateKeyResultDto

NombreTipoDescripción
nameobligatoriostring
targetValueobligatorionumber
startValuenumber
currentValuenumber
unitstring
weightnumber

Respuestas

  • 201
PUT/v1/items/{id}/key-result

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetItemKeyResultDto

NombreTipoDescripción
keyResultIdstringThe key result the item contributes to; omit / null to unlink.

Respuestas

  • 200
PATCH/v1/key-results/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateKeyResultDto

NombreTipoDescripción
namestring
currentValuenumber
startValuenumber
targetValuenumber
unitstringnull clears the unit.
weightnumber

Respuestas

  • 200
DELETE/v1/key-results/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/spaces/{spaceId}/goals

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/spaces/{spaceId}/goals

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónCreateGoalDto

NombreTipoDescripción
nameobligatoriostring
descriptionstring
startDatestring
endDatestring

Respuestas

  • 201

ItemLifecycle

POST/v1/items/{id}/close

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCloseItemDto

NombreTipoDescripción
reason"COMPLETED" | "NOT_PLANNED" | "DUPLICATE"Why it is closed: completed (the default), not planned or a duplicate.
duplicateOfstringWith DUPLICATE: the item it duplicates, by identifier or id.
commentstringLeft on the item before it closes, and not at all when it is closed already.

Respuestas

  • 200
POST/v1/items/{id}/lock

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónLockItemDto

NombreTipoDescripción
reason"OFF_TOPIC" | "RESOLVED" | "SPAM" | "TOO_HEATED"

Respuestas

  • 200
DELETE/v1/items/{id}/lock

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/items/{id}/pin

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
DELETE/v1/items/{id}/pin

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/items/{id}/relationsIts parent, its sub-items, and what blocks it and what it blocks.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/items/{id}/reopen

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónReopenItemDto

NombreTipoDescripción
commentstringLeft on the item before it reopens, and not at all when it is open already.

Respuestas

  • 200
POST/v1/items/{id}/transferMoves the item, with its sub-items, to another list, in any space.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónTransferItemDto

NombreTipoDescripción
containerIdobligatoriostringThe list it moves to, in its space or in another.

Respuestas

  • 200
GET/v1/items/by-identifier/{identifier}

Parámetros

NombreUbicaciónTipoDescripción
identifierobligatoriopathstring

Respuestas

  • 200
GET/v1/me/itemsWhat is the member's: assigned to them, mentioning them, opened by them, in the spaces where they may read items.

Respuestas

  • 200
GET/v1/spaces/{spaceId}/itemsPinned items first, then the most recently updated, a page at a time.

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring
statequery"open" | "closed" | "all"open (not in a done stage, the default), closed, or all.
assigneequerystring`me`, a user's id or their email.
tagquerystringA tag's label, in either case. Several, separated by commas, must all be on the item.
typequerystringAn item type's slug or name, in either case.
listquerystringA list's id or name, in either case.
mentionquerystring`me`, a user's id or their email: a comment on the item mentions them.
qquerystringWords the title holds, in either case.
limitquerynumber
cursorquerystringThe `next` of the previous page.

Respuestas

  • 200

Items

GET/v1/containers/{containerId}/items

Parámetros

NombreUbicaciónTipoDescripción
containerIdobligatoriopathstring

Respuestas

  • 200
POST/v1/containers/{containerId}/items

Parámetros

NombreUbicaciónTipoDescripción
containerIdobligatoriopathstring

Cuerpo de la peticiónCreateItemDto

NombreTipoDescripción
titleobligatoriostring
itemTypeIdobligatoriostring
descriptionstringPlain-text description — used when no rich blocks are sent.
descriptionBlocksobject[]Rich description as editor blocks (`SerializedBlock[]`); the plain-text `description` is derived from it server-side.
estimatenumberEffort estimate (>= 0) + its unit — planning / sprint capacity.
estimateUnit"DAYS" | "HOURS" | "POINTS"
parentItemIdstringParent item (Epic▸Story▸Task); omit / null for a top-level item.
workflowStageIdstringBoard column to drop the new card into; omit / null for an unplaced item.
prioritystring
startDatestringPlanned start. With `dueDate` it makes the item a span on the timeline.
dueDatestring
customFieldsobjectCustom-field values keyed by FieldDefinition id (validated server-side).

Respuestas

  • 201
GET/v1/item-types

Respuestas

  • 200
POST/v1/item-types

Cuerpo de la peticiónCreateItemTypeDto

NombreTipoDescripción
nameobligatoriostring
pluralNameobligatoriostring
identifierPrefixobligatoriostringUppercase prefix for human ids, e.g. "TASK" → TASK-1.
iconstring
colorstring
hierarchyLevelnumber1=Epic … 5=Subtask.

Respuestas

  • 201
GET/v1/item-types/{id}/fields

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/item-types/{id}/fields

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateFieldDefinitionDto

NombreTipoDescripción
nameobligatoriostring
fieldTypeobligatorio"DATETIME" | "DATE" | "TEXT" | "LONG_TEXT" | "NUMBER" | "CURRENCY" | "SELECT" | "MULTI_SELECT" | "USER" | "MULTI_USER" | "CHECKBOX" | "URL" | "EMAIL" | "PHONE" | "RATING" | "PROGRESS" | "RELATION" | "FORMULA"
configobjectPer-type settings: { options }, { min, max }, { expression }…
isRequiredboolean

Respuestas

  • 201
GET/v1/items/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PATCH/v1/items/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateItemDto

NombreTipoDescripción
titlestring
itemTypeIdstringAnother item type of the workspace; the identifier stays (ADR-039).
descriptionstringnull clears the description.
descriptionBlocksobject[]Rich description blocks; null clears. Plain text is derived server-side.
estimatenumbernull clears the estimate.
estimateUnit"DAYS" | "HOURS" | "POINTS"null clears the estimate unit.
prioritystringnull clears the priority.
startDatestringnull clears the planned start (back to a milestone).
dueDatestringnull clears the due date.

Respuestas

  • 200
DELETE/v1/items/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/items/{id}/activity

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PUT/v1/items/{id}/assignees

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetItemAssigneesDto

NombreTipoDescripción
userIdsobligatoriostring[]The complete desired assignee set (replaces the current assignees).

Respuestas

  • 200
POST/v1/items/{id}/duplicateCopy an item and its sub-items right after the original, in the same container and column. Assignees, tags, sprint, comments and links stay behind: a duplicate is a fresh start on the same work.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónDuplicateItemDto

NombreTipoDescripción
titlestringThe copy's title; defaults to the original's with " (cópia)".

Respuestas

  • 201
PUT/v1/items/{id}/fields

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetFieldValuesDto

NombreTipoDescripción
valuesobligatorioobject{ [fieldDefinitionId]: value | null } — null clears that field.

Respuestas

  • 200
POST/v1/items/{id}/move

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónMoveItemDto

NombreTipoDescripción
containerIdstringMove into another container (board/list); omit to stay put.
parentItemIdstringRe-parent in the item tree; omit / null for top-level.
afterItemIdstringPlace directly after this sibling; omit / null for the first position.

Respuestas

  • 201

Maven

GET/maven/{splat}

Respuestas

  • 200
POST/maven/{splat}

Respuestas

  • 200
PUT/maven/{splat}

Respuestas

  • 200
PATCH/maven/{splat}

Respuestas

  • 200
DELETE/maven/{splat}

Respuestas

  • 200

Me

GET/v1/me

Respuestas

  • 200

Npm

GET/npm/{splat}

Respuestas

  • 200
POST/npm/{splat}

Respuestas

  • 200
PUT/npm/{splat}

Respuestas

  • 200
PATCH/npm/{splat}

Respuestas

  • 200
DELETE/npm/{splat}

Respuestas

  • 200

NuGet

GET/nuget/{splat}

Respuestas

  • 200
POST/nuget/{splat}

Respuestas

  • 200
PUT/nuget/{splat}

Respuestas

  • 200
PATCH/nuget/{splat}

Respuestas

  • 200
DELETE/nuget/{splat}

Respuestas

  • 200

Pipelines

POST/v1/pipelines/previewWell under the global ceiling: this is unauthenticated AND the most expensive thing an anonymous caller can ask for — parse, expression evaluation, matrix expansion and needs-graph planning, all synchronous on the event loop. A handful of previews per minute covers the landing-page demo; a flood of adversarial YAML would otherwise stall the whole api.

Cuerpo de la peticiónPreviewPipelineDto

NombreTipoDescripción
yamlobligatoriostringRaw workflow YAML to parse, validate and plan.

Respuestas

  • 201

Previews

DELETE/v1/previews/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/previews/{id}/rebuild

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/repositories/{repositoryId}/open-prs

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/previews

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
POST/v1/repositories/{repositoryId}/previews

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Cuerpo de la peticiónCreatePreviewManuallyDto

NombreTipoDescripción
prNumberobligatorionumberThe open pull-request number to stand a preview up for.

Respuestas

  • 201

PrReviews

GET/v1/pull-requests/{id}/review-summaryThe `{approved, changes, unresolvedBlocking}` counts (F3's canMerge inputs).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/pull-requests/{id}/reviews

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/pull-requests/{id}/reviewsSubmit (or re-submit) the caller's verdict — update-or-create per reviewer.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSubmitReviewDto

NombreTipoDescripción
stateobligatorio"approved" | "changes"
bodystringOptional summary accompanying the verdict.

Respuestas

  • 201
GET/v1/pull-requests/{id}/threadsAll threads with comments; each carries `outdated` computed against the PR's current head (outdated threads are flagged, never hidden).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/pull-requests/{id}/threadsOpen a thread (line-anchored when `path` is present — validated against the current persisted diff — else a PR-level conversation); `body` is the first comment.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateReviewThreadDto

NombreTipoDescripción
pathstringDiff file path to anchor to; omit for a PR-level conversation thread.
side"old" | "new"Which side of the diff the line lives on (default `new`).
linenumber1-based line number on `side`, as carried by the persisted diff's hunks.
blockingbooleanReviewer veto: while unresolved, the PR cannot merge (F3).
bodyobligatoriostringThe thread's opening comment.

Respuestas

  • 201
POST/v1/threads/{id}/comments

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónAddThreadCommentDto

NombreTipoDescripción
bodyobligatoriostring

Respuestas

  • 201
POST/v1/threads/{id}/resolveResolve. A BLOCKING thread only by its creator (the veto holder); non-blocking by anyone with review permission.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 201
POST/v1/threads/{id}/unresolveReopen — anyone with review permission.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 201

PullRequests

GET/v1/pull-requests/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/pull-requests/{id}/checksThe PR's native CI checks for its CURRENT head (F5a, ADR-024 D7) — fed by eQuantic CI on `prMode = equantic` repos; empty when none reported.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/pull-requests/{id}/closeClose without merging (F3a) — the author, or anyone holding `pull_request.merge` (checked in-handler; the route rides read). Reopen is F7 — a close is final until then.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 201
GET/v1/pull-requests/{id}/diffThe persisted diff of the PR's current head (F1b) — `pending: true` until materialized, so the UI polls instead of handling a 404.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/pull-requests/{id}/enqueueEnqueue on the merge queue (F4a, ADR-024 D6): gated by `canMerge` with `requireUpToDate` treated as satisfied (rebase-testing against the current target IS the queue's job); any other unmet reason → 400 listing them. Entries are tested in order per (repository, targetBranch) and landed by the queue processor; the strategy is fixed at enqueue.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónEnqueuePullRequestDto

NombreTipoDescripción
strategy"merge" | "squash" | "rebase"

Respuestas

  • 201
DELETE/v1/pull-requests/{id}/enqueueRemove the PR's `waiting` entry from the merge queue (F4a) — the author, or anyone holding `pull_request.merge` (checked in-handler; the route rides read). A `testing` entry cannot be dequeued — its rebase-test is already running.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/pull-requests/{id}/mergeMerge (F3a): re-evaluates canMerge server-side, materializes the merge in an ephemeral workdir with OUR mechanism and pushes to the provider — never the provider's merge API (ADR-024 D3/D6). Blocked → 400 listing every unmet reason. The role gate is intentionally broad (`pull_request.merge` is granted to contributors); BRANCH PROTECTION does the real gating, per merge.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónMergePullRequestDto

NombreTipoDescripción
strategy"merge" | "squash" | "rebase"

Respuestas

  • 201
GET/v1/pull-requests/{id}/merge-statusThe `canMerge` verdict + inputs (F3a, ADR-024 D5) — read-only; the merge endpoint re-evaluates server-side and never trusts this view.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/merge-queueThe merge queue of a (repository, target branch) (F4a): live entries in queue order (1-based `position`; the testing head is 1) followed by the last 20 settled entries (`position` null) as history. `target` defaults to the repository's default branch.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
targetquerystring

Respuestas

  • 200
PUT/v1/repositories/{repositoryId}/pr-mode

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Cuerpo de la peticiónSetPrModeDto

NombreTipoDescripción
modeobligatorio"provider" | "equantic"

Respuestas

  • 204
GET/v1/repositories/{repositoryId}/pull-requests

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
statequerystring

Respuestas

  • 200
POST/v1/repositories/{repositoryId}/pull-requests

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Cuerpo de la peticiónCreatePullRequestDto

NombreTipoDescripción
titleobligatoriostring
bodystring
sourceBranchobligatoriostringBranch whose changes the PR proposes (its head sha is resolved from the forge).
targetBranchobligatoriostringBranch the PR merges into (its head sha becomes the diff base).

Respuestas

  • 201

Pypi

GET/pypitwine uploads POST to the bare `/pypi/` — a dedicated route because the `*splat` wildcard below doesn't match an empty remainder.

Respuestas

  • 200
POST/pypitwine uploads POST to the bare `/pypi/` — a dedicated route because the `*splat` wildcard below doesn't match an empty remainder.

Respuestas

  • 200
PUT/pypitwine uploads POST to the bare `/pypi/` — a dedicated route because the `*splat` wildcard below doesn't match an empty remainder.

Respuestas

  • 200
PATCH/pypitwine uploads POST to the bare `/pypi/` — a dedicated route because the `*splat` wildcard below doesn't match an empty remainder.

Respuestas

  • 200
DELETE/pypitwine uploads POST to the bare `/pypi/` — a dedicated route because the `*splat` wildcard below doesn't match an empty remainder.

Respuestas

  • 200
GET/pypi/{splat}

Respuestas

  • 200
POST/pypi/{splat}

Respuestas

  • 200
PUT/pypi/{splat}

Respuestas

  • 200
PATCH/pypi/{splat}

Respuestas

  • 200
DELETE/pypi/{splat}

Respuestas

  • 200

Registry

GET/v2`GET /v2/` — the OCI version probe (`docker login` hits this first). A dedicated route because the `*splat` wildcard below only matches a non-empty remainder, so `/v2` and `/v2/` would otherwise 404 and fail the handshake.

Respuestas

  • 200
POST/v2`GET /v2/` — the OCI version probe (`docker login` hits this first). A dedicated route because the `*splat` wildcard below only matches a non-empty remainder, so `/v2` and `/v2/` would otherwise 404 and fail the handshake.

Respuestas

  • 200
PUT/v2`GET /v2/` — the OCI version probe (`docker login` hits this first). A dedicated route because the `*splat` wildcard below only matches a non-empty remainder, so `/v2` and `/v2/` would otherwise 404 and fail the handshake.

Respuestas

  • 200
PATCH/v2`GET /v2/` — the OCI version probe (`docker login` hits this first). A dedicated route because the `*splat` wildcard below only matches a non-empty remainder, so `/v2` and `/v2/` would otherwise 404 and fail the handshake.

Respuestas

  • 200
DELETE/v2`GET /v2/` — the OCI version probe (`docker login` hits this first). A dedicated route because the `*splat` wildcard below only matches a non-empty remainder, so `/v2` and `/v2/` would otherwise 404 and fail the handshake.

Respuestas

  • 200
GET/v2/{splat}

Respuestas

  • 200
POST/v2/{splat}

Respuestas

  • 200
PUT/v2/{splat}

Respuestas

  • 200
PATCH/v2/{splat}

Respuestas

  • 200
DELETE/v2/{splat}

Respuestas

  • 200

RegistryToken

GET/v1/registry/tokens

Respuestas

  • 200
POST/v1/registry/tokensCreates a token and returns the raw value ONCE (store it now).

Cuerpo de la peticiónCreateRegistryTokenDto

NombreTipoDescripción
nameobligatoriostring
expiresInDaysnumberOptional expiry in days (omit = never expires).

Respuestas

  • 201
DELETE/v1/registry/tokens/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204

Repositories

GET/v1/repositories

Respuestas

  • 200
POST/v1/repositories

Cuerpo de la peticiónConnectRepositoryDto

NombreTipoDescripción
fullNameobligatoriostringGitHub/Bitbucket `owner/name` (e.g. `equantic/space-demo`), Azure DevOps `org/project/repo` (e.g. `equantic/platform/api`) or GitLab `group/subgroup/.../project` (deep subgroups) — 2–10 segments; the `RepoFullName` VO revalidates (ADR-025 P1a/G1/B1). Segments may contain spaces INSIDE (Azure project names, e.g. `equantic/My Project/api`) but never at the edges — mirrors the VO's segment rule.
provider"github" | "azure_devops" | "gitlab" | "bitbucket"SCM provider — defaults to `github` for back-compat (ADR-025 P1b).

Respuestas

  • 201
GET/v1/repositories/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
DELETE/v1/repositories/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
PATCH/v1/repositories/{id}/eqs-cli

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetRepositoryEqsCliDto

NombreTipoDescripción
enabledobligatorioboolean

Respuestas

  • 204
PATCH/v1/repositories/{id}/pipelinesMaster switch for this repo's CI (pauses every pipeline in it).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetRepositoryPipelinesDto

NombreTipoDescripción
enabledobligatorioboolean

Respuestas

  • 204
GET/v1/repositories/{id}/preview-config

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PUT/v1/repositories/{id}/preview-config

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetRepositoryPreviewConfigDto

NombreTipoDescripción
autoCreateobligatorioboolean"Auto-preview em PRs" — create a preview env automatically on PRs.
spaceIdobligatoriostring (uuid)Target Space the preview environments deploy under.
baseEnvironmentIdstring (uuid)Optional base environment to clone env vars from.

Respuestas

  • 200
PATCH/v1/repositories/pipelinesPauses or resumes many repositories' CI at once, all of them or none: one id the workspace does not have refuses the request with a 404 naming it.

Cuerpo de la peticiónSetRepositoriesPipelinesDto

NombreTipoDescripción
repositoryIdsobligatoriostring (uuid)[]The repositories to pause or resume, all of them or none.
enabledobligatorioboolean

Respuestas

  • 204

RepositoryEnvironments

GET/v1/repositories/{repositoryId}/environments

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/repositories/{repositoryId}/environments/{name}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
nameobligatoriopathstring

Cuerpo de la peticiónSetEnvironmentDto

NombreTipoDescripción
requiresApprovalobligatoriobooleanWhether a job targeting this environment must be manually approved first.

Respuestas

  • 204
DELETE/v1/repositories/{repositoryId}/environments/{name}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
nameobligatoriopathstring

Respuestas

  • 204

RepositorySecrets

GET/v1/repositories/{repositoryId}/secrets

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/repositories/{repositoryId}/secrets/{name}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
nameobligatoriopathstring

Cuerpo de la peticiónSetSecretDto

NombreTipoDescripción
valueobligatoriostring

Respuestas

  • 204
DELETE/v1/repositories/{repositoryId}/secrets/{name}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
nameobligatoriopathstring

Respuestas

  • 204
GET/v1/repositories/{repositoryId}/secrets/github-namesNames defined on GitHub vs. set here, to hint what's missing.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200

RepositoryVariables

GET/v1/repositories/{repositoryId}/variables

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/repositories/{repositoryId}/variables/{name}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
nameobligatoriopathstring

Cuerpo de la peticiónSetVariableDto

NombreTipoDescripción
valueobligatoriostring

Respuestas

  • 204
DELETE/v1/repositories/{repositoryId}/variables/{name}

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
nameobligatoriopathstring

Respuestas

  • 204

Rollout

POST/v1/admin/system/rollout

Cuerpo de la peticiónRolloutPlanDto

NombreTipoDescripción
namespaceobligatoriostring
jobRolloutJobDto
ensurePullSecretstring
stepsobligatorioRolloutStepDto[]

Respuestas

  • 201
GET/v1/admin/system/rollout/status

Respuestas

  • 200
GET/v1/admin/system/rollout/stream

Respuestas

  • 200

Rubygems

GET/rubygems/{splat}

Respuestas

  • 200
POST/rubygems/{splat}

Respuestas

  • 200
PUT/rubygems/{splat}

Respuestas

  • 200
PATCH/rubygems/{splat}

Respuestas

  • 200
DELETE/rubygems/{splat}

Respuestas

  • 200

RunDeployments

GET/v1/runs/{runId}/deploymentsEverywhere this run's own images are (or were) deployed.

Parámetros

NombreUbicaciónTipoDescripción
runIdobligatoriopathstring

Respuestas

  • 200

RunnerHosts

GET/v1/runner-hostsEvery registered machine, including the ones that are not working.

Respuestas

  • 200
POST/v1/runner-hostsRegisters a machine, or updates one already registered under that name. Leave `privateKey` out — that is the intended path: the platform mints an ed25519 pair, keeps the private half encrypted, and returns the public one for the operator to install. Supplying a key is for someone who already has a dedicated CI key.

Cuerpo de la peticiónRegisterRunnerHostDto

NombreTipoDescripción
nameobligatoriostringUnique, and the handle the job log names — `Running on 'mac-mini-1'`.
osobligatorio"linux" | "windows" | "macos"
addressobligatoriostringHostname or IP the platform opens ssh to.
userobligatoriostringThe account CI runs as. Unprivileged, please: a job is untrusted code.
portnumber
arch"amd64" | "arm64"
labelsstring[]Extra `runs-on` labels beyond the implicit OS ones (e.g. `xcode-16`).
maxConcurrencynumberJobs this machine takes at once.
privateKeystringAn existing OpenSSH private key, when the operator insists on supplying one. Encrypted before it reaches the repository and never returned.

Respuestas

  • 201
DELETE/v1/runner-hosts/{id}Forgets the machine. Its authorized_keys is not touched.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/runner-hosts/{id}/checkOpens an ssh session and asks the machine what it is.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PUT/v1/runner-hosts/{id}/idle-stopSwitches a machine this platform runs on or off (ADR-036). Only a machine whose power it owns: everything else belongs to whoever runs it.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónRunnerHostIdleStopDto

NombreTipoDescripción
minutesobligatorionumber

Respuestas

  • 200
POST/v1/runner-hosts/{id}/power

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónRunnerHostPowerDto

NombreTipoDescripción
actionobligatorio"on" | "off"

Respuestas

  • 201
PUT/v1/runner-hosts/{id}/statusonline | draining | offline.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónRunnerHostStatusDto

NombreTipoDescripción
statusobligatorio"online" | "draining" | "offline"`draining` before a reboot, `offline` to retire, `online` to take work.

Respuestas

  • 200

Runners

GET/v1/runners/capacity-policyThe CI capacity policy and what it currently buys. Super-admin: this decides how much of the machine the runner may take, which is an install-level decision rather than a workspace one.

Respuestas

  • 200
PUT/v1/runners/capacity-policySaves the policy. Takes effect on the next budget refresh (≤30 s).

Cuerpo de la peticiónCiPolicyDto

NombreTipoDescripción
targetCpuPerJobnumberCores a job is sized around; sets how MANY jobs a node offers.
minJobCpunumberFloor below which a slot is not worth offering.
minJobMemoryGinumber
platformReserveRationumberShare of each node kept for the platform itself.
minAdmissibleMemoryGinumberBelow this share, a node offers no slots and jobs wait. 0 = off.
maxConcurrentJobsnumberHard cap on concurrent jobs. 0 = no cap.
pinnedJobCpustringFixed per-job CPU; applies on its own, without the memory pin.
pinnedJobMemorystringFixed per-job memory, with its unit; applies on its own.
growJobMemorybooleanWhether a running job's memory may be raised in place as it approaches its ceiling (ADR-035). Null clears it back to the default, which is on.
maxJobMemoryGinumberNever grow one job past this. 0 = only the node's free room bounds it.
queuedCeilingMinutesnumberHow long a run may sit queued before the watchdog gives up on it, in minutes. 0 = never. A week is the ceiling on the ceiling: past that the commit it was triggered for is ancient, and a run nobody has missed in a week is not one a longer wait would have saved.
runningCeilingMinutesnumberHow long a run may be in progress. 0 = no ceiling.
jobCeilingMinutesnumberHow long ONE job may run when its own executor stopped counting, for a job that declares no `timeout-minutes` of its own. 0 = no ceiling.
minJobDiskGinumberThe disk a job slot is counted at, workspace and Docker together (ADR-038). GitHub documents 14 GB for its runner; under 1 a job cannot hold a checkout.
pinnedJobDiskstringFixed per-job disk, with its unit; applies on its own.

Respuestas

  • 200
POST/v1/runners/capacity-policy/previewWhat a candidate policy WOULD yield on today's cluster, without saving it. The editor needs this because the knobs are not independently meaningful: a 25% reserve and a 4-core target together might mean "no jobs at all", and finding that out by saving and waiting for a run to queue is a cruel way to learn it. Same derivation as the live budget, same node facts, different knobs.

Cuerpo de la peticiónCiPolicyDto

NombreTipoDescripción
targetCpuPerJobnumberCores a job is sized around; sets how MANY jobs a node offers.
minJobCpunumberFloor below which a slot is not worth offering.
minJobMemoryGinumber
platformReserveRationumberShare of each node kept for the platform itself.
minAdmissibleMemoryGinumberBelow this share, a node offers no slots and jobs wait. 0 = off.
maxConcurrentJobsnumberHard cap on concurrent jobs. 0 = no cap.
pinnedJobCpustringFixed per-job CPU; applies on its own, without the memory pin.
pinnedJobMemorystringFixed per-job memory, with its unit; applies on its own.
growJobMemorybooleanWhether a running job's memory may be raised in place as it approaches its ceiling (ADR-035). Null clears it back to the default, which is on.
maxJobMemoryGinumberNever grow one job past this. 0 = only the node's free room bounds it.
queuedCeilingMinutesnumberHow long a run may sit queued before the watchdog gives up on it, in minutes. 0 = never. A week is the ceiling on the ceiling: past that the commit it was triggered for is ancient, and a run nobody has missed in a week is not one a longer wait would have saved.
runningCeilingMinutesnumberHow long a run may be in progress. 0 = no ceiling.
jobCeilingMinutesnumberHow long ONE job may run when its own executor stopped counting, for a job that declares no `timeout-minutes` of its own. 0 = no ceiling.
minJobDiskGinumberThe disk a job slot is counted at, workspace and Docker together (ADR-038). GitHub documents 14 GB for its runner; under 1 a job cannot hold a checkout.
pinnedJobDiskstringFixed per-job disk, with its unit; applies on its own.

Respuestas

  • 201
GET/v1/runners/poolLive runner-pool occupancy + waiting count (any authenticated user).

Respuestas

  • 200

Runs

GET/v1/runsA page of the workspace's runs (ci-run-list), newest first unless `order` is `oldest`, narrowed to one repository, to the status a run shows and to one run number. Numbers count per repository, so `runNumber` alone lists each repository's run with that number, which is how the CLI tells a number one repository has from one several share.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdquerystring
limitquerynumber
offsetquerynumber
statusquery"queued" | "waiting" | "in_progress" | "success" | "failure" | "cancelled" | "timed_out" | "skipped" | "action_required" | "neutral"
orderquery"newest" | "oldest"
runNumberqueryinteger

Respuestas

  • 200
GET/v1/runs/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/runs/{id}/cancel

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/runs/{id}/jobs/{jobRunId}/logs

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
jobRunIdobligatoriopathstring
afterSeqquerynumber

Respuestas

  • 200
GET/v1/runs/{id}/jobs/{jobRunId}/logs/streamLive job logs over SSE: replays the whole persisted backlog after `afterSeq`, every page of it (the first read also enforces ownership → 404), then tails new lines as the runner produces them, completing when the job finishes. A finished run replays once and completes immediately. Subscribed before the replay so no line is lost in the gap; deduped by the monotonic `seq`.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
jobRunIdobligatoriopathstring
last-event-idobligatorioheaderstring
afterSeqquerynumber

Respuestas

  • 200
POST/v1/runs/{id}/jobs/{jobRunId}/review

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
jobRunIdobligatoriopathstring

Cuerpo de la peticiónReviewDeploymentDto

NombreTipoDescripción
decisionobligatorio"approve" | "reject"

Respuestas

  • 200
POST/v1/runs/{id}/rerun

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónRerunRunDto

NombreTipoDescripción
modeobligatorio"all" | "failed"

Respuestas

  • 200
POST/v1/runs/dispatch

Cuerpo de la peticiónDispatchWorkflowDto

NombreTipoDescripción
repositoryIdobligatoriostring (uuid)
workflowPathobligatoriostringPath of the workflow file inside the repo.
refstringBranch, tag or sha to run on; defaults to the repository default branch.
inputsobjectworkflow_dispatch inputs (string values, GitHub semantics).

Respuestas

  • 201

ServiceConsole

POST/v1/services/{id}/console/token

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
podquerystring

Respuestas

  • 201

ServiceData

POST/v1/services/{serviceId}/data/ddlChange structure. A permission of its own — dropping a table is not editing a row.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Cuerpo de la peticiónRunStatementDto

NombreTipoDescripción
statementobligatoriostringThe statement, in the engine's own language — SQL for a relational service, a command for Redis. Never parsed by the platform.
paramsobject[]Values bound by the driver as $1…, never spliced into the statement. They are NOT written to the audit log.
limitnumberRows to return before truncating (default 100, max 10000).
timeoutMsnumberStatement timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200
POST/v1/services/{serviceId}/data/execWrite rows.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Cuerpo de la peticiónRunStatementDto

NombreTipoDescripción
statementobligatoriostringThe statement, in the engine's own language — SQL for a relational service, a command for Redis. Never parsed by the platform.
paramsobject[]Values bound by the driver as $1…, never spliced into the statement. They are NOT written to the audit log.
limitnumberRows to return before truncating (default 100, max 10000).
timeoutMsnumberStatement timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200
POST/v1/services/{serviceId}/data/queryRead. Runs in a read-only transaction where the engine supports one.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Cuerpo de la peticiónRunStatementDto

NombreTipoDescripción
statementobligatoriostringThe statement, in the engine's own language — SQL for a relational service, a command for Redis. Never parsed by the platform.
paramsobject[]Values bound by the driver as $1…, never spliced into the statement. They are NOT written to the audit log.
limitnumberRows to return before truncating (default 100, max 10000).
timeoutMsnumberStatement timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200
GET/v1/services/{serviceId}/data/tablesThe reader's tables (relational engines). A read, so `data.read`.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 200
GET/v1/services/{serviceId}/data/tables/{table}One table's columns.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
tableobligatoriopathstring

Respuestas

  • 200

ServiceDomains

GET/v1/services/{serviceId}/domains

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/services/{serviceId}/domains

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Cuerpo de la peticiónAddDomainDto

NombreTipoDescripción
hostobligatoriostringThe custom domain to attach, e.g. `app.mycompany.com`.

Respuestas

  • 201
DELETE/v1/services/{serviceId}/domains/{domainId}

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
domainIdobligatoriopathstring

Respuestas

  • 204
POST/v1/services/{serviceId}/domains/{domainId}/verifyRe-checks the DNS-TXT challenge; `{ verified }` reflects the new state.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
domainIdobligatoriopathstring

Respuestas

  • 201
PUT/v1/services/{serviceId}/domains/{domainId}/wwwTurns the `www.` alias of one domain on or off — idempotent, so it is also how the mode is changed. On a domain, not on the service: a service can hold several custom domains and each decides for itself.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
domainIdobligatoriopathstring

Cuerpo de la peticiónSetWwwAliasDto

NombreTipoDescripción
enabledobligatorioboolean
mode"serve" | "redirect"

Respuestas

  • 200
PUT/v1/services/{serviceId}/domains/addressChooses the name of the service's address under the platform's domain (ADR-040), `<name>.<deploy domain>`. The generated address keeps answering and redirects to it. Answers the service's domains. Declared before the `:domainId` routes: Express matches in order, and `address` would otherwise be read as a domain's id.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Cuerpo de la peticiónChooseAddressDto

NombreTipoDescripción
nameobligatoriostringThe name of the service's address under the platform's domain, as in `cura-accounts` for `cura-accounts.apps.equantic.space`. Its rules (ADR-040) are checked by the service, which answers with the one it breaks.

Respuestas

  • 200
DELETE/v1/services/{serviceId}/domains/addressClears the chosen name: the generated address is the service's again.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 204

ServiceEnvVars

GET/v1/services/{serviceId}/env

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/services/{serviceId}/env

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Cuerpo de la peticiónSetEnvVarDto

NombreTipoDescripción
keyobligatoriostring
valueobligatoriostring
secretbooleanEncrypt at rest + space via a k8s Secret (default false).

Respuestas

  • 204
DELETE/v1/services/{serviceId}/env/{key}

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
keyobligatoriopathstring

Respuestas

  • 204
POST/v1/services/{serviceId}/env/applyRe-renders the manifest + env Secret with the current variables. Async.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 202
GET/v1/services/{serviceId}/env/pendingWhether variables are waiting for a rollout. Server-side state on purpose: the reader can leave the tab, reload, or come back tomorrow and the pending apply is still there — and it clears itself when ANY rollout picks the variables up, not only one started from this screen.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 200

ServiceExec

POST/v1/services/{id}/exec

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónExecServiceDto

NombreTipoDescripción
commandobligatoriostring[]The command as argv. Never parsed or split by the platform — element 0 is the program, the rest are its arguments. For shell semantics, ask for a shell explicitly.
instancestringA specific instance (pod) to run in. Defaults to the freshest Running one. An instance that is not this service's is refused, never redirected.
timeoutMsnumberKilled after this many milliseconds (default 60000, max 300000). A timeout answers with exit code 124.
stdinstringWritten to the command's stdin and closed. This is how a script or a SQL file is piped in — it is NOT written to any log, unlike the command itself.

Respuestas

  • 201

ServiceMetrics

GET/v1/services/{serviceId}/metricsLive CPU/mem usage for the service's pods (read-only; safe to poll).

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 200
GET/v1/services/{serviceId}/metrics/historyCPU/mem time series for the service (read-only). `hours` 1–168, default 24.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
hoursquerystring

Respuestas

  • 200

ServiceMq

GET/v1/services/{serviceId}/mq/queuesWhat is on the broker. Streams on NATS; refused on AMQP, which cannot.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/services/{serviceId}/mq/queues/{target}/consumeTake messages off. They do not come back.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
targetobligatoriopathstring

Cuerpo de la peticiónBrokerOperationDto

NombreTipoDescripción
payloadstringThe message body, for publish. Sent as bytes and never written to the audit log.
limitnumberMessages to read before truncating (default 100, max 10000).
timeoutMsnumberOperation timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200
POST/v1/services/{serviceId}/mq/queues/{target}/peekLook without taking — as far as the broker allows; the result says.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
targetobligatoriopathstring

Cuerpo de la peticiónBrokerOperationDto

NombreTipoDescripción
payloadstringThe message body, for publish. Sent as bytes and never written to the audit log.
limitnumberMessages to read before truncating (default 100, max 10000).
timeoutMsnumberOperation timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200
POST/v1/services/{serviceId}/mq/queues/{target}/publishPut one on.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
targetobligatoriopathstring

Cuerpo de la peticiónBrokerOperationDto

NombreTipoDescripción
payloadstringThe message body, for publish. Sent as bytes and never written to the audit log.
limitnumberMessages to read before truncating (default 100, max 10000).
timeoutMsnumberOperation timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200
POST/v1/services/{serviceId}/mq/queues/{target}/purgeDiscard everything on it. `data.ddl`, not `data.write`. Not a schema change, so on the word alone it does not belong there. But `data.ddl` exists in this ADR because "editing a row and dropping a table are not the same risk", and emptying a production queue is the second kind.

Parámetros

NombreUbicaciónTipoDescripción
serviceIdobligatoriopathstring
targetobligatoriopathstring

Cuerpo de la peticiónBrokerOperationDto

NombreTipoDescripción
payloadstringThe message body, for publish. Sent as bytes and never written to the audit log.
limitnumberMessages to read before truncating (default 100, max 10000).
timeoutMsnumberOperation timeout in milliseconds (default 15000, max 120000).

Respuestas

  • 200

ServiceRuntimeLogs

GET/v1/services/{id}/instancesThe service's pods — the instance picker for the console + runtime logs.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/services/{id}/logs/runtimeLive runtime logs (`?instance=all` or a pod name) as Server-Sent Events.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring
instancequeryobject

Respuestas

  • 200

Services

GET/v1/services/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PATCH/v1/services/{id}Updates the service's runtime config, then re-rolls it.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateServiceDto

NombreTipoDescripción
namestring
imagestringNew image ref (image-source services only).
branchstring
dockerfilePathstring
portnumber
internalboolean
publicAllowedCidrsstring[]CIDRs allowed to reach the public TCP port; empty = any source (ADR-013 F2). Validated here rather than trusted: a typo'd CIDR would be rejected by the cluster mid-rollout, and the safest place to catch it is before any of this reaches the engine.
minInstancesnumber0 = scale-to-zero.
maxInstancesnumber
cpuRequeststring
memRequeststring
cpuLimitstring
memLimitstring
healthPathstringReadiness path; blank clears it, back to the plain TCP probe.
argsstring[]Container args (replaces the image's CMD). An empty array clears them.

Respuestas

  • 200
DELETE/v1/services/{id}Deletes the service + all its vcluster resources (irreversible).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/services/{id}/connectionConnection details for a marketplace service (host/port/credentials), for the Connect dialog. Gated on `env.read` rather than `service.read`: the response carries the service's real password, so it is exactly as sensitive as revealing an env secret.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/services/{id}/deploymentsThe service's deploy history (newest first).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
GET/v1/services/{id}/provenanceWhere what this service is running came from: the version, the run that pushed it and the repository behind it (ADR-033).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/services/{id}/redeployRe-rolls the service (rebuilds repo sources). Accepted; runs async.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 202
POST/v1/services/{id}/restartRestarts the service's pods in place (no rebuild). Accepted; runs async.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 202
POST/v1/services/{id}/rollbackRolls back to a prior deployment's image (redeploy, no rebuild).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónRollbackServiceDto

NombreTipoDescripción
deploymentIdobligatoriostringThe prior deployment to roll back to (its image is redeployed).

Respuestas

  • 202
POST/v1/services/{id}/startStarts a stopped service (scale back to its floor).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/services/{id}/stopStops the service (scale to 0, KEDA paused).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204

SpaceEnvVars

GET/v1/spaces/{spaceId}/env

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Respuestas

  • 200
PUT/v1/spaces/{spaceId}/env

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónSetEnvVarDto

NombreTipoDescripción
keyobligatoriostring
valueobligatoriostring
secretbooleanEncrypt at rest + space via a k8s Secret (default false).

Respuestas

  • 204
DELETE/v1/spaces/{spaceId}/env/{key}

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring
keyobligatoriopathstring

Respuestas

  • 204

Spaces

GET/v1/spaces

Respuestas

  • 200
POST/v1/spaces

Cuerpo de la peticiónCreateSpaceDto

NombreTipoDescripción
nameobligatoriostring
descriptionstring
colorstring

Respuestas

  • 201
GET/v1/spaces/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
PATCH/v1/spaces/{id}Renames the space (display name only; the slug stays stable).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateSpaceDto

NombreTipoDescripción
nameobligatoriostring

Respuestas

  • 200
DELETE/v1/spaces/{id}Deletes the space + all its services' vcluster resources (irreversible).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/spaces/{id}/moveMoves the space in the workspace's list, the order every member sees: first when `afterSpaceId` is null, otherwise right after that space.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónMoveSpaceDto

NombreTipoDescripción
afterSpaceIdstringPlace the space directly after this one; omit or null to put it first. Both must belong to the active workspace.

Respuestas

  • 200

SpaceServices

GET/v1/spaces/{id}/services

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 200
POST/v1/spaces/{id}/services

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónCreateServiceDto

NombreTipoDescripción
nameobligatoriostring
sourceobligatorio"image" | "repo" | "dockerfile" | "compose"
environmentIdstring (uuid)Target environment; defaults to the space's default (production).
imagestringPrebuilt image ref (source = image).
repostringRepo "owner/name" (source = repo/dockerfile/compose).
branchstring
dockerfilePathstring
portnumber
minInstancesnumber0 = scale-to-zero.
maxInstancesnumber
cpuRequeststringPer-instance resource overrides. Omitted/blank leaves the service on the engine default, which is what most services want — the wizard only sends these when the operator opens Avançado and types a value.
memRequeststring
cpuLimitstring
memLimitstring
healthPathstringReadiness path. Set → the probe becomes an HTTP GET against it; omitted → the port just has to accept a TCP connection, which is all a portless or non-HTTP workload can promise.
argsstring[]Container args (replaces the image's CMD). A catalog service inherits the entry's args; passing them here overrides that for this one service.
internalbooleanInternal (no public domain) — ClusterIP only. Databases are internal.
statefulbooleanStateful workload (database/storage) → StatefulSet + PVC.
storageGinumberPersistent volume size in GiB (required when stateful).
dataPathstringContainer path the volume mounts at (required when stateful).
catalogServiceIdstring (uuid)Create from a catalog entry (one-click) — resolves image/port/stateful/etc.
versionstringCatalog image version (defaults to the catalog's newest).
fieldValuesobjectCatalog field values (key → value) → env vars + the PVC size.

Respuestas

  • 201

Sprints

PUT/v1/items/{id}/sprint

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetItemSprintDto

NombreTipoDescripción
sprintIdstringThe target sprint; omit / null to remove the item from its sprint.

Respuestas

  • 200
GET/v1/spaces/{spaceId}/sprints

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/spaces/{spaceId}/sprints

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónCreateSprintDto

NombreTipoDescripción
nameobligatoriostring
goalstring
startDatestring
endDatestring
capacitynumber

Respuestas

  • 201
PATCH/v1/sprints/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateSprintDto

NombreTipoDescripción
namestring
goalstringnull clears the goal.
startDatestring
endDatestring
capacitynumber

Respuestas

  • 200
DELETE/v1/sprints/{id}

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
POST/v1/sprints/{id}/transition

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónTransitionSprintDto

NombreTipoDescripción
actionobligatorio"start" | "complete"'start' (PLANNED → ACTIVE) or 'complete' (→ COMPLETED).

Respuestas

  • 201

System

POST/v1/admin/system/licenseReplaces the platform licence with a new serial — the badge's action (ADR-018 amendment). Verified before it is stored, so a wrong serial cannot cost a working licence. Accepts a SERIAL only: a public key supplied here would let anyone verify a licence they signed themselves.

Cuerpo de la peticiónApplyLicenseDto

NombreTipoDescripción
licenseKeyobligatoriostring

Respuestas

  • 201
GET/v1/admin/system/update

Respuestas

  • 200
POST/v1/admin/system/update/applyTriggers an update to the given tag (or the latest). Idempotent while running.

Cuerpo de la peticiónApplyUpdateDto

NombreTipoDescripción
versionstringTarget release tag (e.g. "v2026.06.19-142530"). Omit to update to the latest GitHub release. Constrained to a safe tag shape — it is interpolated into a release download URL and a Job manifest.

Respuestas

  • 201
GET/v1/admin/system/update/status

Respuestas

  • 200
GET/v1/admin/system/update/streamLive progress of the running update (Server-Sent Events).

Respuestas

  • 200
GET/v1/admin/system/version

Respuestas

  • 200

Tags

PUT/v1/items/{id}/tags

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónSetItemTagsDto

NombreTipoDescripción
tagIdsobligatoriostring[]The complete desired tag set (replaces the current tags).

Respuestas

  • 200
GET/v1/spaces/{spaceId}/tags

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Respuestas

  • 200
POST/v1/spaces/{spaceId}/tags

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónCreateTagDto

NombreTipoDescripción
labelobligatoriostring
colorobligatoriostring

Respuestas

  • 201

Templates

GET/v1/space-templates

Respuestas

  • 200
POST/v1/spaces/{spaceId}/apply-templateMaterializes the template's whole structure into the Space.

Parámetros

NombreUbicaciónTipoDescripción
spaceIdobligatoriopathstring

Cuerpo de la peticiónApplyTemplateDto

NombreTipoDescripción
templateKeyobligatoriostringThe template key from the catalog (e.g. "scrum", "kanban", "bug-tracker").

Respuestas

  • 204

Webhooks

POST/v1/webhooks/{provider}

Parámetros

NombreUbicaciónTipoDescripción
providerobligatoriopathstring

Respuestas

  • 202

Wiki

GET/v1/repositories/{repositoryId}/wikiWiki availability + pages (markdown), read from the `.wiki` git repo.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200

Workflows

GET/v1/repositories/{repositoryId}/workflows

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200
PATCH/v1/repositories/{repositoryId}/workflows/{workflowFileId}/enabledEnables/disables ONE pipeline. Applies to the next event; runs already in flight finish (see SetWorkflowEnabledHandler).

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
workflowFileIdobligatoriopathstring

Cuerpo de la peticiónSetWorkflowEnabledDto

NombreTipoDescripción
enabledobligatorioboolean

Respuestas

  • 204
GET/v1/repositories/{repositoryId}/workflows/action-metadataAction metadata (inputs) for the step assistant — any `owner/repo@ref`.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
usesobligatorioquerystring

Respuestas

  • 200
GET/v1/repositories/{repositoryId}/workflows/contentRaw YAML of a workflow file (fetched from the provider on demand).

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring
pathobligatorioquerystring

Respuestas

  • 200
PUT/v1/repositories/{repositoryId}/workflows/contentCommits edited YAML back to a workflow file (needs Contents: write).

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Cuerpo de la peticiónSaveWorkflowContentDto

NombreTipoDescripción
pathobligatoriostringWorkflow path, e.g. `.github/workflows/ci.yml`.
contentobligatoriostring
messagestringCommit message (defaults to "Update <path> via eQuantic Space").
branchstringTarget branch (defaults to the repo's default branch).

Respuestas

  • 200
POST/v1/repositories/{repositoryId}/workflows/syncRe-reads `.github/workflows` from the provider and refreshes the interpreted rows. Manual counterpart to the automatic sync on connect/push — lets users pick up workflows added after the repo was connected. Provider errors are surfaced (not swallowed) so an empty refresh is explainable.

Parámetros

NombreUbicaciónTipoDescripción
repositoryIdobligatoriopathstring

Respuestas

  • 200

Workspace

GET/v1/workspacesThe user's workspaces, with the active one flagged.

Respuestas

  • 200
POST/v1/workspacesCreate a workspace (under the user's tenant) and make it active.

Cuerpo de la peticiónCreateWorkspaceDto

NombreTipoDescripción
nameobligatoriostring
slugstringDesired slug; derived from the name when omitted.
typestringOnboarding hints persisted in `workspace.metadata`.
sizestring
featuresstring[]
invitesstringComma/space/newline-separated emails to invite (pending invitations).
inviteRolestring

Respuestas

  • 201
PATCH/v1/workspaces/{id}Update a workspace's name and/or enabled features (owner/admin).

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Cuerpo de la peticiónUpdateWorkspaceDto

NombreTipoDescripción
namestring
featuresstring[]

Respuestas

  • 200
POST/v1/workspaces/{id}/activateSwitch the active workspace for the current session.

Parámetros

NombreUbicaciónTipoDescripción
idobligatoriopathstring

Respuestas

  • 204
GET/v1/workspaces/check-slugSlug-availability check for the wizard.

Parámetros

NombreUbicaciónTipoDescripción
slugqueryobject

Respuestas

  • 200