Ir al contenido

Buscar en la documentación

Busca en la documentación de Skiffly

Referencia de la API GraphQL

Endpoint, encabezados de autenticación y todas las queries y mutations raíz de la API de Skiffly. El SDL completo está disponible por introspección.

POST https://api.skiffly.dev/graphql
Authorization: Bearer <token>            # token de cuenta o de espacio de trabajo
Project-Access-Token: <token>            # token de proyecto en lugar de Authorization

Abre la URL en un navegador para usar GraphiQL con el esquema en vivo, o ejecuta una query de introspección para descargar el SDL. Los conceptos, tokens y ejemplos están en la guía de la API pública; las tablas de abajo son la lista completa de campos raíz. Los argumentos son ID! donde Railway tiene String!; se aceptan ambas declaraciones de variables.

Queries#

Cuenta y espacio de trabajo#

CampoDevuelve
meUser con workspaces { id name role }
workspaces, workspace(workspaceId: ID!)[Workspace!]!, Workspace!
workspaceMembers(workspaceId), workspaceInvites(workspaceId)miembros e invitaciones pendientes
apiTokens(workspaceId, first, after), apiTokentokens de espacio de trabajo; el contexto del token actual
projectTokens(projectId, first, after), projectTokentokens de proyecto; el token de proyecto actual
auditLog(workspaceId, first, after)AuditLogPage!
notifications(first, after, unreadOnly), unreadNotificationCountnotificaciones dentro de la app
sshKeysclaves públicas de la cuenta
githubInstallations, githubApp, githubRepositories(installationId, search, first), githubBranches(installationId, repo)estado de la GitHub App, repositorios y ramas
nodes(workspaceId)nodos de cómputo visibles para el token

Proyectos, entornos, servicios#

CampoDevuelve
projects(workspaceId, first, after, orderBy, search, includeDeleted)QueryProjectsConnection!
project(id)Project! con las conexiones environments y services, prDeploys, summary
environments(projectId, first, after, isEphemeral), environment(id, projectId)entornos; isEphemeral filtra las vistas previas de PR
service(id)Service! (source, builder, port, runtimeClass, internalHost, instance(environmentId))
serviceInstance(serviceId, environmentId)configuración por entorno, domains, tcpProxies, latestDeployment
activity(projectId, first)actividad reciente del proyecto

Despliegues y logs#

CampoDevuelve
deployments(input: { projectId, environmentId, serviceId, status: { in, notIn } }, first, after)QueryDeploymentsConnection!
deployment(id)Deployment! (status, message, url, meta, canRedeploy, canRollback)
deploymentLogs(deploymentId, filter, limit = 500, startDate, endDate)[Log!]! con stream: build | runtime | system
environmentLogs(environmentId, filter, beforeDate, beforeLimit, afterDate, afterLimit, anchorDate, serviceId, stream)logs de todo el entorno
serviceMetrics(environmentId, range: H1 | H6 | H24 | D7, serviceId)series de CPU, memoria y tráfico saliente

Variables, dominios, volúmenes, proxies#

CampoDevuelve
variables(projectId, environmentId, serviceId, unrendered)mapa EnvironmentVariables!; sin serviceId = solo las compartidas
variableList(projectId, environmentId, serviceId)[Variable!]! con ids y alcance
domains(projectId, environmentId, serviceId)AllDomains! { serviceDomains customDomains }
customDomain(id, projectId), customDomainAvailable(domain), serviceDomainAvailable(domain), workspaceDomains(workspaceId)detalles y disponibilidad de dominios
volumes(environmentId, serviceId), volumeInstance(id)volúmenes
tcpProxies(serviceId, environmentId)[TCPProxy!]!

Facturación y plantillas#

CampoDevuelve
billingAccount(workspaceId)saldo, límites del plan, estado de pausa, recarga automática
usage(workspaceId, periodStart)UsageReport! por servicio y recurso
ledger(workspaceId, first, after), payments(workspaceId, first), payment(id), topupOptionshistorial y opciones de recarga
templates(category, search, featured, first, after), template(code), templateCategories, templateCountel catálogo

Mutations#

Proyectos y entornos#

CampoDevuelve
projectCreate(input: { workspaceId, name, description, githubInstallationId })Project!
projectUpdate(id, input: { name, description, prDeploys, githubInstallationId })Project!
projectFavoriteSet(projectId, favorite), projectDelete(id)Boolean!
environmentCreate(input: { projectId, name, sourceEnvironmentId })Environment!
environmentRename(id, input: { name }), environmentDelete(id)

