Documentación
Integrá Digpatho BI
Esta guía está pensada para equipos y empresas que necesitan usar Digpatho BI o conectar sus sistemas. No hace falta conocer cómo está armada la aplicación por dentro: con la API key y los ejemplos de abajo alcanza.
Qué es Digpatho BI
Digpatho BI es una plataforma de delivery y tiempo: planificás el trabajo del equipo, registrás horas y reportás avance en un solo lugar. Reemplaza el combo típico de tablero + timer + planillas.
- Trabajo: proyectos, board Kanban, backlog, sprints y Gantt.
- Tiempo: timer por card, cargas manuales e historial de horas.
- Equipo: disponibilidad, reportes y datos de personas (según permisos).
- Integraciones: API REST y webhooks para conectar ERPs, bots, BI o herramientas propias.
Empezar a usar el producto
- Entrá a https://bi.digpatho.com con tu cuenta Google Workspace del dominio habilitado para tu organización.
- Creá un proyecto desde Cards. Ahí vivirán las columnas, cards, sprints y el Gantt.
- Cargá trabajo en el backlog, armá un sprint e iniciá el timer sobre una card para registrar horas.
- Si querés ver un workspace completo de ejemplo, pedile a un administrador de tu organización que active los datos demo.
Cómo integrar tu sistema
Hay dos formas de conectar Digpatho BI con otro producto:
- API REST (pull): tu sistema consulta proyectos, cards u horas cuando lo necesita.
- Webhooks (push): Digpatho BI avisa a una URL tuya cuando ocurre un evento (por ejemplo, se crea o actualiza una card).
Pasos típicos
- Pedile a un administrador de tu organización una API key.
- Guardala en un secret manager. Se muestra una sola vez y empieza con
dpbi_. - Probá un GET a
/api/v1/projects(ejemplo más abajo). - Si necesitás eventos en tiempo real, registrá la URL de tu webhook y guardá el secret de firma.
Base URL de producción:
https://bi.digpatho.comAutenticación
Todas las rutas /api/v1/* requieren una API key. Podés enviarlas de dos formas equivalentes:
Opción A — Bearer
Authorization: Bearer dpbi_tu_clave_secretaOpción B — Header dedicado
X-Api-Key: dpbi_tu_clave_secretaSi la key falta, es inválida o fue revocada, la API responde 401 Unauthorized.
API REST
Formato: JSON. Encoding UTF-8. Fechas en ISO-8601 (UTC).
/api/v1/projectsLista los proyectos visibles para la organización.
Request
curl -s "https://bi.digpatho.com/api/v1/projects" \
-H "Authorization: Bearer dpbi_tu_clave_secreta"Response 200
{
"projects": [
{
"id": "clxproject01",
"key": "ACME",
"name": "Acme Delivery",
"createdAt": "2026-03-01T12:00:00.000Z",
"_count": { "cards": 42, "sprints": 3 }
}
]
}/api/v1/cardsLista cards (ítems de trabajo). Ordenadas por última actualización, más recientes primero.
Query params
projectId(opcional) — filtrar por proyecto.limit(opcional, default 100, máx. 500) — cantidad máxima de resultados.
Request
curl -s "https://bi.digpatho.com/api/v1/cards?projectId=clxproject01&limit=20" \
-H "Authorization: Bearer dpbi_tu_clave_secreta"Response 200
{
"cards": [
{
"id": "clxcard99",
"key": "ACME-12",
"summary": "Integrar webhook de facturación",
"status": "IN_PROGRESS",
"startDate": "2026-07-28T00:00:00.000Z",
"dueDate": "2026-08-05T00:00:00.000Z",
"plannedHours": 8,
"sprintId": "clxsprint03",
"assigneeId": "clxuser07",
"assignee2Id": null,
"projectId": "clxproject01",
"updatedAt": "2026-08-03T15:22:10.000Z"
}
]
}status posible: TODO, IN_PROGRESS, DONE. Fechas y horas planificadas pueden ser null.
/api/v1/time-entriesLista registros de tiempo (timer o carga manual), más recientes primero.
Query params
userId(opcional) — filtrar por persona.limit(opcional, default 50, máx. 200).
Request
curl -s "https://bi.digpatho.com/api/v1/time-entries?limit=10" \
-H "X-Api-Key: dpbi_tu_clave_secreta"Response 200
{
"entries": [
{
"id": "clxentry55",
"userId": "clxuser07",
"cardId": "clxcard99",
"cardKey": "ACME-12",
"cardSummary": "Integrar webhook de facturación",
"startedAt": "2026-08-03T14:00:00.000Z",
"endedAt": "2026-08-03T15:30:00.000Z",
"durationSeconds": 5400,
"status": "STOPPED"
}
]
}Si el timer sigue corriendo: status = RUNNING, endedAt y durationSeconds pueden ser null.
Ejemplo en Node.js
const BASE = "https://bi.digpatho.com";
const API_KEY = process.env.DIGPATHO_BI_API_KEY;
async function listProjects() {
const res = await fetch(`${BASE}/api/v1/projects`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
if (!res.ok) {
throw new Error(`Digpatho BI error ${res.status}`);
}
const { projects } = await res.json();
return projects;
}Ejemplo en Python
import os
import requests
BASE = "https://bi.digpatho.com"
API_KEY = os.environ["DIGPATHO_BI_API_KEY"]
def list_cards(project_id: str):
r = requests.get(
f"{BASE}/api/v1/cards",
params={"projectId": project_id, "limit": 100},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=15,
)
r.raise_for_status()
return r.json()["cards"]Webhooks
Digpatho BI puede notificar a tu sistema cuando cambia el trabajo. Registrá una URL HTTPS pública; un administrador te entrega un secret para verificar que el mensaje es auténtico.
Eventos disponibles
| Evento | Cuándo se dispara |
|---|---|
card.created | Se crea una card |
card.updated | Se actualiza una card (estado, fechas, asignación, etc.) |
card.deleted | Se elimina una card |
Al registrar el endpoint podés suscribirte a * (todos) o a una lista separada por comas, por ejemplo card.created,card.updated.
Request que recibís
Digpatho BI hace POST a tu URL con JSON y estos headers:
Content-Type: application/jsonX-Digpatho-Event— nombre del eventoX-Digpatho-Signature— HMAC-SHA256 del body en hex, usando tu secretUser-Agent: DigpathoBI-Webhooks/1.0
{
"event": "card.created",
"sentAt": "2026-08-05T17:05:00.000Z",
"data": {
"id": "clxcard99",
"key": "ACME-12",
"summary": "Integrar webhook de facturación",
"projectId": "clxproject01"
}
}Qué debe hacer tu endpoint
- Leer el body crudo (string) antes de parsearlo.
- Calcular
HMAC-SHA256(body, secret)en hexadecimal. - Compararlo de forma segura con
X-Digpatho-Signature. Si no coincide, responder401y no procesar. - Responder
2xxrápido (ideal < 5s). El procesamiento pesado hacelo en cola.
Verificar firma — Node.js
import { createHmac, timingSafeEqual } from "crypto";
function verifyDigpathoSignature(rawBody, signatureHeader, secret) {
const expected = createHmac("sha256", secret)
.update(rawBody)
.digest("hex");
const a = Buffer.from(expected, "utf8");
const b = Buffer.from(signatureHeader || "", "utf8");
if (a.length !== b.length) return false;
return timingSafeEqual(a, b);
}
// Express ejemplo:
app.post("/hooks/digpatho", express.raw({ type: "application/json" }), (req, res) => {
const raw = req.body.toString("utf8");
const ok = verifyDigpathoSignature(
raw,
req.get("X-Digpatho-Signature"),
process.env.DIGPATHO_WEBHOOK_SECRET
);
if (!ok) return res.status(401).send("invalid signature");
const payload = JSON.parse(raw);
// encolar payload.event / payload.data
res.status(200).json({ received: true });
});Verificar firma — Python
import hashlib
import hmac
def verify_digpatho_signature(raw_body: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode("utf-8"),
raw_body,
hashlib.sha256,
).hexdigest()
return hmac.compare_digest(expected, signature or "")Errores y buenas prácticas
| HTTP | Significado |
|---|---|
200 | OK |
401 | API key ausente, inválida o revocada |
- Reintentá con backoff ante errores de red o 5xx.
- Cacheá listados si tu integración no necesita datos en tiempo real; para cambios inmediatos preferí webhooks.
- Usá
projectId/userIdpara achicar respuestas. - Si una key se filtra, pedí revocarla y emitir una nueva.
Privacidad y datos
Cada persona con cuenta puede exportar sus datos en JSON o solicitar el borrado desde la sección de privacidad de la app (cumplimiento GDPR).
Las API keys y webhooks solo deben usarse para fines autorizados por tu organización. No reenvíes datos personales a terceros sin base legal.
¿Necesitás una key, un webhook o ampliar el alcance de la API? Contactá al administrador de tu workspace o escribinos a [email protected].