Introducción
La API REST de DeployFast te permite controlar toda tu infraestructura desde scripts, pipelines CI/CD o agentes de IA. Puedes gestionar proyectos, disparar deploys, leer logs, configurar variables de entorno y manejar bases de datos.
https://deployfast.app/api/v1Autenticación
Todas las peticiones deben incluir una API Key en el header Authorization. Genera tus claves en Mi cuenta → API Keys.
Authorization: Bearer dfk_live_a3f8c21e9b047d6e...Tipos de clave
readMétodos: GETUso: Monitorización, dashboardsread+writeMétodos: GET, POST, PUT, DELETEUso: Agentes IA, CI/CDErrores de autenticación
401API key inválida, revocada o expirada403La clave no tiene scope write para esta operaciónQuick start
Despliega un proyecto en 4 comandos:
# 1. Obtén tu API key en /account → API Keys
# 2. Crea un proyecto
curl -X POST https://deployfast.app/api/v1/projects \
-H "Authorization: Bearer $DEPLOYFAST_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"mi-app","repoUrl":"https://github.com/tu/repo","branch":"main"}'
# 3. Dispara el primer deploy
curl -X POST https://deployfast.app/api/v1/projects/{id}/deploy \
-H "Authorization: Bearer $DEPLOYFAST_KEY"
# 4. Consulta el estado
curl https://deployfast.app/api/v1/deployments/{deploymentId} \
-H "Authorization: Bearer $DEPLOYFAST_KEY"
# → {"status":"SUCCESS","url":"https://mi-app--usuario.deployfast.app"}Referencia de endpoints
Cuenta
/meInfo del usuario autenticado: email, plan, límites
Proyectos
/projectsListar todos los proyectos con último deploy
/projects/:idDetalle del proyecto
/projectsCrear proyecto (name, repoUrl, branch, rootDir)· requiere scope write
/projects/:idEliminar proyecto (soft delete)· requiere scope write
Deployments
/projects/:id/deploymentsHistorial paginado (?page=1&limit=20)
/projects/:id/deployDisparar deploy (?body: branch opcional)· requiere scope write
/deployments/:idEstado de un deploy (QUEUED/BUILDING/SUCCESS/FAILED)
/deployments/:id/logsÚltimas N líneas de log (?lines=100, max 500)
/deployments/:id/rollbackRollback a un deploy SUCCESS· requiere scope write
Variables de entorno
/projects/:id/envListar claves (sin valores, por seguridad)
/projects/:id/env/:keyCrear o actualizar variable (body: value, environment)· requiere scope write
/projects/:id/env/:keyEliminar variable (?environment=PRODUCTION)· requiere scope write
Bases de datos
/databasesListar bases de datos del usuario
/databases/:idDetalle de una base de datos
/databasesCrear base de datos (name, engine: POSTGRES|REDIS)· requiere scope write
/databases/:id/startArrancar base de datos· requiere scope write
/databases/:id/stopParar base de datos· requiere scope write
Ejemplos
Node.js — Trigger de deploy y esperar resultado
const KEY = process.env.DEPLOYFAST_KEY;
const BASE = 'https://deployfast.app/api/v1';
async function deployAndWait(projectId) {
// 1. Disparar deploy
const { data: deployment } = await fetch(`${BASE}/projects/${projectId}/deploy`, {
method: 'POST',
headers: { Authorization: `Bearer ${KEY}` },
}).then(r => r.json());
// 2. Polling cada 5s hasta que termine
while (true) {
await new Promise(r => setTimeout(r, 5000));
const { data } = await fetch(`${BASE}/deployments/${deployment.id}`, {
headers: { Authorization: `Bearer ${KEY}` },
}).then(r => r.json());
if (data.status === 'SUCCESS') {
console.log('✓ Deploy completado:', data.url);
return data;
}
if (data.status === 'FAILED') {
throw new Error('Deploy fallido');
}
console.log('⠸ Estado:', data.status);
}
}Python — Listar proyectos y estado
import os, requests
KEY = os.environ['DEPLOYFAST_KEY']
BASE = 'https://deployfast.app/api/v1'
HEADERS = {'Authorization': f'Bearer {KEY}'}
# Listar proyectos
projects = requests.get(f'{BASE}/projects', headers=HEADERS).json()
for p in projects:
last = p['deployments'][0] if p['deployments'] else None
status = last['status'] if last else 'sin deploys'
print(f"{p['name']:30} {status}")GitHub Actions — Deploy automático en merge a main
name: Deploy to DeployFast
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Trigger deploy
run: |
RESPONSE=$(curl -s -X POST \
https://deployfast.app/api/v1/projects/${{ vars.PROJECT_ID }}/deploy \
-H "Authorization: Bearer ${{ secrets.DEPLOYFAST_KEY }}")
echo "Deploy ID: $(echo $RESPONSE | jq -r .id)"
- name: Wait for deploy
run: |
while true; do
STATUS=$(curl -s \
https://deployfast.app/api/v1/deployments/$DEPLOY_ID \
-H "Authorization: Bearer ${{ secrets.DEPLOYFAST_KEY }}" | jq -r .status)
echo "Status: $STATUS"
[ "$STATUS" = "SUCCESS" ] && exit 0
[ "$STATUS" = "FAILED" ] && exit 1
sleep 5
donePost-deploy command
Configura un comando que se ejecuta dentro del contenedor recién arrancado, justo después de que el deploy sea exitoso. Ideal para migraciones de base de datos, seeding o cualquier tarea de inicialización.
Cómo configurarlo
- Ve a /projects/:id/settings
- Sección "Pipeline" → "Post-deploy command"
- Escribe el comando y guarda
# Migraciones con Prisma
npx prisma migrate deploy
# Migraciones con Django
python manage.py migrate
# Seed de base de datos
npm run db:seed
# Múltiples comandos
npx prisma migrate deploy && npm run db:seedEl output aparece en el stream de logs del deployment en tiempo real.
Si falla (exit code ≠ 0), el deployment queda en FAILED y no se ejecuta el smoke test.
Smoke test automático
Después de cada deploy exitoso, DeployFast hace un GET a tu app para verificar que responde con HTTP 2xx. Si no responde correctamente, el deployment queda en DEGRADED en lugar de SUCCESS. El contenedor sigue corriendo — solo es un aviso.
Flujo de estados
BUILDING → SUCCESS → smoke test → SUCCESS ✓ o DEGRADED ⚠
Configurar Health Check URL
Por defecto el smoke test llama a la URL raíz. Para usar un endpoint específico: /projects/:id/settings → Pipeline → Health Check URL.
Ejemplo de endpoint /health
// Express
app.get('/health', (req, res) => res.json({ ok: true }));
# FastAPI
@app.get('/health')
def health(): return {'ok': True}
# Django (urls.py)
path('health', lambda r: JsonResponse({'ok': True})),Para agentes de IA
DeployFast está diseñado para ser usado por agentes de IA como Cursor, Claude o Windsurf. Dale tu API key al agente y podrá gestionar tus deploys directamente desde el editor.
Cursor / Windsurf
Añade esto a tu configuración del agente:
DEPLOYFAST_KEY=dfk_live_tu_clave_aquiY dale este contexto al agente:
Tienes acceso a DeployFast via API en https://deployfast.app/api/v1
Authorization: Bearer $DEPLOYFAST_KEY
Puedes:
- Listar proyectos: GET /projects
- Ver estado del último deploy: GET /projects/:id
- Hacer deploy: POST /projects/:id/deploy
- Ver logs si falla: GET /deployments/:id/logs?lines=100
- Rollback: POST /deployments/:id/rollback
- Gestionar env vars: PUT /projects/:id/env/:KEYClaude (MCP / Tools)
Ejemplo de herramienta para Claude:
{
"name": "deployfast_deploy",
"description": "Dispara un deploy en DeployFast para un proyecto",
"parameters": {
"project_id": { "type": "string", "description": "ID del proyecto" },
"branch": { "type": "string", "description": "Rama a desplegar (default: main)" }
}
}Principio de mínimo privilegio
Para agentes IA de monitorización, crea una clave de solo lectura. Solo usa claves con escritura cuando el agente necesite hacer deploys activamente.
HTTPS & reverse proxy
DeployFast termina TLS en el edge (nginx) y reenvía las peticiones a tu contenedor por HTTP interno. Tu app recibe las cabeceras X-Forwarded-Proto, X-Forwarded-Host y X-Forwarded-For con los valores reales. Para que tu framework confíe en ellas debes indicárselo explícitamente.
Síntoma más frecuente
Tu app genera URLs http:// en producción (redirecciones, assets, links) aunque esté servida por https://. Esto rompe CSS, imágenes y provoca bucles de redirect.
FastAPI / Starlette ✓ automático
DeployFast inyecta --proxy-headers --forwarded-allow-ips=* automáticamente en el comando uvicorn. No necesitas hacer nada.
# start command generado automáticamente:
uvicorn main:app --host 0.0.0.0 --port 3000 --proxy-headers --forwarded-allow-ips=*Flask / Gunicorn
# En tu app Flask (app.py)
from werkzeug.middleware.proxy_fix import ProxyFix
app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1, x_host=1)Django
Añade estas variables de entorno en Settings → Env Vars:
SECURE_PROXY_SSL_HEADER=HTTP_X_FORWARDED_PROTO,https
USE_X_FORWARDED_HOST=TrueExpress / Node.js
// En tu app Express
app.set('trust proxy', true);
// O con variable de entorno (sin tocar código):
// TRUST_PROXY=1 → añádela en Settings → Env Vars
// y en tu app:
if (process.env.TRUST_PROXY) app.set('trust proxy', true);Rails
# config/environments/production.rb
config.force_ssl = true
config.action_dispatch.trusted_proxies = [ "127.0.0.1", ::1 ]Cabeceras que envía el edge de DeployFast
X-Forwarded-Proto: https
X-Forwarded-Host: tu-app.deployfast.app
X-Forwarded-For: <IP real del cliente>
X-Forwarded-Port: 443
X-Real-IP: <IP real del cliente>
Bases de datos vía API
Crea y gestiona bases de datos PostgreSQL y Redis directamente desde tu código o agente.
# Crear una base de datos PostgreSQL
curl -X POST https://deployfast.app/api/v1/databases \
-H "Authorization: Bearer $DEPLOYFAST_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"mi-postgres","engine":"POSTGRES","version":"16"}'
# → {"id":"db_xxx","status":"PROVISIONING",...}
# Consultar estado (esperar RUNNING)
curl https://deployfast.app/api/v1/databases/db_xxx \
-H "Authorization: Bearer $DEPLOYFAST_KEY"
# → {"status":"RUNNING","internalHost":"postgres-mi-postgres.user-42.internal",...}