Funcionamiento
Publicar con IA sin duplicar proyectos
Antes de crear, consulta GET /projects y GET /subscription. Identifica el proyecto solicitado por projectId o slug exacto y conserva ese ID. Envía un slug estable al crearlo. El 409 con error.details.reason=PROJECT_ALREADY_EXISTS devuelve projectId y slug de esta organización: confirma que sea el proyecto correcto y reutilízalo. No inventes nombres ni sufijos para evitar conflictos o cuotas.
En POST /projects y POST /projects/<id>/deployments envía Idempotency-Key, de 8–128 caracteres [A-Za-z0-9._:-]. Conserva una clave para crear el proyecto y otra por revisión. Tras perder una respuesta, repite la MISMA clave y el MISMO cuerpo: el éxito se devuelve durante 24 horas sin ejecutar otra vez. Un cuerpo distinto produce 409 IDEMPOTENCY_KEY_REUSED. Para IDEMPOTENCY_PENDING o IDEMPOTENCY_PREVIOUS_FAILURE consulta proyectos e historial antes de actuar; no cambies la clave a ciegas. Una corrección usa nuevo ZIP, sourceObjectKey y clave de deploy, manteniendo projectId.
Distingue el estado del proyecto y la publicación actual: consulta GET /deployments/<id>. Sigue el mismo deployment durante QUEUED, BUILDING o HEALTHCHECK y comunica la etapa si vence el plazo. En FAILED lee /diagnostico (texto), /logs?from=tail y runtime-logs; corrige build, puerto, comando o dependencias y publica en el MISMO proyecto. No crees otro para resolver 500/502, timeout o cola. Tras READY verifica HTTPS y el flujo solicitado, como login, antes de anunciar éxito funcional.
Antes de provisionar, consulta GET /databases y GET /projects/<id>/storage y reutiliza recursos. La base y S3 no son proyectos adicionales. Usa connectionEnvKey, DATABASE_URL/REDIS_URL y envKeys S3 devueltas; no deduzcas host o contraseña del país. Se reutiliza el storage predeterminado; additional=true solicita otro vínculo y requiere una petición del cliente. Mantén las credenciales fuera del navegador.
Usa data.effectiveLimits, data.usage, data.executionAllowed y data.subscription de GET /subscription. No deduzcas permisos solo del nombre del plan. 402 PLAN_LIMIT_EXCEEDED no autoriza borrar recursos ni comprar extras. Las réplicas deseadas no prueban salud: consulta /replicas y /metrics. Autoescala y copias pagadas requieren límites y autorización; una región no garantiza failover de base, Redis o archivos.