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.
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
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
Sí
Costo por sello
$0.04 USD
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%)