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

  1. Entrá a https://bi.digpatho.com con tu cuenta Google Workspace del dominio habilitado para tu organización.
  2. Creá un proyecto desde Cards. Ahí vivirán las columnas, cards, sprints y el Gantt.
  3. Cargá trabajo en el backlog, armá un sprint e iniciá el timer sobre una card para registrar horas.
  4. Si querés ver un workspace completo de ejemplo, pedile a un administrador de tu organización que active los datos demo.
Los usuarios finales no necesitan API keys. Las keys son solo para sistemas externos que lean o reaccionen a datos de Digpatho BI.

Cómo integrar tu sistema

Hay dos formas de conectar Digpatho BI con otro producto:

  1. API REST (pull): tu sistema consulta proyectos, cards u horas cuando lo necesita.
  2. Webhooks (push): Digpatho BI avisa a una URL tuya cuando ocurre un evento (por ejemplo, se crea o actualiza una card).

Pasos típicos

  1. Pedile a un administrador de tu organización una API key.
  2. Guardala en un secret manager. Se muestra una sola vez y empieza con dpbi_.
  3. Probá un GET a /api/v1/projects (ejemplo más abajo).
  4. 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.com

Autenticació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_secreta

Opción B — Header dedicado

X-Api-Key: dpbi_tu_clave_secreta
No compartas la key en repos públicos ni en el frontend del navegador. Usala solo desde tu backend o jobs server-side.

Si 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).

GET/api/v1/projects

Lista 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 }
    }
  ]
}
GET/api/v1/cards

Lista 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.

GET/api/v1/time-entries

Lista 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

EventoCuándo se dispara
card.createdSe crea una card
card.updatedSe actualiza una card (estado, fechas, asignación, etc.)
card.deletedSe 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/json
  • X-Digpatho-Event — nombre del evento
  • X-Digpatho-Signature — HMAC-SHA256 del body en hex, usando tu secret
  • User-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

  1. Leer el body crudo (string) antes de parsearlo.
  2. Calcular HMAC-SHA256(body, secret) en hexadecimal.
  3. Compararlo de forma segura con X-Digpatho-Signature. Si no coincide, responder 401 y no procesar.
  4. Responder 2xx rápido (ideal < 5s). El procesamiento pesado hacelo en cola.
El timeout de entrega es de 8 segundos. Si tu servidor no responde a tiempo o falla, el intento queda registrado como fallido.

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

HTTPSignificado
200OK
401API 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 / userId para 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].