Modelos de Integración

Tres formas de integrar Anchorum según tu volumen, equipo y modelo de negocio.

Modelo 1 — Developer Self-service
Modelo 2 — Auto-seal Pro
Modelo 3 — Reseller Enterprise
Developer / Self-service

Control total sobre cada documento y lote

Tú decides cuándo certificar y cuándo anclar en Bitcoin. Ideal para equipos técnicos que quieren máximo control con mínima complejidad.

POST /ingest
Sello SHA-256
Agregar docs al lote
POST /merkle/generate
Bitcoin anchor
GET /certificate/{id}

Implementación

cURL
Python
JavaScript
# El archivo NUNCA sale de tu servidor.
# Solo el hash SHA-256 viaja a Anchorum.

# 1. Calcular hash del archivo localmente
FILE_HASH=$(sha256sum contrato_001.pdf | cut -d' ' -f1)
echo "Hash: $FILE_HASH"

# 2. Certificar — se envía solo el hash (64 chars)
curl -X POST https://api.anchorum.co/api/v1/ingest \
  -H "X-API-Key: anc_tu_key" \
  -H "Content-Type: application/json" \
  -d "{
    \"content\":  \"$FILE_HASH\",
    \"filename\": \"contrato_001.pdf\",
    \"batch_id\": \"mis-contratos-abril\"
  }"

# 3. Anclar lote en Bitcoin
curl -X POST https://api.anchorum.co/api/v1/merkle/generate \
  -H "X-API-Key: anc_tu_key" \
  -H "Content-Type: application/json" \
  -d '{"batch_id": "mis-contratos-abril"}'

# 4. Descargar certificado PDF
curl https://api.anchorum.co/api/v1/certificate/{document_id} \
  -o certificado.pdf

# 5. Verificar integridad (público, sin key)
HASH_VERIFY=$(sha256sum contrato_001.pdf | cut -d' ' -f1)
curl -X POST https://api.anchorum.co/api/v1/verify \
  -H "Content-Type: application/json" \
  -d "{
    \"document_id\":    \"{document_id}\",
    \"hash_to_verify\": \"$HASH_VERIFY\"
  }"
import hashlib, requests

API = "https://api.anchorum.co/api/v1"
HDR = {"X-API-Key": "anc_tu_key", "Content-Type": "application/json"}

# 1. Calcular hash del archivo — el PDF nunca sale de tu servidor
with open("contrato_001.pdf", "rb") as f:
    file_hash = hashlib.sha256(f.read()).hexdigest()

print(f"Hash local: {file_hash}")

# 2. Certificar — se envía solo el hash (64 chars)
r = requests.post(f"{API}/ingest", headers=HDR, json={
    "content":  file_hash,
    "filename": "contrato_001.pdf",
    "batch_id": "mis-contratos-abril"
})
seal = r.json()
doc_id = seal["document_id"]
print(f"Sellado: {doc_id}")
print(f"Consumo: {r.headers['X-Docs-Used']}/{r.headers['X-Docs-Limit']}")

# 3. Anclar en Bitcoin
r = requests.post(f"{API}/merkle/generate", headers=HDR,
                  json={"batch_id": "mis-contratos-abril"})
merkle = r.json()
print(f"Merkle: {merkle['root_hash'][:16]}... ({merkle['document_count']} docs)")

# 4. Descargar certificado PDF
pdf = requests.get(f"{API}/certificate/{doc_id}").content
open("certificado.pdf", "wb").write(pdf)

# 5. Verificar — recalculando hash del mismo archivo
with open("contrato_001.pdf", "rb") as f:
    hash_verificar = hashlib.sha256(f.read()).hexdigest()

v = requests.post(f"{API}/verify", json={
    "document_id": doc_id,
    "hash_to_verify": hash_verificar
}).json()
print(f"Válido: {v['is_valid']}")  # True si el archivo no fue modificado
const API = "https://api.anchorum.co/api/v1";
const KEY = "anc_tu_key";
const hdr = { "X-API-Key": KEY, "Content-Type": "application/json" };

// Helper: calcular SHA-256 de un archivo en el navegador
async function hashFile(file) {
  const buf = await file.arrayBuffer();
  const digest = await crypto.subtle.digest("SHA-256", buf);
  return Array.from(new Uint8Array(digest))
              .map(b => b.toString(16).padStart(2, "0")).join("");
}

// 1. Usuario selecciona archivo — hash calculado localmente
const file = document.getElementById("file-input").files[0];
const fileHash = await hashFile(file);
console.log("Hash local:", fileHash);