Servicios#

CampoDevuelve
serviceCreate(input: { projectId, name, source: { repo | image }, branch, environmentId, variables, builder, dockerfilePath, buildCommand, port, runtimeClass, deploy })Service!
serviceUpdate(id, input: { name, icon, source, builder, dockerfilePath, buildCommand, port, runtimeClass })Service!
serviceInstanceUpdate(serviceId, environmentId, input: { numReplicas, cpuMillis, memoryBytes, healthcheckPath, healthcheckTimeout, startCommand, cronSchedule, sleepApplication, restartPolicyType, restartPolicyMaxRetries, branch, rootDirectory, builder, buildCommand, dockerfilePath, source })Boolean!
serviceDelete(id, environmentId)Boolean!

Despliegues#

CampoDevuelve
serviceInstanceDeployV2(serviceId, environmentId, commitSha, latestCommit)String! id del despliegue
serviceInstanceRedeploy(serviceId, environmentId), serviceRestart(serviceId, environmentId)Boolean!
deploymentRedeploy(id, usePreviousImageTag)Deployment!
deploymentRollback(id), deploymentRestart(id), deploymentCancel(id), deploymentRemove(id)Boolean!

Variables, dominios, volúmenes, proxies#

CampoDevuelve
variableUpsert(input: { projectId, environmentId, serviceId, name, value })Boolean!
variableCollectionUpsert(input: { projectId, environmentId, serviceId, variables, replace })Boolean!
variableDelete(input: { projectId, environmentId, serviceId, name })Boolean!
serviceDomainCreate(input: { serviceId, environmentId, targetPort }), serviceDomainDelete(id)ServiceDomain!, Boolean!
customDomainCreate(input: { projectId, serviceId, environmentId, domain, targetPort }), customDomainVerify(id), customDomainDelete(id)CustomDomain! con status { verified dnsRecords certificateStatus }
volumeCreate(input: { projectId, serviceId, environmentId, mountPath, sizeGb, name }), volumeDelete(volumeId), volumeInstanceUpdate(volumeId, environmentId, input)
tcpProxyCreate(input: { serviceId, environmentId, applicationPort }), tcpProxyDelete(id)TCPProxy!, Boolean!

Espacio de trabajo, tokens, facturación, plantillas#

CampoDevuelve
workspaceCreate(name), workspaceUpdate(id, input: { name, avatar, spendLimitCents }), workspaceDelete(id)
workspaceInvite(workspaceId, githubLogin, role), workspaceInviteRevoke(id), workspaceMemberRemove(workspaceId, userId), workspaceMemberSetRole(workspaceId, userId, role)
apiTokenCreate(input: { name, workspaceId, scopes, expiresAt })String! el token, mostrado una sola vez
apiTokenDelete(id), projectTokenCreate(input: { projectId, environmentId, name }), projectTokenDelete(id)
githubInstallationDelete(installationId), sshKeyAdd(input: { name, publicKey }), sshKeyDelete(id), userUpdate(input)
topupCreate(workspaceId, provider: paypal | nowpayments, amountCents)Payment! con checkoutUrl
paymentRefresh(id), billingAutoPauseSet(workspaceId, enabled), paypalAutoTopupSetup(workspaceId, amountCents), autoTopupSet(workspaceId, enabled, thresholdCents, amountCents), paypalVaultDelete(workspaceId)
templateDeployV2(input: { templateCode, projectId, environmentId, serviceName, variables, name })TemplateDeployPayload!
nodeCreate(name, region, workspaceId), nodeDelete(id)nodos dedicados

Enums#

  • DeploymentStatus: QUEUED BUILDING DEPLOYING SUCCESS FAILED CRASHED REMOVED SLEEPING (más los de Railway INITIALIZING NEEDS_APPROVAL REMOVING SKIPPED WAITING, reservados).
  • Builder: RAILPACK DOCKERFILE. RuntimeClass: gvisor kata. RestartPolicyType: ALWAYS NEVER ON_FAILURE.
  • Plan: FREE HOBBY PRO. WorkspaceRole: owner admin member. MetricRange: H1 H6 H24 D7.
  • PaymentProvider: paypal nowpayments. PaymentStatus: created pending confirming paid failed expired refunded. LedgerKind: topup usage subscription adjustment refund trial.

Campos obsoletos#

Los campos antiguos con forma de lista (projectList, environmentList, deploymentList, domainList, deploymentTrigger, domainCreate, …) siguen funcionando y están marcados como @deprecated en el esquema junto con su reemplazo.