Voicenotes Official

v1.0.3

This official skill from the Voicenotes team gives OpenClaw access to new APIs and the ability to search semantically, retrieve full transcripts, filter by t...

7· 1.7k·2 current·4 all-time
byGithu from Voicenotes@gthu-vn

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for gthu-vn/voicenotes-official.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Voicenotes Official" (gthu-vn/voicenotes-official) from ClawHub.
Skill page: https://clawhub.ai/gthu-vn/voicenotes-official
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Required env vars: VOICENOTES_API_KEY
Required binaries: curl
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 voicenotes-official

ClawHub CLI

Package manager switcher

npx clawhub@latest install voicenotes-official
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
The name/description describe Voicenotes API access (search, transcripts, create notes). The only required binary is curl and the only required env var is VOICENOTES_API_KEY — both are appropriate and expected for an HTTP-based integration.
Instruction Scope
SKILL.md contains curl examples and endpoints scoped to api.voicenotes.com and instructs how to set VOICENOTES_API_KEY. It does not instruct reading unrelated files, other env vars, or sending data to off-site endpoints beyond the Voicenotes API. The security/guardrail claims are statements in the doc, not enforceable checks.
Install Mechanism
No install spec or code files are present (instruction-only skill). This is low-risk: nothing is downloaded or written to disk by an installer.
Credentials
Only a single API key (VOICENOTES_API_KEY) is required and it is declared as the primary credential. That is proportional to the described functionality.
Persistence & Privilege
always is false and the skill does not request elevated platform presence or modify other skills. Note: disable-model-invocation is false (default), so the agent may call the skill autonomously when permitted — this is normal but worth awareness.
Assessment
This skill appears coherent and limited to calling the Voicenotes API using your VOICENOTES_API_KEY. Before installing, confirm the integration URL and that you obtained the API key from https://voicenotes.com (or your account settings). Treat the API key as sensitive: only provide a key with the minimum necessary scope, monitor usage, and be prepared to rotate/revoke it if you see unexpected calls. Remember the SKILL.md's security statements are documentation — the platform does not automatically enforce them, so avoid sharing keys you wouldn't want a tool to use to read or create notes. If the skill later includes an install script or code files, re-evaluate before permitting installation or granting credentials.

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

Runtime requirements

📝 Clawdis
Binscurl
EnvVOICENOTES_API_KEY
Primary envVOICENOTES_API_KEY
latestvk976h0y6ap8pjczkvsje9jj9j581afde
1.7kdownloads
7stars
4versions
Updated 1mo ago
v1.0.3
MIT-0

voicenotes

Use the Voicenotes skill to create, search and retrieve user’s notes.

Setup

  1. Create an integration at https://voicenotes.com/app?open-claw=true#settings
  2. Copy the API key
  3. Configure it:

Webchat: Skills → Voicenotes → API Key in the sidebar

Terminal: Add to your OpenClaw config (~/.openclaw/config.yaml):

skills:
  voicenotes:
    env:
      VOICENOTES_API_KEY: "your_key_here"

Or export it directly:

export VOICENOTES_API_KEY="your_key_here"

The key is then available as $VOICENOTES_API_KEY environment variable.

API Basics

All requests need the Authorization header:

curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/..." \
  -H "Authorization: $VOICENOTES_API_KEY"

Common Operations

Search query in users notes:

Query parameters:

  • query (required): The search query string
curl -X GET "https://api.voicenotes.com/api/integrations/open-claw/search/semantic?query={search_query}" \
  -H "Authorization: $VOICENOTES_API_KEY"

Get multiple Voicenotes with filters (tags and date range):

Query parameters:

  • tags (optional): array of valid tags
  • date_range (optional): array with start and end date as UTC timestamps
curl -X POST "https://api.voicenotes.com/api/integrations/open-claw/recordings" \
  -H "Authorization: $VOICENOTES_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tags": ["tag1", "tag2"],
    "date_range": ["2026-01-01T00:00:00.000000Z", "2026-02-01T00:00:00.000000Z"]
  }'

If you want more context get the whole transcript:

curl "https://api.voicenotes.com/api/integrations/open-claw/recordings/{recording_uuid}" \
  -H "Authorization: $VOICENOTES_API_KEY" \

Create a text note in Voicenotes:

curl -X POST "https://api.voicenotes.com/api/integrations/open-claw/recordings/new" \
  -H "Authorization: $VOICENOTES_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recording_type": 3,
    "transcript": "note content here",
    "device_info": "open-claw"
  }'