// 2. Certificar — solo el hash viaja a Anchorum
const r = await fetch(`${API}/ingest`, {
  method: "POST", headers: hdr,
  body: JSON.stringify({
    content:  fileHash,      // 64 chars — el PDF nunca se sube
    filename: file.name,
    batch_id: "mis-contratos-abril"
  })
});
const seal = await r.json();
console.log("Sellado:", seal.document_id);

// 3. Anclar en Bitcoin
const merkle = await fetch(`${API}/merkle/generate`, {
  method: "POST", headers: hdr,
  body: JSON.stringify({ batch_id: "mis-contratos-abril" })
}).then(r => r.json());
console.log("Merkle:", merkle.root_hash.slice(0,16) + "...");

// 4. Verificar — mismo archivo = mismo hash = válido
const hashVerif = await hashFile(file);
const verify = await fetch(`${API}/verify`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    document_id: seal.document_id,
    hash_to_verify: hashVerif
  })
}).then(r => r.json());
console.log("Válido:", verify.is_valid); // true si el archivo es idéntico

Probar en vivo

Haz clic o arrastra tu archivo aquí PDF, DOCX, TXT — el hash se calcula en tu navegador.
El archivo nunca sale de tu equipo.

Ideal para

Estudios jurídicos Startups técnicas Proyectos internos Auditorías periódicas Freelancers dev MVPs y prototipos

Checklist de implementación

  • Registrarse en anchorum.co/registro → recibir API Key
  • Instalar librería HTTP (requests, axios, fetch)
  • Integrar POST /ingest en tu flujo de guardado
  • Guardar document_id y hash_sha256 en tu DB
  • Llamar POST /merkle/generate al cierre del lote
  • Ofrecer GET /certificate/{id} a tus usuarios
  • Tiempo estimado de integración: 2-4 horas

Planes disponibles

Free (50 sellos/mes) $0 USD
Starter (500 sellos/mes) $20 USD/mes
Pro (5,000 sellos/mes) $80 USD/mes
Pay as you go (sin cuota) $0.08 / sello

¿Listo para integrar? Crea tu cuenta gratis y empieza en minutos.

Business / Auto-seal

Solo ingesta — Anchorum ancla automáticamente

Tu equipo llama a un solo endpoint. Anchorum agrupa los documentos y genera el Merkle Tree automáticamente cada 24 horas (o al llegar a 100 docs).

POST /ingest
Sello SHA-256
Auto-seal (24h / 100 docs)
Bitcoin anchor
GET /certificate/{id}

Implementación — Un solo endpoint

cURL
Python
JavaScript
# Un solo endpoint — eso es todo.
# El archivo nunca sale de tu servidor, solo el hash SHA-256.

FILE_HASH=$(sha256sum factura_2026_001.pdf | cut -d' ' -f1)

curl -X POST https://api.anchorum.co/api/v1/ingest \
  -H "X-API-Key: anc_tu_key" \
  -H "Content-Type: application/json" \
  -d "{
    \"content\":  \"$FILE_HASH\",
    \"filename\": \"factura_2026_001.pdf\",
    \"batch_id\": \"auto-2026-04-01\"
  }"

# Respuesta incluye headers de consumo:
# X-Docs-Used: 47
# X-Docs-Limit: 500
# X-Docs-Remaining: 453

# Anchorum sella automáticamente cuando:
#   → El lote llega a 100 documentos, O
#   → Han pasado 24 horas desde el primer doc del lote
import hashlib, requests
from datetime import date

API = "https://api.anchorum.co/api/v1"
HDR = {"X-API-Key": "anc_tu_key", "Content-Type": "application/json"}

def certificar(ruta_archivo: str) -> dict:
    """
    Llamar esto al guardar cualquier documento.
    El archivo nunca sale de tu servidor — solo el hash SHA-256.
    Anchorum maneja el agrupamiento y el sellado Bitcoin automáticamente.
    """
    # Calcular hash localmente
    with open(ruta_archivo, "rb") as f:
        file_hash = hashlib.sha256(f.read()).hexdigest()

    nombre = ruta_archivo.split("/")[-1]
    batch_id = f"auto-{date.today().isoformat()}"

    r = requests.post(f"{API}/ingest", headers=HDR, json={
        "content":  file_hash,   # solo 64 chars
        "filename": nombre,
        "batch_id": batch_id,
    })
    r.raise_for_status()
    seal = r.json()

    return {
        "anchorum_id":    seal["document_id"],
        "hash_archivo":   file_hash,
        "certified_at":   seal["certified_at"],
        "docs_usados":    r.headers.get("X-Docs-Used"),
        "docs_restantes": r.headers.get("X-Docs-Remaining"),
    }

