Referencia completa de todos los códigos de error en la API GraphQL de Blue, organizada por categoría


Formato de Respuesta de Error

La API GraphQL de Blue devuelve errores en un formato estandarizado siguiendo la especificación de GraphQL. Cuando ocurre un error, la respuesta incluye un errors array con información detallada sobre lo que salió mal.

Ejemplo de Respuesta de Error

{
  "errors": [
    {
      "message": "Todo was not found.",
      "extensions": {
        "code": "TODO_NOT_FOUND"
      }
    }
  ]
}

Estructura del Error

Cada objeto de error contiene:

  • mensaje: Una descripción legible por humanos del error
  • extensions.code: Un código de error legible por máquina para el manejo programático

Seguridad de Errores en Producción

Blue implementa un sistema de seguridad para la exposición de errores:

  • Errores Seguros: Mostrar códigos de error y mensajes reales a los clientes
  • Errores No Seguros: Devolver INTERNAL_SERVER_ERROR genéricos para ocultar detalles sensibles
  • Recurso No Encontrado: Todos los errores *_NOT_FOUND se consideran seguros y siempre se exponen

Categorías de Errores

Blue define 108 códigos de error personalizados organizados en las siguientes categorías:

Errores de Autenticación y Autorización

Código de Error Mensaje Descripción
UNAUTHENTICATED "Se requiere autenticación." La solicitud requiere autenticación pero no se proporcionó ninguna
FORBIDDEN "No estás autorizado." Autenticado pero carece de los permisos requeridos

Errores de Recurso No Encontrado (52 en total)

Recursos Principales

Código de Error Mensaje Descripción
TODO_NOT_FOUND "Todo no fue encontrado." El registro/todo no existe o el usuario carece de acceso
TODO_LIST_NOT_FOUND "La lista de todo no fue encontrada." La lista no existe o el usuario carece de acceso
PROJECT_NOT_FOUND "El proyecto no fue encontrado." El proyecto no existe o el usuario carece de acceso
COMPANY_NOT_FOUND "La empresa no fue encontrada." La empresa no existe o el usuario carece de acceso
USER_NOT_FOUND "El usuario no fue encontrado." El usuario no existe en el sistema

Campos y Formularios Personalizados

Código de Error Mensaje Descripción
CUSTOM_FIELD_NOT_FOUND "El campo personalizado no fue encontrado." El campo personalizado no existe
CUSTOM_FIELD_OPTION_NOT_FOUND "La opción de campo personalizado no fue encontrada." La opción de campo de selección no existe
FORM_NOT_FOUND "El formulario no fue encontrado." La plantilla del formulario no existe
FORM_FIELD_NOT_FOUND "El campo del formulario no fue encontrado." El campo del formulario no existe

Componentes del Proyecto

Código de Error Mensaje Descripción
TAG_NOT_FOUND "La etiqueta no fue encontrada." La etiqueta no existe en el proyecto
AUTOMATION_NOT_FOUND "La automatización no fue encontrada." La regla de automatización no existe
CHART_NOT_FOUND "El gráfico no fue encontrado." El gráfico del tablero no existe
WEBHOOK_NOT_FOUND "El webhook no fue encontrado." La configuración del webhook no existe
TEMPLATE_NOT_FOUND "La plantilla no fue encontrada." La plantilla del proyecto no existe

Comentarios y Actividades

Código de Error Mensaje Descripción
COMMENT_NOT_FOUND "El comentario no fue encontrado." El comentario no existe
ACTIVITY_NOT_FOUND "La actividad no fue encontrada." La entrada del registro de actividad no existe
REACTION_NOT_FOUND "La reacción no fue encontrada." La reacción del comentario no existe

Otros Recursos

Código de Error Mensaje Descripción
FILE_NOT_FOUND "El archivo no fue encontrado." El archivo adjunto no existe
SUBSCRIPTION_NOT_FOUND "La suscripción no fue encontrada." La suscripción de facturación no existe
INVOICE_NOT_FOUND "La factura no fue encontrada." El registro de la factura no existe
CHECKLIST_NOT_FOUND "La lista de verificación no fue encontrada." La lista de verificación no existe
CHECKLIST_ITEM_NOT_FOUND "El elemento de la lista de verificación no fue encontrado." El elemento de la lista de verificación no existe
PROJECT_ROLE_NOT_FOUND "El rol del proyecto no fue encontrado." El rol personalizado del proyecto no existe
PROJECT_ACCESS_NOT_FOUND "El acceso al proyecto no fue encontrado." El acceso del usuario al proyecto no existe
NOTIFICATION_NOT_FOUND "La notificación no fue encontrada." La notificación no existe
DASHBOARD_NOT_FOUND "El tablero no fue encontrado." El tablero no existe
KEY_NOT_FOUND "La clave no fue encontrada." La clave de configuración no existe

