API personal
Ejemplos
Código listo en curl, JavaScript y Python, desde la primera solicitud hasta una automatización completa.
Todos los ejemplos leen el token y el ID de la cuenta de variables de entorno:
export PAPER_TOKEN="paper_…"
export PAPER_CUENTA="3f2a…"Un cliente mínimo
// Node 18+ o navegador. Sin dependencias.
const BASE = 'https://wire.ia.br/api/v1';
async function paper(path, { method = 'GET', body, intentos = 4 } = {}) {
for (let i = 0; ; i++) {
const res = await fetch(BASE + path, {
method,
headers: {
Authorization: `Bearer ${process.env.PAPER_TOKEN}`,
'X-Paper-Account': process.env.PAPER_CUENTA,
'Accept-Language': 'es',
...(body ? { 'Content-Type': 'application/json' } : {}),
},
body: body ? JSON.stringify(body) : undefined,
});
if (res.ok) return res.status === 204 ? null : res.json();
const { error } = await res.json().catch(() => ({ error: res.statusText }));
const vale = [429, 500, 502, 503].includes(res.status) && i < intentos;
if (!vale) throw new Error(`${res.status}: ${error}`);
await new Promise((r) => setTimeout(r, 2000 * 2 ** i));
}
}
const yo = await paper('/me');
console.log(`Conectado como ${yo.conta.nome}, token ${yo.token.tipo}`);Crear la página del día
Crea una página con la fecha de hoy en una carpeta "Diario del script", si todavía no existe.
const hoy = new Date().toISOString().slice(0, 10);
const paginas = await paper('/vaults/principal/pages');
let carpeta = paginas.find((p) => p.kind === 'pasta' && p.title === 'Diario del script');
if (!carpeta) {
carpeta = await paper('/vaults/principal/pages', {
method: 'POST',
body: { title: 'Diario del script', kind: 'pasta' },
});
}
if (!paginas.some((p) => p.parentId === carpeta.id && p.title === hoy)) {
await paper('/vaults/principal/pages', {
method: 'POST',
body: {
title: hoy,
parentId: carpeta.id,
markdown: `## Para hoy\n\n- [ ] \n\n## Notas\n`,
},
});
}Agregar a una página
paper /vaults/principal/pages/pa1k2m3n4o5p -X PATCH \
-d '{"append": "- [ ] Llamar al proveedor @2026-10-07 10:00"}'Leer todo el contenido de una carpeta para una IA
def texto_de_la_carpeta(boveda, carpeta_id):
partes = []
for p in paper(f"/vaults/{boveda}/pages?parent={carpeta_id}"):
if p["kind"] == "pagina" and not p.get("locked"):
pagina = paper(f"/vaults/{boveda}/pages/{p['id']}")
partes.append(f"# {pagina['title']}\n\n{pagina['markdown']}")
return "\n\n---\n\n".join(partes)Las carpetas con muchas páginas gastan una solicitud por página. Para 60 páginas o más, reparte las lecturas a lo largo de unos minutos.
Crear un evento a partir de una tarea
await paper('/calendar/events', {
method: 'POST',
body: { title: 'Llamar al proveedor', date: '2026-10-07', time: '10:00', durationMinutes: 15 },
});Enviar una imagen y ponerla en una página
RESPUESTA=$(curl -sS -X POST "https://wire.ia.br/api/v1/vaults/principal/files?name=grafico.png" \
-H "Authorization: Bearer $PAPER_TOKEN" \
-H "X-Paper-Account: $PAPER_CUENTA" \
-H "Content-Type: image/png" \
--data-binary @grafico.png)
MD=$(echo "$RESPUESTA" | jq -r .markdown)
paper /vaults/principal/pages/pa1k2m3n4o5p -X PATCH -d "$(jq -n --arg md "$MD" '{append: $md}')"Una herramienta para un agente (Claude, OpenAI y otros)
Una definición de herramienta en formato JSON Schema, que la mayoría de los modelos acepta:
{
"name": "paper_agregar",
"description": "Agrega texto en Markdown al final de una página del cuaderno Paper de la persona.",
"input_schema": {
"type": "object",
"properties": {
"boveda": { "type": "string", "description": "Id de la bóveda, de GET /vaults" },
"pagina": { "type": "string", "description": "Id de la página, de GET /vaults/{boveda}/pages" },
"texto": { "type": "string", "description": "Markdown a agregar" }
},
"required": ["boveda", "pagina", "texto"]
}
}Al ejecutar, llama a PATCH /vaults/{boveda}/pages/{pagina} con {"append": texto}.