resultado = certificar("/docs/facturas/factura_001.pdf")
print(f"ID: {resultado['anchorum_id']}")
print(f"Consumo: {resultado['docs_usados']} docs este mes")
const API = "https://api.anchorum.co/api/v1";
const KEY = "anc_tu_key";

// Helper: SHA-256 de un archivo en el navegador (o Node.js)
async function hashFile(file) {
  const buf = await file.arrayBuffer();
  const digest = await crypto.subtle.digest("SHA-256", buf);
  return Array.from(new Uint8Array(digest))
              .map(b => b.toString(16).padStart(2, "0")).join("");
}

/**
 * Llamar al guardar cualquier documento.
 * El archivo nunca sale del navegador — solo el hash.
 */
async function certificar(file) {
  const fileHash = await hashFile(file);
  const batchId  = `auto-${new Date().toISOString().slice(0,10)}`;

  const res = await fetch(`${API}/ingest`, {
    method: "POST",
    headers: { "X-API-Key": KEY, "Content-Type": "application/json" },
    body: JSON.stringify({
      content:  fileHash,    // 64 chars — no se sube el archivo
      filename: file.name,
      batch_id: batchId,
    })
  });

  if (!res.ok) throw new Error(`Error ${res.status}`);
  const seal = await res.json();

  return {
    anchorumId:    seal.document_id,
    hashArchivo:   fileHash,
    certifiedAt:   seal.certified_at,
    docsUsados:    res.headers.get("X-Docs-Used"),
    docsRestantes: res.headers.get("X-Docs-Remaining"),
  };
}

// Uso — en formulario con 
const file = document.getElementById("file-input").files[0];
const r = await certificar(file);
console.log(`Certificado: ${r.anchorumId}`);
console.log(`Consumo mensual: ${r.docsUsados} docs`);

Probar en vivo

Haz clic o arrastra tu archivo aquí El hash SHA-256 se calcula localmente — privacidad total.

Ideal para

Facturación electrónica Sistemas ERP CRMs con contratos Plataformas SaaS Gestión documental Compliance automático

Checklist de implementación

  • Crear cuenta Pro en anchorum.co/registro
  • Identificar el evento de guardado de documentos en tu sistema
  • Agregar llamada a /ingest en ese evento (1 línea de código)
  • Guardar document_id y hash en tu tabla de documentos
  • Opcional: mostrar URL del certificado a tus usuarios
  • Tiempo estimado de integración: 1-2 horas

Plan recomendado — Pro

Pro (5,000 sellos/mes) $199 USD/mes
Auto-seal incluido
Costo por sello $0.04 USD

Integración de 1 hora. Sin gestionar batches ni Merkle.

Reseller / Enterprise

Embebe Anchorum en tu plataforma — revende a tus clientes

Tu plataforma firma, Anchorum certifica. Tus clientes no saben que existe Anchorum. Tú pagas precio mayorista y defines tu propio precio al cliente final.

Tu plataforma
POST /ingest + metadata
Agrupación por cliente
POST /merkle/generate
Factura mensual

Implementación — Metadata del cliente final

cURL
Python
JavaScript
# 1. Certificar con metadata del cliente final
curl -X POST https://api.anchorum.co/api/v1/ingest \
  -H "X-API-Key: anc_tu_key_enterprise" \
  -H "Content-Type: application/json" \
  -d '{
    "content":  "Contrato firmado digitalmente...",
    "filename": "contrato_A001.pdf",
    "batch_id": "tuplataforma-2026-04-01",
    "metadata": {
      "contrato_id":    "A001",
      "cliente_rut":    "76543210-K",
      "cliente_nombre": "Empresa Norte SA",
      "tipo":           "compraventa",
      "valor_clp":      15000000,
      "plataforma":     "TuPlataforma"
    }
  }'

# 2. Generar Merkle diario (o usar auto-seal)
curl -X POST https://api.anchorum.co/api/v1/merkle/generate \
  -H "X-API-Key: anc_tu_key_enterprise" \
  -H "Content-Type: application/json" \
  -d '{"batch_id": "tuplataforma-2026-04-01"}'

# 3. URL del certificado para tu cliente final
# https://api.anchorum.co/api/v1/certificate/{document_id}

# 4. Consultar consumo y facturación del mes
curl https://api.anchorum.co/api/v1/usage \
  -H "X-API-Key: anc_tu_key_enterprise"
import requests
from datetime import date

API = "https://api.anchorum.co/api/v1"
KEY = "anc_tu_key_enterprise"
HDR = {"X-API-Key": KEY, "Content-Type": "application/json"}