Response Structure

Semantic Search Response:

Returns an array of notes and note splits ordered by relevance:

[
  {
    "type": "note",
    "uuid": "NTHiJljf",
    "title": "Quick idea about project",
    "transcript": "Full transcript text with <br> for line breaks...",
    "tags": ["idea", "project"],
    "created_at": "2025-01-15T10:30:00.000000Z"
  },
  {
    "type": "note_split",
    "uuid": "8JzkhEGh",
    "title": "Long meeting notes",
    "transcript": "Relevant chunk from a larger note...",
    "tags": ["meeting"],
    "created_at": "2025-01-14T09:00:00.000000Z"
  },
  {
    "type": "import_split",
    "uuid": "xYz12345",
    "title": "filename.extension",
    "transcript": "Chunk from an imported note...",
    "tags": ["imported"],
    "created_at": "2025-01-10T14:00:00.000000Z"
  }
]
  • type: "note" - Complete note matching the search
  • type: "note_split" - Chunk from a larger note; use the uuid to fetch full transcript if needed
  • type: "import_split" - Chunk from an imported note; title is the filename; cannot be fetched via /recordings/{uuid}
  • transcript may contain HTML (<br>, <b>) for formatting

Get Recordings Response (with filters):

Returns paginated notes matching the filters:

{
  "data": [
    {
      "id": "bTZI5t12",
      "title": null,
      "transcript": "this is a sample note",
      "duration": 0,
      "recorded_at": "2026-02-06T10:07:45.000000Z",
      "created_at": "2026-02-06T10:07:45.000000Z",
      "recording_type": 3,
      "tags": []
    }
  ],
  "links": {
    "first": "https://api.voicenotes.com/api/integrations/open-claw/recordings?page=1",
    "last": null,
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "path": "https://api.voicenotes.com/api/integrations/open-claw/recordings",
    "per_page": 10,
    "to": 1
  }
}

Key fields:

  • data - Array of recording objects
  • links.next - URL for next page (null if no more pages)
  • meta.per_page - Results per page (default 10)

Get Recording Response:

Returns full note details:

{
  "data": {
    "id": "NTHiJljf",
    "title": "Meeting Connectivity Check",
    "transcript": "Full transcript text...",
    "duration": 12101,
    "recorded_at": "2025-08-07T09:50:14.000000Z",
    "created_at": "2025-08-07T09:50:14.000000Z",
    "recording_type": 2,
    "tags": ["meeting"],
    "subnotes": [],
    "attachments": []
  }
}

Key fields:

  • id - Note UUID
  • transcript - Full text (meetings include [HH:MM:SS] Speaker N: timestamps)
  • duration - Length in milliseconds
  • recording_type - 1=voice note, 2=voice meeting, 3=text note
  • tags - Array of tag objects with name field

Create Note Response:

{
  "message": "Recording audio uploaded successfully!",
  "recording": {
    "id": "bPI3RcUP",
    "recording_id": "bPI3RcUP",
    "title": null,
    "transcript": "Sample note",
    "recording_type": 3,
    "created_at": "2026-02-04T08:51:29.000000Z",
    "tags": []
  }
}

Key fields:

  • message - Success confirmation
  • recording.id - New note UUID
  • recording.transcript - The note content

Notes

  • Note IDs are UUIDs
  • Rate limit: ~3 requests/second average

Security & Guardrails

  • Only accesses api.voicenotes.com endpoints
  • No credential exfiltration or external data storage
  • No telemetry or analytics
  • No automatic code execution or file overwrites
  • Read/write limited to user's own Voicenotes data via authenticated API

Input Sanitization

When constructing API requests, the agent MUST sanitize all user-provided inputs:

  • Search queries: URL-encode the query parameter using --data-urlencode instead of string interpolation
  • Recording UUIDs: Validate format (alphanumeric, 8 characters) before use; reject any input containing shell metacharacters (;, |, &, $, `, \)
  • JSON body fields: Use proper JSON encoding; never concatenate raw user input into JSON strings

Safe example for search:

curl -G "https://api.voicenotes.com/api/integrations/open-claw/search/semantic" \
  --data-urlencode "query=user search term here" \
  -H "Authorization: $VOICENOTES_API_KEY"

UUID validation pattern: /^[a-zA-Z0-9]{8}$/

Comments

Loading comments...