INTEGRACIÓN
Modelos de datos
La forma exacta de cada objeto que devuelve la API — campos, tipos y notas.
Los nombres de campo son los mismos que las columnas reales de SQLite (app/db.py) — lo que ves aquí es lo que te devuelve la API, sin una capa de serialización intermedia que pueda renombrar nada. Todos los timestamps son ISO 8601 en hora local del servidor, sin offset (ej. 2026-07-10T14:32:05), nunca UTC ni con zona horaria explícita.
Categoria (menú)
| Campo | Tipo | Notas |
id | integer | |
nombre | string | Único por usuario. |
color | string | null | Código de color hex, opcional. |
creada_en | string (ISO 8601) | |
papelera_en | string (ISO 8601) | null | No null si está en la papelera — la API nunca devuelve categorías en la papelera desde /categorias, solo desde /papelera. |
orden | integer | null | Posición manual (↑/↓ en el panel de inicio); null = orden alfabético por defecto. |
Nota
| Campo | Tipo | Notas |
id | integer | |
texto | string | |
categoria_id | integer | null | |
tarea_id | integer | null | Si la nota quedó asociada a una tarea con duración concreta — la API REST actual no tiene forma de fijar este campo al crear (siempre null vía POST /notas), pero si existe se devuelve igualmente. |
creada_en | string (ISO 8601) | Con segundos — es el timestamp que ordena el registro cronológico. |
papelera_en | string (ISO 8601) | null | |
Tarea (con duración)
No confundir con TareaOutlook (siguiente sección) — son dos modelos independientes, sin relación entre sí, pensados para cosas distintas: esta es la tarea con cronómetro del registro de actividad; la otra es una lista de tareas al estilo Microsoft Outlook To-Do.
| Campo | Tipo | Notas |
id | integer | |
nombre | string | |
categoria_id | integer | Obligatorio — a diferencia de Nota, una tarea con duración siempre pertenece a un menú. |
tipo | "duracion" | "instantanea" | Fijo desde la creación, no se puede cambiar. |
estado | "pendiente" | "en_curso" | "pausada" | "finalizada" | Una instantanea nace directamente en finalizada. |
inicio_en | string (ISO 8601) | null | |
fin_en | string (ISO 8601) | null | null hasta que se finaliza. |
duracion_segundos | integer | null | Calculado al finalizar, descontando el tiempo en pausa — null mientras no está finalizada, y siempre null en tipo instantanea (por diseño, no por estar pendiente). |
papelera_en | string (ISO 8601) | null | |
TareaOutlook
Nombres de campo calcados del modelo de objetos de Outlook/iCalendar (VTODO, RFC 5545) a propósito, para que el mapeo de import/export .ics/.csv sea 1:1 sin traducir nombres.
| Campo | Tipo | Notas |
id | integer | |
asunto | string | Equivalente a "Subject". |
cuerpo | string | null | |
estado | "no_iniciada" | "en_progreso" | "completada" | "esperando" | "aplazada" | Por defecto no_iniciada. |
porcentaje_completado | integer | 0-100, por defecto 0. |
prioridad | "baja" | "normal" | "alta" | Por defecto normal. |
fecha_inicio | string (ISO 8601) | null | |
fecha_vencimiento | string (ISO 8601) | null | |
fecha_completada | string (ISO 8601) | null | Se rellena sola al completar. |
categoria_outlook | string | null | Texto libre — no es una Categoria/menú, es la categoría de color propia de Outlook. |
outlook_entry_id | string | null | EntryID de Outlook, para reconciliar en reimportaciones repetidas del mismo archivo. |
creada_en / actualizada_en | string (ISO 8601) | |
papelera_en | string (ISO 8601) | null | |
CuentaCorreo
| Campo | Tipo | Notas |
id | integer | |
nombre | string | Nombre visible de la cuenta, elegido por el usuario. |
protocolo | "imap" | "pop3" | |
host / puerto / usa_tls | string / integer / boolean | Conexión de recepción. |
usuario | string | Usuario de login del servidor de correo (no el id local). |
smtp_host / smtp_puerto / smtp_tls | string | null / integer | null / boolean | Solo si la cuenta tiene envío configurado. |
creada_en / ultima_sincronizacion | string (ISO 8601) | null | |
firma_html, firma_en_nuevos, firma_en_respuestas | string | null, boolean, boolean | |
⚠
La contraseña de la cuenta de correo nunca aparece en la respuesta de la API — no se guarda en SQLite en absoluto, vive en el almacén de credenciales del sistema operativo (keyring), bajo una clave interna por cuenta.
MensajeCorreo
| Campo | Tipo | Notas |
id | integer | Id local (caché) — no es el uid IMAP. |
cuenta_id | integer | |
carpeta | string | Por defecto INBOX. |
uid | string | Identificador IMAP/POP3 real del mensaje en el servidor. |
asunto, remitente, destinatarios, cc | string | null | |
fecha | string (ISO 8601) | null | Fecha del mensaje según su cabecera, no la de sincronización. |
cuerpo_texto / cuerpo_html | string | null | |
message_id | string | null | Cabecera Message-ID, para hilos (In-Reply-To/References) al responder. |
leido, destacado | boolean | |
categoria_id | integer | null | Categoría de color propia de Guilda Work — nunca se sincroniza con el servidor de correo. |
fecha_aviso, pospuesto_hasta | string (ISO 8601) | null | |
ℹ
El Cco (bcc) de un mensaje recibido nunca aparece aquí — por diseño del propio correo electrónico, nadie salvo el remitente original sabe quién iba en copia oculta; no es una limitación de Guilda Work, ningún cliente de correo puede mostrar ese dato en un mensaje recibido.