Errores de Validación

Código de Error Mensaje Descripción
BAD_USER_INPUT "Entrada no válida." Fallo de validación de entrada genérico
VALIDATION_ERROR "Parámetros no válidos" Los parámetros de la solicitud fallaron la validación
BAD_EMAIL "Necesitas ingresar un correo electrónico válido." Formato de correo electrónico no válido
INVALID_IDS "IDs no válidos." Uno o más IDs en la solicitud son inválidos
PHONE_INVALID "El teléfono es inválido." Formato de número de teléfono no válido
URL_INVALID "La URL es inválida." Formato de URL no válido
INVALID_RECURRING_DUE_DATE "Fecha de vencimiento no válida para tarea recurrente" Fallo de validación de fecha de tarea recurrente
INVALID_COLOR "Color no válido" El valor del color no coincide con el formato esperado

Errores de Lógica Empresarial

Límites y Cuotas

Código de Error Mensaje Descripción
COMPANY_LIMIT "Has alcanzado el límite de empresas para tu cuenta." Límite máximo de empresas alcanzado
PROJECT_LIMIT "Has alcanzado el límite de proyectos para tu empresa." Límite máximo de proyectos alcanzado
USER_LIMIT "Has alcanzado el límite de usuarios para tu empresa." Límite máximo de usuarios alcanzado
PROJECT_TEMPLATE_LIMIT "Has alcanzado el límite de plantillas para tu empresa." Límite máximo de plantillas alcanzado
CUSTOM_FIELD_LIMIT "Límite de campos personalizados alcanzado." Límite máximo de campos personalizados alcanzado
TODO_LIST_LIMIT "Has alcanzado el límite de listas para tu proyecto." Límite máximo de listas por proyecto
TOO_MANY_TODOS "Demasiados todos." Límite de registros excedido
TOO_MANY_OPTIONS "Demasiadas opciones." Límite de opciones de campo de selección excedido
MAX_FILE_SIZE "El tamaño máximo del archivo es de 4.8gb" Límite de tamaño de carga de archivo excedido

Conflictos de Recursos

Código de Error Mensaje Descripción
TAG_ALREADY_EXISTS "La etiqueta ya existe." La etiqueta con el mismo nombre existe en el proyecto
COMPANY_SLUG_ALREADY_EXISTS "La empresa ya existe." El slug/URL de la empresa está ocupado
USER_ALREADY_EXISTS "El usuario ya existe." El correo electrónico del usuario ya está registrado
ALREADY_INVITED "El usuario ya está invitado." El usuario ya tiene una invitación pendiente
USER_ALREADY_IN_PROJECT "El usuario ya está en este proyecto." El usuario ya tiene acceso al proyecto
FILE_TYPE_NOT_ALLOWED "Tipo de archivo no permitido." El tipo de archivo subido está restringido

Errores de Permiso y Acceso

Código de Error Mensaje Descripción
UNABLE_TO_DELETE_ONLY_ADMIN "No se puede eliminar al único administrador de la empresa." No se puede eliminar al último administrador
UNABLE_TO_UPDATE_OWNER "No se puede actualizar el PROPIETARIO." No se pueden modificar los permisos del propietario
TODO_LIST_IS_HIDDEN "La lista de todo está oculta." Lista oculta del rol del usuario
COMPANY_NOT_ACTIVE "La empresa no está activa." Suscripción de la empresa inactiva
PROJECT_NOT_ACTIVE "El proyecto no está activo." El proyecto está archivado/inactivo

Errores de Integridad de Datos

Código de Error Mensaje Descripción
UNABLE_TO_DELETE_LIST_WITH_TODOS "No se puede eliminar la lista con todos." La lista debe estar vacía para eliminar
UNABLE_TO_DELTE_FILE "No se puede eliminar el archivo." Fallo en la eliminación del archivo (error tipográfico en el código)
UNABLE_TO_MOVE_TODO "No se puede mover el todo." No se puede mover el registro entre listas
DEPENDENCY_HAS_DEPENDENCY "La dependencia tiene dependencia" Se detectó una dependencia circular
TODO_DEPENDS_ON_ITSELF "El todo depende de sí mismo" Dependencia autorreferencial

