Manage privypad notes

v1.0.0

Interact with the PrivyPad.com API to read, create, update, delete, and organize encrypted notes and groups on behalf of a user. Use this skill whenever the...

0· 156·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for aididmyhomework/privypad.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Manage privypad notes" (aididmyhomework/privypad) from ClawHub.
Skill page: https://clawhub.ai/aididmyhomework/privypad
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install privypad

ClawHub CLI

Package manager switcher

npx clawhub@latest install privypad
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name, description, and runtime instructions all describe direct interaction with the PrivyPad API and the skill does not request unrelated binaries, credentials, or system access. The examples and endpoints align with the stated purpose. (Minor inconsistency: the SKILL.md uses both https://www.privypad.com and https://privypad.com as the base URL.)
Instruction Scope
SKILL.md limits actions to API calls using a user-supplied Bearer token and explicitly warns not to ask for passwords or attempt browser-only token endpoints. It does instruct the agent to trigger this skill whenever PrivyPad or a pp_ token is mentioned which is broader-than-minimal trigger guidance (may cause frequent autonomous invocation) but is coherent with a convenience-focused note-management skill.
Install Mechanism
No install spec and no code files are present (instruction-only), so nothing is written to disk or downloaded during install.
Credentials
The skill declares no required environment variables or config paths; it expects a user-supplied pp_ Bearer token at runtime. Requesting the user's PrivyPad API token is proportionate to the described functionality, but the token is sensitive and grants access to the user's notes.
Persistence & Privilege
always is false and the skill does not request persistent system privileges. The skill can be invoked autonomously by the agent (platform default); this is normal and not excessive here.
Assessment
This skill is coherent and instruction-only, but before enabling: only provide a PrivyPad pp_ token you trust (it grants full access to your notes), do not paste the token in public channels, consider creating a dedicated token you can revoke if needed, confirm the correct API base URL (SKILL.md shows both with and without www), and be aware the agent may call the skill automatically when PrivyPad or related terms are mentioned. If you suspect misuse, revoke the token from PrivyPad Settings.

Like a lobster shell, security has layers — review code before you run it.

latestvk97cdx23gnn8q4b7tr5n280mgn833gw6
156downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

PrivyPad API Skill

PrivyPad is a zero-knowledge encrypted notes app. This skill covers all interactions with its public REST API (https://www.privypad.com/api/v1/).


Authentication

All note and group endpoints require a Bearer token in the Authorization header.

Authorization: Bearer pp_<uuid>.<base64url-secret>

The token is created once in PrivyPad Settings and must be supplied by the user. Never ask the user for their password — the token is self-contained.

Token management endpoints (/api/tokens) use the session cookie instead and are only available in a browser context; do not attempt to call them from scripts.


Base URL

https://www.privypad.com/api/v1

Endpoints

Notes

List notes

GET /notes

Query parameters (all optional):

ParameterTypeDescription
groupstringFilter by group name
pinnedbooleantrue to return only pinned notes
limitintegerMax results to return
offsetintegerPagination offset

Get a single note

GET /notes/:id

Create a note

POST /notes
Content-Type: application/json

{
  "title":    "string",
  "content":  "string",
  "group":    "string",   // optional
  "tags":     ["string"], // optional
  "isPinned": false       // optional
}

Update a note (partial)

PATCH /notes/:id
Content-Type: application/json

{
  "title":    "string",   // any subset of fields
  "content":  "string",
  "group":    "string",
  "tags":     ["string"],
  "isPinned": true
}

Delete / trash a note

DELETE /notes/:id

Add ?permanent=true to hard-delete instead of moving to trash.


Groups

List groups

GET /groups

Returns all group names for the authenticated user. No query parameters.


Code Pattern (JavaScript / fetch)

const PRIVYPAD_TOKEN = "pp_<uuid>.<base64url-secret>"; // supplied by user
const BASE = "https://privypad.com/api/v1";

async function privypad(method, path, body) {
  const res = await fetch(`${BASE}${path}`, {
    method,
    headers: {
      "Authorization": `Bearer ${PRIVYPAD_TOKEN}`,
      "Content-Type": "application/json",
    },
    body: body ? JSON.stringify(body) : undefined,
  });
  if (!res.ok) throw new Error(`PrivyPad ${res.status}: ${await res.text()}`);
  return res.json();
}

// Examples
const notes   = await privypad("GET",   "/notes?pinned=true");
const note    = await privypad("GET",   `/notes/${id}`);
const created = await privypad("POST",  "/notes", { title: "Hello", content: "World" });
const updated = await privypad("PATCH", `/notes/${id}`, { isPinned: true });
await              privypad("DELETE", `/notes/${id}`);
const groups  = await privypad("GET",   "/groups");

Code Pattern (Python / httpx)

import httpx

TOKEN = "pp_<uuid>.<base64url-secret>"  # supplied by user
BASE  = "https://privypad.com/api/v1"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}

def privypad(method, path, **kwargs):
    r = httpx.request(method, BASE + path, headers=HEADERS, **kwargs)
    r.raise_for_status()
    return r.json()

# Examples
notes   = privypad("GET",    "/notes", params={"group": "Work"})
created = privypad("POST",   "/notes", json={"title": "Hi", "content": "There"})
updated = privypad("PATCH",  f"/notes/{note_id}", json={"isPinned": True})
privypad("DELETE", f"/notes/{note_id}?permanent=true")
groups  = privypad("GET",    "/groups")

Important Notes

  • Zero-knowledge: The server stores notes encrypted. The token embeds the client-side secret needed to decrypt them. Never log or expose the token.
  • Trash vs. hard-delete: DELETE /notes/:id moves to trash by default. Pass ?permanent=true only when the user explicitly confirms permanent deletion.
  • HTML content: The content field must be HTML, not Markdown. Use <h1>, <h2>, <p>, <strong>, <em>, <ul>/<li>, <ol>/<li>, <hr> etc.
  • Partial updates: PATCH accepts any subset of fields — only send what changes.
  • Pagination: Use limit + offset when fetching large note lists to avoid oversized responses.
  • Token scope: If the user's token was revoked or expired, all API calls will return 401. Prompt the user to generate a new token in PrivyPad Settings.

Comments

Loading comments...