Saltar al contenido

Referencia · projects

Crear proyecto

POST/projects

Requiere el scope projects:write.

Idempotente por nombre: si ya existe un proyecto del usuario con ese name exacto, devuelve el existente (también con 201) y el resto de campos enviados se ignoran (no se actualiza nada). status es siempre active al crear.

Cuerpo de la petición

JSON, obligatorio. Modelo ProjectCreate.

namestringobligatorio

No puede ser vacío (tras trim). Clave de idempotencia por usuario.

Rango: al menos 1 carácter

descriptionstring
colorstring
iconstring
tipoProjectTipo

Valores: trabajoociopersonal

No admite otros campos: uno desconocido responde 422.

Respuestas

201

Proyecto creado (o el existente con el mismo nombre).

dataProjectobligatorio

Proyecto. Todos los campos están siempre presentes; los sin valor van como null. Timestamps en epoch milisegundos UTC.

Campos de Project
idstringobligatorio
namestringobligatorio
descriptionstring | nullobligatorio
colorstring | nullobligatorio
iconstring | nullobligatorio
tipoProjectTipo | nullobligatorio

Valores: trabajoociopersonal

statusProjectStatusobligatorio

Valores: activearchived

sharedbooleanobligatorio

Tiene al menos un miembro activo además del propietario/a.

rolestringobligatorio

Rol de la persona dueña de la key en el proyecto.

Valores: ownermember

createdAtnumberobligatorio
updatedAtnumberobligatorio

401

Key ausente, malformada, inexistente, revocada, expirada o API deshabilitada (invalid_api_key, indistinguibles a propósito).

Códigos: invalid_api_key

403

Scope insuficiente (insufficient_scope), recurso sin acceso (forbidden) o sincronización de calendario de una tarea que creó otra persona (calendar_creator_only).

Códigos: insufficient_scopeforbiddencalendar_creator_only

422

Entrada inválida (invalid_json, unknown_field, missing_field, invalid_field, invalid_query_param, empty_patch, body_too_large — cuerpos de más de 64 KB —, invalid_idempotency_key, validation_error, y al asignar assignee_not_member, task_not_shared, task_private).

Códigos: invalid_jsonunknown_fieldmissing_fieldinvalid_fieldinvalid_query_paramempty_patchbody_too_largeinvalid_idempotency_keyvalidation_errorassignee_not_membertask_not_sharedtask_private

429

Límite superado (rate_limited) — 60 req/min (ráfagas de 20) y 5.000 req/día por key. Reintentar tras Retry-After.

Códigos: rate_limited

Cabecera Retry-After: Segundos (enteros) a esperar antes de reintentar.

500

Error interno (internal_error). Cuerpo opaco a propósito; reintentar con backoff.

Códigos: internal_error

Documentación