Errores de Stripe/Pago

Código de Error Mensaje Descripción
STRIPE_CREATING_CUSTOMER "Error al crear el cliente en stripe." Fallo en la creación del cliente de Stripe
STRIPE_ALREADY_SUBSCRIBED "Ya suscrito." Existe una suscripción activa
STRIPE_MISSING_PAYMENT_METHOD "Método de pago faltante." No hay método de pago en el archivo
STRIPE_CREATING_SUBSCRIPTION "Error al crear la suscripción en stripe." Fallo en la creación de la suscripción
STRIPE_UPDATING_SUBSCRIPTION "Error al actualizar la suscripción en stripe." Fallo en la actualización de la suscripción
STRIPE_CHECKOUT_SESSION "Error al crear la sesión de pago en stripe." Fallo en la creación de la sesión de pago
STRIPE_CUSTOMER_PORTAL "Error al crear el portal del cliente en stripe." Fallo en la creación de la sesión del portal
STRIPE_TAX_ID "No se puede guardar el ID fiscal" Fallo en la validación/guardado del ID fiscal
PAYMENT_REQUIRED "Se requiere pago." La función requiere una suscripción activa
NO_PAYMENT_REQUIRED "No se requiere pago." No se necesita pago para la operación

Errores de Autenticación y Sesión

Código de Error Mensaje Descripción
INVALID_CREDENTIALS "Credenciales no válidas." Nombre de usuario/contraseña incorrectos
EXPIRED_RESET_TOKEN "El token de restablecimiento ha expirado." El token de restablecimiento de contraseña ha expirado
OAUTH_FAILED "El proceso de OAuth falló." Fallo en la autenticación de OAuth
SAML_NOT_ENABLED "SSO (SAML) no está habilitado." SSO SAML no configurado
SSO_AUTO_PROVISION_DISABLED "La provisión automática está deshabilitada." No se pueden crear automáticamente usuarios SSO

Limitación de Tasa

La limitación de tasa es manejada por el graphql-rate-limit paquete con diferentes configuraciones:

Tipo de Límite Ventana Máx. Solicitudes Aplicado a
Standard 60s 500 Most queries/mutations
Sensitive 300s 10 Password reset, auth operations
Expensive 60s 20 Complex queries, bulk operations
Search 60s 60 Search operations
File Upload 60s 100 File upload operations

Cuando se limita la tasa, recibirás un error estándar de GraphQL con un mensaje indicando que se ha superado el límite.

Errores del Sistema e Internos

Código de Error Mensaje Descripción
INTERNAL_SERVER_ERROR "Error interno del servidor." Error genérico para errores no seguros en producción
UNKNOWN_ERROR "Error desconocido." Ocurrió un error inesperado
RESOLVER_NOT_FOUND "Resolver no encontrado" Falta el resolver de GraphQL
FIELD_NOT_IN_SCHEMA "Campo no en el esquema" El campo solicitado no existe

Mejores Prácticas para el Manejo de Errores

Manejo del Lado del Cliente

try {
  const result = await client.mutate({
    mutation: CREATE_TODO,
    variables: { input }
  });
} catch (error) {
  if (error.graphQLErrors?.length > 0) {
    const errorCode = error.graphQLErrors[0].extensions?.code;
    
    switch (errorCode) {
      case 'UNAUTHENTICATED':
        // Redirect to login
        break;
      case 'TODO_NOT_FOUND':
        // Show "Record not found" message
        break;
      case 'VALIDATION_ERROR':
        // Display validation errors
        break;
      default:
        // Show generic error message
    }
  }
}

Escenarios Comunes de Error

  1. Se requiere autenticación: UNAUTHENTICATED - El usuario necesita iniciar sesión
  2. Permiso denegado: FORBIDDEN - El usuario carece del rol/permisos requeridos
  3. Recurso no encontrado: *_NOT_FOUND - El recurso no existe o el usuario no puede acceder a él
  4. Fallo de validación: VALIDATION_ERROR, BAD_USER_INPUT - Verifica los parámetros de entrada
  5. Limitado por tasa: Verifica los encabezados de límite de tasa e implementa retroceso
  6. Se requiere pago: PAYMENT_REQUIRED - La función requiere suscripción

Documentación Relacionada

Asistente IA

Las respuestas son generadas por IA y pueden contener errores.

¿Cómo puedo ayudarte?

Pregúntame cualquier cosa sobre Blue o esta documentación.

Enter para enviar • Shift+Enter para nueva línea • ⌘I para abrir