Paper documentação
API pessoal

Exemplos

Código pronto em curl, JavaScript e Python, do primeiro pedido a uma automação completa.

Todos os exemplos leem o token e o ID da conta de variáveis de ambiente:

export PAPER_TOKEN="paper_…"
export PAPER_CONTA="3f2a…"

Um cliente mínimo

// Node 18+ ou navegador. Sem dependências.
const BASE = 'https://wire.ia.br/api/v1';

async function paper(path, { method = 'GET', body, tentativas = 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_CONTA,
        ...(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 < tentativas;
    if (!vale) throw new Error(`${res.status}: ${error}`);
    await new Promise((r) => setTimeout(r, 2000 * 2 ** i));
  }
}

const eu = await paper('/me');
console.log(`Conectado como ${eu.conta.nome}, token ${eu.token.tipo}`);

Criar a página do dia

Cria uma página com a data de hoje numa pasta "Diário do script", se ela ainda não existir.

const hoje = new Date().toISOString().slice(0, 10);
const paginas = await paper('/vaults/principal/pages');

let pasta = paginas.find((p) => p.kind === 'pasta' && p.title === 'Diário do script');
if (!pasta) {
  pasta = await paper('/vaults/principal/pages', {
    method: 'POST',
    body: { title: 'Diário do script', kind: 'pasta' },
  });
}

if (!paginas.some((p) => p.parentId === pasta.id && p.title === hoje)) {
  await paper('/vaults/principal/pages', {
    method: 'POST',
    body: {
      title: hoje,
      parentId: pasta.id,
      markdown: `## Para hoje\n\n- [ ] \n\n## Anotações\n`,
    },
  });
}

Acrescentar numa página

paper /vaults/principal/pages/pa1k2m3n4o5p -X PATCH \
  -d '{"append": "- [ ] Ligar para o fornecedor @2026-10-07 10:00"}'

Ler tudo de uma pasta para uma IA

def texto_da_pasta(cofre, pasta_id):
    partes = []
    for p in paper(f"/vaults/{cofre}/pages?parent={pasta_id}"):
        if p["kind"] == "pagina" and not p.get("locked"):
            pagina = paper(f"/vaults/{cofre}/pages/{p['id']}")
            partes.append(f"# {pagina['title']}\n\n{pagina['markdown']}")
    return "\n\n---\n\n".join(partes)

Pastas com muitas páginas gastam um pedido por página. Para 60 páginas ou mais, espalhe as leituras ao longo de alguns minutos.

Criar um evento a partir de uma tarefa

await paper('/calendar/events', {
  method: 'POST',
  body: { title: 'Ligar para o fornecedor', date: '2026-10-07', time: '10:00', durationMinutes: 15 },
});

Enviar uma imagem e pôr numa página

RESPOSTA=$(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_CONTA" \
  -H "Content-Type: image/png" \
  --data-binary @grafico.png)

MD=$(echo "$RESPOSTA" | jq -r .markdown)
paper /vaults/principal/pages/pa1k2m3n4o5p -X PATCH -d "$(jq -n --arg md "$MD" '{append: $md}')"

Ferramenta para um agente (Claude, OpenAI e outros)

Uma definição de ferramenta no formato JSON Schema, que a maioria dos modelos aceita:

{
  "name": "paper_acrescentar",
  "description": "Acrescenta texto em Markdown no fim de uma página do caderno Paper da pessoa.",
  "input_schema": {
    "type": "object",
    "properties": {
      "cofre": { "type": "string", "description": "Id do cofre, de GET /vaults" },
      "pagina": { "type": "string", "description": "Id da página, de GET /vaults/{cofre}/pages" },
      "texto": { "type": "string", "description": "Markdown a acrescentar" }
    },
    "required": ["cofre", "pagina", "texto"]
  }
}

Na hora de executar, chame PATCH /vaults/{cofre}/pages/{pagina} com {"append": texto}.

Nesta página