class AnchourumReseller:
    """Servicio de certificación embebido en tu plataforma."""

    def certificar_contrato(self, contrato: dict) -> str:
        """
        Llamar cuando el contrato sea firmado.
        contrato: dict con contrato_id, cliente_rut, tipo, etc.
        Retorna el document_id para guardar en tu DB.
        """
        batch_id = f"plataforma-{date.today().isoformat()}"

        r = requests.post(f"{API}/ingest", headers=HDR, json={
            "content":  contrato["contenido_texto"],
            "filename": f"contrato_{contrato['id']}.pdf",
            "batch_id": batch_id,
            "metadata": {
                "contrato_id":    contrato["id"],
                "cliente_rut":    contrato["rut"],
                "cliente_nombre": contrato["nombre"],
                "tipo":           contrato["tipo"],
                "valor_clp":      contrato.get("valor", 0),
                "plataforma":     "TuPlataforma",
            }
        })
        r.raise_for_status()
        seal = r.json()

        # Guardar en tu DB: seal["document_id"], seal["hash_sha256"]
        return seal["document_id"]

    def url_certificado(self, anchorum_id: str) -> str:
        """URL pública del certificado PDF para tu cliente."""
        return f"https://api.anchorum.co/api/v1/certificate/{anchorum_id}"

    def facturacion_mes(self) -> dict:
        """Cuánto debes pagar este mes."""
        r = requests.get(f"{API}/usage", headers=HDR)
        u = r.json()
        period = u["current_period"]
        return {
            "docs_sellados": period["seals_used"],
            "precio_por_doc": u["price_per_seal"],
            "total_usd":      period["amount_due"],
        }

# Uso:
svc = AnchourumReseller()
doc_id = svc.certificar_contrato({
    "id": "A001", "rut": "76543210-K",
    "nombre": "Empresa Norte SA", "tipo": "compraventa",
    "valor": 15000000,
    "contenido_texto": "Contrato de compraventa...",
})
print(f"Certificado: {svc.url_certificado(doc_id)}")
print(svc.facturacion_mes())
const API = "https://api.anchorum.co/api/v1";
const KEY = "anc_tu_key_enterprise";
const HDR = { "X-API-Key": KEY, "Content-Type": "application/json" };

class AnchourumReseller {
  /**
   * Llamar cuando el contrato sea firmado en tu plataforma.
   * El cliente final no sabe que Anchorum existe.
   */
  async certificarContrato(contrato) {
    const batchId = `plataforma-${new Date().toISOString().slice(0,10)}`;

    const res = await fetch(`${API}/ingest`, {
      method: "POST", headers: HDR,
      body: JSON.stringify({
        content:  contrato.contenidoTexto,
        filename: `contrato_${contrato.id}.pdf`,
        batch_id: batchId,
        metadata: {
          contrato_id:    contrato.id,
          cliente_rut:    contrato.rut,
          cliente_nombre: contrato.nombre,
          tipo:           contrato.tipo,
          valor_clp:      contrato.valor,
          plataforma:     "TuPlataforma",
        }
      })
    });
    const seal = await res.json();
    // Guarda seal.document_id y seal.hash_sha256 en tu DB
    return seal.document_id;
  }

  urlCertificado(anchorumId) {
    return `${API}/certificate/${anchorumId}`;
  }

  async facturacionMes() {
    const u = await fetch(`${API}/usage`, { headers: HDR }).then(r => r.json());
    const p = u.current_period;
    return { docs: p.seals_used, precio: u.price_per_seal, total: p.amount_due };
  }
}

const svc = new AnchourumReseller();
const docId = await svc.certificarContrato({
  id: "A001", rut: "76543210-K", nombre: "Empresa Norte SA",
  tipo: "compraventa", valor: 15000000,
  contenidoTexto: "Contrato de compraventa..."
});
console.log(svc.urlCertificado(docId));
console.log(await svc.facturacionMes());

Probar en vivo

Haz clic o arrastra el contrato aquí Hash calculado en el navegador — el contrato nunca sale de tu servidor.

Ideal para

Firmas digitales Notarías digitales Plataformas legales Inmobiliarias tech Bancos y fintech HR y contratos laborales

Checklist de implementación

  • Contactar ventas para activar plan Enterprise
  • Recibir API Key con precio mayorista pactado
  • Integrar POST /ingest en el evento "contrato firmado"
  • Guardar document_id en tu tabla de contratos
  • Exponer URL de certificado a tus usuarios finales
  • Configurar batch_id por fecha o cliente
  • Revisar facturación mensual en GET /usage
  • Tiempo estimado de integración: 4-8 horas

Calculadora de margen reseller

10010,000
Volumen 500 docs/mes
Tu costo (precio mayorista) $25.00 USD
Tu precio al cliente ($0.20) $100.00 USD
Tu margen $75.00 USD (75%)

Activa tu cuenta Enterprise con precio mayorista personalizado.