Skip to content
La API está en fase beta y puede cambiar sin previo aviso.

Endpoints de Proyectos

Todos los endpoints de proyectos están bajo /projects.

Crear Proyecto

POST /projects/

Autenticación: Requerida

Cuerpo de la solicitud:

json
{
  "name": "My App",
  "description": "My awesome application",
  "is_public": true
}
CampoTipoObligatorioDescripción
namestringNombre del proyecto
descriptionstringNoDescripción del proyecto
is_publicbooleanNoPúblico o privado (por defecto: false)

INFO

El slug siempre se genera automáticamente a partir del nombre del proyecto y no puede especificarse en el cuerpo de la solicitud.

Respuesta 201:

json
{
  "id": "uuid",
  "name": "My App",
  "slug": "my-app",
  "description": "My awesome application",
  "is_public": true,
  "owner_id": "user-uuid",
  "created_at": "2024-01-01T00:00:00.000Z"
}

Listar Proyectos

GET /projects/

Autenticación: Requerida

Devuelve todos los proyectos de los que el usuario es miembro.


Obtener Proyecto

GET /projects/:slug

Autenticación: Requerida


Actualizar Proyecto

PATCH /projects/:slug

Autenticación: Requerida (owner o admin)

Cuerpo de la solicitud (todos opcionales):

json
{
  "name": "Updated Name",
  "description": "Updated description",
  "is_public": false
}

Eliminar Proyecto

DELETE /projects/:slug

Autenticación: Requerida (solo owner)


Unirse a un Proyecto

Unirse a un proyecto público.

POST /projects/:slug/join

Autenticación: Requerida

INFO

Solo funciona para proyectos públicos. Para proyectos privados, usa invitaciones.


Abandonar Proyecto

DELETE /projects/:slug/leave

Autenticación: Requerida

WARNING

El owner del proyecto no puede abandonarlo. Transfiere la propiedad primero.


Listar Miembros

GET /projects/:slug/members

Autenticación: Requerida (miembro del proyecto)

Respuesta 200:

json
[
  {
    "id": "member-uuid",
    "user_id": "user-uuid",
    "role": "owner",
    "user": {
      "id": "user-uuid",
      "email": "owner@example.com",
      "display_name": "Project Owner"
    },
    "permissions": [],
    "created_at": "2024-01-01T00:00:00.000Z"
  }
]

Añadir Miembro

POST /projects/:slug/members

Autenticación: Requerida (owner o admin)

Cuerpo de la solicitud:

json
{
  "email": "user@example.com",
  "role": "member",
  "permissions": ["can_deploy"]
}
CampoTipoObligatorioDescripción
emailstringEmail del usuario a añadir
role"admin" | "member"NoRol (por defecto: member)
permissionsstring[]NoArray de claves de permisos

Actualizar Miembro

PATCH /projects/:slug/members/:memberId

Autenticación: Requerida (owner o admin)

Cuerpo de la solicitud:

json
{
  "role": "admin",
  "permissions": ["can_deploy", "can_edit"]
}

INFO

Los permisos usan claves de tipo string (p. ej., "can_deploy", "editor"), no UUIDs.


Eliminar Miembro

DELETE /projects/:slug/members/:memberId

Autenticación: Requerida (owner o admin)


Transferir Propiedad

POST /projects/:slug/transfer-ownership

Autenticación: Requerida (solo owner)

Cuerpo de la solicitud:

json
{
  "new_owner_id": "new-owner-uuid"
}

El owner actual se convierte en admin después de la transferencia.


Permisos

Listar Permisos

GET /projects/:slug/permissions

Crear Permiso

POST /projects/:slug/permissions

Cuerpo de la solicitud:

json
{
  "key": "can_deploy",
  "display_name": "Can Deploy",
  "description": "Allow deployment to production",
  "is_default": false
}
CampoTipoObligatorioDescripción
keystringIdentificador único del permiso
display_namestringNombre legible
descriptionstringNoDescripción del permiso
is_defaultbooleanNoSi se asigna a nuevos miembros por defecto (por defecto: false)

Actualizar Permiso

PATCH /projects/:slug/permissions/:permissionId

Eliminar Permiso

DELETE /projects/:slug/permissions/:permissionId

Clientes OAuth del Proyecto

Crear Cliente

POST /projects/:slug/clients

Cuerpo de la solicitud:

json
{
  "name": "My App OAuth Client",
  "redirect_uri": "https://myapp.com/callback"
}

Listar Clientes

GET /projects/:slug/clients

Invitaciones del Proyecto

Listar Invitaciones

GET /projects/:slug/invites

Crear Invitación

POST /projects/:slug/invites

Cuerpo de la solicitud:

json
{
  "email": "user@example.com",
  "role": "member",
  "redirect_url": "https://myapp.com/welcome"
}
CampoTipoObligatorioDescripción
emailstringEmail del usuario a invitar
role"admin" | "member"NoRol (por defecto: member)
redirect_urlstringNoURL de redirección después de aceptar

INFO

Las invitaciones expiran después de 7 días.

Cancelar Invitación

DELETE /projects/:slug/invites/:inviteId

HitKey Service License.