{"info":{"version":"1.0.0","description":"La API pública de mywoork.\n\n**Autenticación.** Cabecera `Authorization: Bearer mw_...`. Los tokens se\ncrean en la aplicación, en Acceso API, y solo se ven una vez. Nunca en la\nURL: un token en el query string acaba escrito en los registros del\nservidor y en el historial del navegador, y la API lo rechaza con un 400.\n\n**Un token, una empresa.** El token guarda la empresa a la que pertenece y\nno puede leer ni escribir datos de otra, pase lo que pase.\n\n**Permisos.** Por recurso y operación (`contactos:read`, `tareas:write`…).\nEscribir implica leer. `GET /api/v1/me` dice cuáles tiene tu token.\n\n**Las escrituras no mienten.** Si el cuerpo trae un campo desconocido, no\neditable o mal formado, la petición entera se rechaza con un 422 que los\nenumera, y no se guarda nada — ni siquiera los campos correctos. Nunca\nrecibirás un 2xx por un cambio que no se aplicó.\n\n**PATCH y PUT son distintos.** PATCH toca solo los campos que envías; PUT\nreemplaza el recurso, así que los campos editables que no envíes quedan\nvacíos.\n\n**Reintentos.** Toda escritura acepta la cabecera `Idempotency-Key`. La\nmisma clave dentro de 24 horas devuelve la respuesta original sin\nduplicar nada.\n\n**Fechas.** ISO 8601. Las de sistema (`created_at`, `updated_at`) son UTC\ny llevan `Z`. Las fechas de trabajo (`scheduled_on`, `archived_at`,\n`visited_at`) se devuelven SIN zona: la columna no la tiene en la base de\ndatos, y ponérsela sería inventarse un dato.\n\n**Listados.** Paginación por cursor: `?limit=` (50 por\ndefecto, 200 como máximo) y `?cursor=`. La respuesta trae\n`items` y `next_cursor`. Un `limit` fuera de rango se rechaza en vez de\nrecortarse en silencio.\n\n**Errores.** RFC 7807 (`application/problem+json`), con un `detail` que\ndice qué falta exactamente.\n","title":"mywoork API"},"tags":[{"name":"me","description":"El primer sitio donde mirar: quién eres, de qué empresa y qué permisos tiene este token. No exige ningún ámbito — un token sin permisos para nada tiene que poder preguntar qué es lo que no puede hacer."},{"name":"contactos","description":"Los clientes, proveedores y personas de la empresa."},{"name":"tareas","description":"El trabajo del equipo. El estado y la fecha son POR PERSONA: una tarea compartida entre tres tiene tres estados."},{"name":"notas","description":"Notas del equipo, con el mismo modelo de visibilidad que las tareas."},{"name":"etiquetas","description":"Etiquetas de la empresa. Escribirlas es del propietario: un miembro no puede crear un token con `etiquetas:write`."},{"name":"equipo","description":"Las personas de la empresa. SOLO LECTURA: en mywoork no se crea un usuario, se le invita por correo desde la pantalla de Equipo."},{"name":"agregados","description":"Cuentas que la aplicación ya calcula, para no tener que traerse miles de filas y sumarlas fuera."}],"components":{"schemas":{"Problem":{"type":"object","description":"Un error, en formato RFC 7807.","properties":{"detail":{"type":"string","description":"Qué ha pasado exactamente y qué hacer."},"instance":{"type":"string","description":"La ruta pedida."},"rejected_fields":{"type":"array","description":"En los 422: cada campo rechazado con su motivo (`unknown`, `read_only`, `invalid_type`, `invalid_value`).","items":{"type":"object","properties":{"detail":{"type":"string"},"field":{"type":"string"},"reason":{"type":"string"}}}},"required_scope":{"type":"string","description":"En los 403 por permisos: el ámbito que hace falta."},"status":{"type":"integer","description":"El código HTTP."},"title":{"type":"string","description":"Resumen corto y estable."},"type":{"type":"string","description":"URI que identifica el tipo de error."}}},"contactos":{"type":"object","description":"Los clientes, proveedores y personas de la empresa.","properties":{"address":{"type":"string","description":"Dirección.","readOnly":false},"archived":{"type":"boolean","description":"Si está archivado. Se cambia con DELETE, no escribiéndolo.","readOnly":true},"business_name":{"type":"string","description":"Razón social. Hace falta al menos uno de los dos: nombre o razón social.","readOnly":false},"city":{"type":"string","description":"Población.","readOnly":false},"company_id":{"type":"string","description":"La empresa. Sale del token.","readOnly":true},"country":{"type":"string","description":"País.","readOnly":false},"created_at":{"type":"string","description":"Cuándo se creó (UTC).","readOnly":true},"created_by":{"type":"string","description":"Quién lo creó.","readOnly":true},"emails":{"type":"array","description":"Correos.","items":{"type":"string"},"readOnly":false},"id":{"type":"string","description":"Identificador del contacto.","readOnly":true},"name":{"type":"string","description":"Nombre de la persona.","readOnly":false},"open_tasks":{"type":"integer","description":"Tareas abiertas (agregado).","readOnly":true},"parent_id":{"type":"string","description":"La empresa de la que esta persona forma parte, si la hay.","readOnly":true},"phones":{"type":"array","description":"Teléfonos.","items":{"type":"string"},"readOnly":false},"postal_code":{"type":"string","description":"Código postal.","readOnly":false},"province":{"type":"string","description":"Provincia.","readOnly":false},"tax_code":{"type":"string","description":"NIF / CIF / NIE.","readOnly":false},"updated_at":{"type":"string","description":"Último cambio (UTC).","readOnly":true},"websites":{"type":"array","description":"Páginas web.","items":{"type":"string"},"readOnly":false}}},"equipo":{"type":"object","description":"Las personas de la empresa. SOLO LECTURA: en mywoork no se crea un usuario, se le invita por correo desde la pantalla de Equipo.","properties":{"active":{"type":"boolean","description":"Si puede entrar. En la base de datos es `disabled`; aquí se dice en positivo.","readOnly":true},"email":{"type":"string","description":"Correo con el que entra.","readOnly":true},"id":{"type":"string","description":"Identificador de la persona.","readOnly":true},"joined_at":{"type":"string","description":"Cuándo se unió (UTC).","readOnly":true},"last_seen_at":{"type":"string","description":"Última vez que se le vio activo (UTC). Se refresca como mucho una vez al día.","readOnly":true},"name":{"type":"string","description":"Nombre.","readOnly":true},"role":{"type":"string","description":"`owner` o `member`.","readOnly":true}}},"etiquetas":{"type":"object","description":"Etiquetas de la empresa. Escribirlas es del propietario: un miembro no puede crear un token con `etiquetas:write`.","properties":{"color":{"type":"string","description":"`gray`, `blue`, `green`, `red`, `yellow`, `teal` o `black`. Un PUT sin color lo deja en `gray`: la columna no admite nulos, así que su vacío es su valor por defecto.","readOnly":false},"company_id":{"type":"string","description":"La empresa. Sale del token.","readOnly":true},"created_at":{"type":"string","description":"Cuándo se creó (UTC).","readOnly":true},"id":{"type":"string","description":"Identificador de la etiqueta.","readOnly":true},"name":{"type":"string","description":"Nombre. Único por empresa, sin distinguir mayúsculas.","readOnly":false},"task_count":{"type":"integer","description":"Tareas que la llevan (agregado).","readOnly":true},"updated_at":{"type":"string","description":"Último cambio (UTC).","readOnly":true}}},"me":{"type":"object","description":"El primer sitio donde mirar: quién eres, de qué empresa y qué permisos tiene este token. No exige ningún ámbito — un token sin permisos para nada tiene que poder preguntar qué es lo que no puede hacer.","properties":{"company":{"type":"object","description":"Su empresa. Un token solo ve ésta.","readOnly":true},"token":{"type":"object","description":"Descripción, ámbitos, caducidad, último uso y estado del token.","readOnly":true},"user":{"type":"object","description":"La persona dueña del token.","readOnly":true}}},"notas":{"type":"object","description":"Notas del equipo, con el mismo modelo de visibilidad que las tareas.","properties":{"color":{"type":"string","description":"`yellow`, `green`, `blue`, `clay`, `violet` o `plain`. Un PUT sin color lo deja en `yellow`: la columna no admite nulos, así que su vacío es su valor por defecto.","readOnly":false},"company_id":{"type":"string","description":"La empresa. Sale del token.","readOnly":true},"company_wide":{"type":"boolean","description":"Si la ve toda la empresa. Se cambia en la aplicación, no por API.","readOnly":true},"contacts":{"type":"array","description":"Los clientes de la nota. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno.","items":{"type":"string","format":"uuid"},"readOnly":false},"created_at":{"type":"string","description":"Cuándo se creó (UTC).","readOnly":true},"created_by":{"type":"string","description":"Quién la creó.","readOnly":true},"id":{"type":"string","description":"Identificador de la nota.","readOnly":true},"me":{"type":"object","description":"TU estado (fijada, archivada, vista). `null` si no la has tocado.","readOnly":true},"participants":{"type":"array","description":"Con quién está compartida.","items":{"type":"object"},"readOnly":true},"text":{"type":"string","description":"Contenido.","readOnly":false},"title":{"type":"string","description":"Título de la nota.","readOnly":false},"updated_at":{"type":"string","description":"Último cambio (UTC).","readOnly":true}}},"tareas":{"type":"object","description":"El trabajo del equipo. El estado y la fecha son POR PERSONA: una tarea compartida entre tres tiene tres estados.","properties":{"company_id":{"type":"string","description":"La empresa. Sale del token.","readOnly":true},"company_wide":{"type":"boolean","description":"Si la ve toda la empresa. Se cambia en la aplicación, no por API.","readOnly":true},"contacts":{"type":"array","description":"Los clientes de la tarea. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno. Solo ids: la API nunca resuelve nombres, para que no pueda equivocarse de cliente por ti.","items":{"type":"string","format":"uuid"},"readOnly":false},"created_at":{"type":"string","description":"Cuándo se creó (UTC).","readOnly":true},"created_by":{"type":"string","description":"Quién la creó.","readOnly":true},"filed_at":{"type":"string","description":"Se deriva del estado propio.","readOnly":true},"id":{"type":"string","description":"Identificador de la tarea.","readOnly":true},"me":{"type":"object","description":"TU estado en esta tarea. `null` si es de toda la empresa y no la has tocado nunca.","readOnly":true},"participants":{"type":"array","description":"El estado de CADA participante. En mywoork el estado es por persona, no de la tarea.","items":{"type":"object"},"readOnly":true},"scheduled_on":{"type":"string","description":"No se escribe aquí: es por persona, va en PATCH /tareas/{id}/mi-estado.","readOnly":true},"status":{"type":"string","description":"No se escribe aquí: es por persona, va en PATCH /tareas/{id}/mi-estado.","readOnly":true},"tags":{"type":"array","description":"Las etiquetas de la tarea, como lista de ids. Reemplaza las que hubiera.","items":{"type":"string","format":"uuid"},"readOnly":false},"text":{"type":"string","description":"Descripción. Admite HTML sencillo.","readOnly":false},"title":{"type":"string","description":"Qué hay que hacer.","readOnly":false},"updated_at":{"type":"string","description":"Último cambio (UTC).","readOnly":true}}}},"securitySchemes":{"bearerAuth":{"scheme":"bearer","type":"http","description":"Un token de acceso personal de mywoork (`mw_...`)."}}},"paths":{"/api/v1/agregados/horas-por-contacto":{"get":{"description":"Requiere el ámbito `contactos:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["agregados"],"parameters":[],"summary":"Horas trabajadas por cliente, sumando los minutos anotados en los comentarios.","operationId":"agregados_hours_by_contact","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"type":"object","title":"agregados"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/agregados/mis-tareas-abiertas-por-contacto":{"get":{"description":"Requiere el ámbito `tareas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["agregados"],"parameters":[],"summary":"MIS tareas abiertas agrupadas por cliente, con su cuenta — sin pedir la lista para contarla.","operationId":"agregados_my_open_tasks_by_contact","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"type":"object","title":"agregados"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/agregados/mis-tareas-por-estado":{"get":{"description":"Requiere el ámbito `tareas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["agregados"],"parameters":[],"summary":"TUS tareas visibles agrupadas por tu propio estado.","operationId":"agregados_my_tasks_by_status","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"type":"object","title":"agregados"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/agregados/tareas-abiertas-por-contacto":{"get":{"description":"Requiere el ámbito `contactos:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["agregados"],"parameters":[],"summary":"Tareas abiertas por contacto — la misma cuenta que la pantalla de Contactos.","operationId":"agregados_open_tasks_by_contact","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"type":"object","title":"agregados"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/contactos":{"get":{"description":"Requiere el ámbito `contactos:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["contactos"],"parameters":[{"in":"query","name":"limit","description":"Cuántos elementos por página. Fuera de rango se RECHAZA con un 422, no se recorta.","required":false,"schema":{"default":50,"maximum":200,"type":"integer","minimum":1}},{"in":"query","name":"cursor","description":"El `next_cursor` de la página anterior, tal cual. Es opaco y no vale para otro recurso.","required":false,"schema":{"type":"string"}},{"in":"query","name":"q","description":"Busca en nombre, razón social, población, teléfonos, correos, webs y campos personalizados.","required":false,"schema":{"type":"string"}},{"in":"query","name":"type","description":"`empresa` o `persona`.","required":false,"schema":{"type":"string"}},{"in":"query","name":"created_by","description":"Solo los creados por ese usuario.","required":false,"schema":{"type":"string"}}],"summary":"Lista los contactos, paginados por cursor.","operationId":"contactos_index","responses":{"200":{"description":"Una página de resultados.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/contactos"}},"next_cursor":{"type":["string","null"],"description":"El cursor de la página siguiente, o `null` si no hay más."}}}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"description":"Requiere el ámbito `contactos:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["contactos"],"parameters":[{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Crea un contacto.","operationId":"contactos_create","responses":{"201":{"description":"Creado. La cabecera `Location` lleva la ruta del recurso nuevo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/contactos"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"address":{"type":"string","description":"Dirección."},"business_name":{"type":"string","description":"Razón social. Hace falta al menos uno de los dos: nombre o razón social."},"city":{"type":"string","description":"Población."},"country":{"type":"string","description":"País."},"emails":{"type":"array","description":"Correos.","items":{"type":"string"}},"name":{"type":"string","description":"Nombre de la persona."},"phones":{"type":"array","description":"Teléfonos.","items":{"type":"string"}},"postal_code":{"type":"string","description":"Código postal."},"province":{"type":"string","description":"Provincia."},"tax_code":{"type":"string","description":"NIF / CIF / NIE."},"websites":{"type":"array","description":"Páginas web.","items":{"type":"string"}}}}}}}}},"/api/v1/contactos/{id}":{"delete":{"description":"Requiere el ámbito `contactos:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["contactos"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Archiva el contacto (borrado lógico) y lo devuelve con archived: true.","operationId":"contactos_delete","responses":{"200":{"description":"Archivado. Devuelve el recurso con `archived: true`."},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"description":"Requiere el ámbito `contactos:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["contactos"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}}],"summary":"Un contacto.","operationId":"contactos_show","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/contactos"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"description":"Requiere el ámbito `contactos:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["contactos"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Cambia SOLO los campos enviados.","operationId":"contactos_update","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/contactos"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"address":{"type":"string","description":"Dirección."},"business_name":{"type":"string","description":"Razón social. Hace falta al menos uno de los dos: nombre o razón social."},"city":{"type":"string","description":"Población."},"country":{"type":"string","description":"País."},"emails":{"type":"array","description":"Correos.","items":{"type":"string"}},"name":{"type":"string","description":"Nombre de la persona."},"phones":{"type":"array","description":"Teléfonos.","items":{"type":"string"}},"postal_code":{"type":"string","description":"Código postal."},"province":{"type":"string","description":"Provincia."},"tax_code":{"type":"string","description":"NIF / CIF / NIE."},"websites":{"type":"array","description":"Páginas web.","items":{"type":"string"}}}}}}}},"put":{"description":"Requiere el ámbito `contactos:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["contactos"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Reemplaza el contacto: los campos editables que no envíes quedan VACÍOS.","operationId":"contactos_replace","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/contactos"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"address":{"type":"string","description":"Dirección."},"business_name":{"type":"string","description":"Razón social. Hace falta al menos uno de los dos: nombre o razón social."},"city":{"type":"string","description":"Población."},"country":{"type":"string","description":"País."},"emails":{"type":"array","description":"Correos.","items":{"type":"string"}},"name":{"type":"string","description":"Nombre de la persona."},"phones":{"type":"array","description":"Teléfonos.","items":{"type":"string"}},"postal_code":{"type":"string","description":"Código postal."},"province":{"type":"string","description":"Provincia."},"tax_code":{"type":"string","description":"NIF / CIF / NIE."},"websites":{"type":"array","description":"Páginas web.","items":{"type":"string"}}}}}}}}},"/api/v1/equipo":{"get":{"description":"Requiere el ámbito `equipo:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["equipo"],"parameters":[{"in":"query","name":"limit","description":"Cuántos elementos por página. Fuera de rango se RECHAZA con un 422, no se recorta.","required":false,"schema":{"default":50,"maximum":200,"type":"integer","minimum":1}},{"in":"query","name":"cursor","description":"El `next_cursor` de la página anterior, tal cual. Es opaco y no vale para otro recurso.","required":false,"schema":{"type":"string"}}],"summary":"Lista las personas de la empresa.","operationId":"equipo_index","responses":{"200":{"description":"Una página de resultados.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/equipo"}},"next_cursor":{"type":["string","null"],"description":"El cursor de la página siguiente, o `null` si no hay más."}}}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/equipo/{id}":{"get":{"description":"Requiere el ámbito `equipo:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["equipo"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}}],"summary":"Una persona.","operationId":"equipo_show","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/equipo"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/etiquetas":{"get":{"description":"Requiere el ámbito `etiquetas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["etiquetas"],"parameters":[{"in":"query","name":"limit","description":"Cuántos elementos por página. Fuera de rango se RECHAZA con un 422, no se recorta.","required":false,"schema":{"default":50,"maximum":200,"type":"integer","minimum":1}},{"in":"query","name":"cursor","description":"El `next_cursor` de la página anterior, tal cual. Es opaco y no vale para otro recurso.","required":false,"schema":{"type":"string"}}],"summary":"Lista las etiquetas.","operationId":"etiquetas_index","responses":{"200":{"description":"Una página de resultados.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/etiquetas"}},"next_cursor":{"type":["string","null"],"description":"El cursor de la página siguiente, o `null` si no hay más."}}}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"description":"Requiere el ámbito `etiquetas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["etiquetas"],"parameters":[{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Crea una etiqueta.","operationId":"etiquetas_create","responses":{"201":{"description":"Creado. La cabecera `Location` lleva la ruta del recurso nuevo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/etiquetas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"`gray`, `blue`, `green`, `red`, `yellow`, `teal` o `black`. Un PUT sin color lo deja en `gray`: la columna no admite nulos, así que su vacío es su valor por defecto."},"name":{"type":"string","description":"Nombre. Único por empresa, sin distinguir mayúsculas."}}}}}}}},"/api/v1/etiquetas/{id}":{"delete":{"description":"Requiere el ámbito `etiquetas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["etiquetas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Borra la etiqueta y la quita de sus tareas. Borrado REAL, no lógico.","operationId":"etiquetas_delete","responses":{"204":{"description":"Borrado. Sin cuerpo."},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"description":"Requiere el ámbito `etiquetas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["etiquetas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}}],"summary":"Una etiqueta.","operationId":"etiquetas_show","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/etiquetas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"description":"Requiere el ámbito `etiquetas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["etiquetas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Cambia SOLO los campos enviados.","operationId":"etiquetas_update","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/etiquetas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"`gray`, `blue`, `green`, `red`, `yellow`, `teal` o `black`. Un PUT sin color lo deja en `gray`: la columna no admite nulos, así que su vacío es su valor por defecto."},"name":{"type":"string","description":"Nombre. Único por empresa, sin distinguir mayúsculas."}}}}}}},"put":{"description":"Requiere el ámbito `etiquetas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["etiquetas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Reemplaza la etiqueta: lo que no envíes queda VACÍO.","operationId":"etiquetas_replace","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/etiquetas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"`gray`, `blue`, `green`, `red`, `yellow`, `teal` o `black`. Un PUT sin color lo deja en `gray`: la columna no admite nulos, así que su vacío es su valor por defecto."},"name":{"type":"string","description":"Nombre. Único por empresa, sin distinguir mayúsculas."}}}}}}}},"/api/v1/me":{"get":{"description":"No exige ningún ámbito: cualquier token válido puede llamarla.","tags":["me"],"parameters":[],"summary":"Quién eres y qué puedes hacer con este token.","operationId":"me_show","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/me"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/api/v1/notas":{"get":{"description":"Requiere el ámbito `notas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["notas"],"parameters":[{"in":"query","name":"limit","description":"Cuántos elementos por página. Fuera de rango se RECHAZA con un 422, no se recorta.","required":false,"schema":{"default":50,"maximum":200,"type":"integer","minimum":1}},{"in":"query","name":"cursor","description":"El `next_cursor` de la página anterior, tal cual. Es opaco y no vale para otro recurso.","required":false,"schema":{"type":"string"}},{"in":"query","name":"contact_id","description":"Solo las ligadas a ese contacto.","required":false,"schema":{"type":"string"}},{"in":"query","name":"q","description":"Busca en el título y el texto.","required":false,"schema":{"type":"string"}}],"summary":"Lista las notas que puedes ver, fijadas incluidas.","operationId":"notas_index","responses":{"200":{"description":"Una página de resultados.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/notas"}},"next_cursor":{"type":["string","null"],"description":"El cursor de la página siguiente, o `null` si no hay más."}}}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"description":"Requiere el ámbito `notas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["notas"],"parameters":[{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Crea una nota.","operationId":"notas_create","responses":{"201":{"description":"Creado. La cabecera `Location` lleva la ruta del recurso nuevo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/notas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"`yellow`, `green`, `blue`, `clay`, `violet` o `plain`. Un PUT sin color lo deja en `yellow`: la columna no admite nulos, así que su vacío es su valor por defecto."},"contacts":{"type":"array","description":"Los clientes de la nota. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno.","items":{"type":"string","format":"uuid"}},"text":{"type":"string","description":"Contenido."},"title":{"type":"string","description":"Título de la nota."}}}}}}}},"/api/v1/notas/{id}":{"delete":{"description":"Requiere el ámbito `notas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["notas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Borra la nota. Requiere participar en ella.","operationId":"notas_delete","responses":{"204":{"description":"Borrado. Sin cuerpo."},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"description":"Requiere el ámbito `notas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["notas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}}],"summary":"Una nota.","operationId":"notas_show","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/notas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"description":"Requiere el ámbito `notas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["notas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Cambia SOLO los campos enviados.","operationId":"notas_update","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/notas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"`yellow`, `green`, `blue`, `clay`, `violet` o `plain`. Un PUT sin color lo deja en `yellow`: la columna no admite nulos, así que su vacío es su valor por defecto."},"contacts":{"type":"array","description":"Los clientes de la nota. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno.","items":{"type":"string","format":"uuid"}},"text":{"type":"string","description":"Contenido."},"title":{"type":"string","description":"Título de la nota."}}}}}}},"put":{"description":"Requiere el ámbito `notas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["notas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Reemplaza la nota: lo que no envíes queda VACÍO.","operationId":"notas_replace","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/notas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"color":{"type":"string","description":"`yellow`, `green`, `blue`, `clay`, `violet` o `plain`. Un PUT sin color lo deja en `yellow`: la columna no admite nulos, así que su vacío es su valor por defecto."},"contacts":{"type":"array","description":"Los clientes de la nota. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno.","items":{"type":"string","format":"uuid"}},"text":{"type":"string","description":"Contenido."},"title":{"type":"string","description":"Título de la nota."}}}}}}}},"/api/v1/tareas":{"get":{"description":"Requiere el ámbito `tareas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"query","name":"limit","description":"Cuántos elementos por página. Fuera de rango se RECHAZA con un 422, no se recorta.","required":false,"schema":{"default":50,"maximum":200,"type":"integer","minimum":1}},{"in":"query","name":"cursor","description":"El `next_cursor` de la página anterior, tal cual. Es opaco y no vale para otro recurso.","required":false,"schema":{"type":"string"}},{"in":"query","name":"open","description":"`true` sin archivar por ti, `false` archivadas por ti.","required":false,"schema":{"type":"boolean"}},{"in":"query","name":"mias","description":"`abiertas` = lo que tienes pendiente: tu estado no es `completada` y no la has archivado. Es la consulta de todos los días, en una sola llamada.","required":false,"schema":{"type":"string"}},{"in":"query","name":"status","description":"TU propio estado. Repite el parámetro para varios: `?status=pendiente&status=en_curso`. Varios valores se combinan con OR. Valores: pendiente, en_curso, en_espera, completada.","required":false,"style":"form","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"in":"query","name":"contact_id","description":"Solo las ligadas a ese contacto.","required":false,"schema":{"type":"string"}},{"in":"query","name":"tag_id","description":"Etiqueta. Repite el parámetro para varias: `?tag_id=A&tag_id=B`.","required":false,"style":"form","schema":{"type":"array","items":{"type":"string"}},"explode":true},{"in":"query","name":"tag_match","description":"Cómo se combinan varias etiquetas: `any` (por defecto) = lleva AL MENOS UNA; `all` = lleva TODAS.","required":false,"schema":{"type":"string"}},{"in":"query","name":"scheduled_from","description":"Desde ese día (incluido), sobre TU `scheduled_on`. Se compara por DÍA: la columna no tiene zona horaria, así que comparar instantes obligaría a inventarse una.","required":false,"schema":{"type":"string"}},{"in":"query","name":"scheduled_to","description":"Hasta ese día (incluido), sobre TU `scheduled_on`.","required":false,"schema":{"type":"string"}},{"in":"query","name":"scheduled","description":"`null` = las que no tienen fecha tuya puesta.","required":false,"schema":{"type":"string"}},{"in":"query","name":"q","description":"Busca en el título y la descripción, sin distinguir acentos ni mayúsculas.","required":false,"schema":{"type":"string"}}],"summary":"Lista las tareas que puedes ver, paginadas por cursor.","operationId":"tareas_index","responses":{"200":{"description":"Una página de resultados.","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/tareas"}},"next_cursor":{"type":["string","null"],"description":"El cursor de la página siguiente, o `null` si no hay más."}}}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"Un filtro o un `limit` inválido.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Crea una tarea y tu propia fila de estado.","operationId":"tareas_create","responses":{"201":{"description":"Creado. La cabecera `Location` lleva la ruta del recurso nuevo.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"contacts":{"type":"array","description":"Los clientes de la tarea. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno. Solo ids: la API nunca resuelve nombres, para que no pueda equivocarse de cliente por ti.","items":{"type":"string","format":"uuid"}},"tags":{"type":"array","description":"Las etiquetas de la tarea, como lista de ids. Reemplaza las que hubiera.","items":{"type":"string","format":"uuid"}},"text":{"type":"string","description":"Descripción. Admite HTML sencillo."},"title":{"type":"string","description":"Qué hay que hacer."}}}}}}}},"/api/v1/tareas/{id}":{"delete":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Borra la tarea para todos. Requiere participar en ella.","operationId":"tareas_delete","responses":{"204":{"description":"Borrado. Sin cuerpo."},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"description":"Requiere el ámbito `tareas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}}],"summary":"Una tarea.","operationId":"tareas_show","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Cambia SOLO los campos compartidos enviados.","operationId":"tareas_update","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"contacts":{"type":"array","description":"Los clientes de la tarea. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno. Solo ids: la API nunca resuelve nombres, para que no pueda equivocarse de cliente por ti.","items":{"type":"string","format":"uuid"}},"tags":{"type":"array","description":"Las etiquetas de la tarea, como lista de ids. Reemplaza las que hubiera.","items":{"type":"string","format":"uuid"}},"text":{"type":"string","description":"Descripción. Admite HTML sencillo."},"title":{"type":"string","description":"Qué hay que hacer."}}}}}}},"put":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Reemplaza el contenido compartido: lo que no envíes queda VACÍO.","operationId":"tareas_replace","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo campos editables. Un campo desconocido o no editable rechaza la petición entera con un 422.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"contacts":{"type":"array","description":"Los clientes de la tarea. Se ESCRIBE como lista de ids y se DEVUELVE con el nombre de cada uno. Solo ids: la API nunca resuelve nombres, para que no pueda equivocarse de cliente por ti.","items":{"type":"string","format":"uuid"}},"tags":{"type":"array","description":"Las etiquetas de la tarea, como lista de ids. Reemplaza las que hubiera.","items":{"type":"string","format":"uuid"}},"text":{"type":"string","description":"Descripción. Admite HTML sencillo."},"title":{"type":"string","description":"Qué hay que hacer."}}}}}}}},"/api/v1/tareas/{id}/comentarios":{"get":{"description":"Requiere el ámbito `tareas:read` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}}],"summary":"Los comentarios de la tarea, del más antiguo al más nuevo.","operationId":"tareas_comments","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Escribe un comentario, con sus minutos trabajados si los hay.","operationId":"tareas_create_comment","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"minutes":{"type":"integer","description":"Minutos trabajados que se apuntan con este comentario. Opcional."},"text":{"type":"string","description":"El texto. Admite HTML sencillo."}}}}}}}},"/api/v1/tareas/{id}/mi-estado":{"patch":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Cambia TU estado y TU fecha. No toca el de los demás participantes.","operationId":"tareas_update_me","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"all_day":{"type":"boolean","description":"Si la fecha es un día entero (sin hora significativa)."},"scheduled_on":{"type":"string","description":"TU fecha para esta tarea. Se devuelve SIN zona horaria: la columna no la tiene."},"status":{"type":"string","description":"`pendiente`, `en_curso`, `en_espera` o `completada`. Poner `completada` archiva la tarea PARA TI; cualquier otro la reabre."}}}}}}}},"/api/v1/tareas/{id}/participantes":{"put":{"description":"Requiere el ámbito `tareas:write` (o el `:write` del mismo recurso, que incluye el `:read`).","tags":["tareas"],"parameters":[{"in":"path","name":"id","description":"El identificador del recurso.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"header","name":"Idempotency-Key","description":"Opcional. La misma clave dentro de 24 horas devuelve la respuesta original sin repetir el cambio. La misma clave con otro cuerpo es un 409.","required":false,"schema":{"type":"string","maxLength":255}}],"summary":"Con quién se comparte la tarea. Reemplaza la lista entera.","operationId":"tareas_put_visibility","responses":{"200":{"description":"Correcto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/tareas"}}}},"401":{"description":"Falta el token, o no vale.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"El token no tiene el ámbito necesario, o la empresa no tiene suscripción activa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No existe en esta empresa.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"La `Idempotency-Key` ya se usó para otra petición distinta.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"El cuerpo se rechazó entero. `rejected_fields` dice qué campos y por qué. NO se ha escrito nada.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Demasiadas peticiones. Espera lo que diga `Retry-After`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"requestBody":{"description":"Solo los campos que quieras cambiar. Los que no envíes se quedan como están.","required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"user_ids":{"type":"array","description":"Con quién se comparte. Solo cuenta con `visibility: people`.","items":{"type":"string","format":"uuid"}},"visibility":{"type":"string","description":"`private` (solo tú y quien la creó), `people` (los de `user_ids`) o `company` (toda la empresa)."}}}}}}}}},"openapi":"3.1.0","security":[{"bearerAuth":[]}],"servers":[{"url":"https://mywoork.com"}]}