SpeakNotes: YouTube, Audio & Document Summaries

v1.0.1

Use when OpenClaw needs to call SpeakNotes API routes directly using an API key and generate transcripts/summaries from YouTube URLs, media files, or documen...

0· 294· 2 versions· 0 current· 0 all-time· Updated 12h ago· MIT-0
byJack Lillie@jacklillie

Install

openclaw skills install speaknotes-youtube-audio-document-summarizer

SpeakNotes OpenClaw Skill

This skill gives OpenClaw a production-ready contract for SpeakNotes direct API usage.

When To Use

  • The user wants OpenClaw to transcribe or summarize content via SpeakNotes API.
  • Input is one of:
    • YouTube URL
    • Audio/video file
    • Document file (pdf, docx, txt, etc.)
  • The user needs note status polling, note retrieval, or folder retrieval.

Prerequisites

  1. A SpeakNotes API key from /settings/api-keys.
  2. Store it as SPEAKNOTES_API_KEY in your OpenClaw skill config/secret manager.
  3. API host allowlist: use only https://api.speaknotes.io.
  4. Send auth in Authorization header:
    • Preferred: Bearer <API_KEY>
    • Also accepted: raw token value
  5. Never send API keys to any unverified or user-provided host.

OpenClaw config example:

{
  "skills": {
    "entries": {
      "speaknotes-openclaw": {
        "apiKey": "YOUR_SPEAKNOTES_API_KEY",
        "env": {
          "SPEAKNOTES_API_KEY": "YOUR_SPEAKNOTES_API_KEY"
        }
      }
    }
  }
}

Setup Phase (If API Key Is Missing)

Run this setup phase before any processing flow when the user has not saved an API key yet.

  1. Send the user to /pricing/pro to start or upgrade to a Pro plan if needed.
  2. Send the user to /settings/api-keys to generate and save a SpeakNotes API key.
  3. Save that key as SPEAKNOTES_API_KEY in OpenClaw skill secrets/config.
  4. Only continue with API calls after the key is available.

Implementation Rules

  1. Never print or log API keys.
  2. Always use HTTPS and only the official API host: https://api.speaknotes.io.
  3. For upload flows, always:
    • request signed URL
    • PUT bytes to signed URL
    • call complete endpoint
    • poll note status endpoint
  4. Preserve file MIME type for media uploads.
  5. Use sharedFolderId only when the caller has access.
  6. Return noteId in all create/schedule responses.

Processing Flows

YouTube

  1. POST /youtube-check
  2. If valid, POST /youtube-summary
  3. Poll GET /api/v1/notes/{id}/status until isComplete or hasError

Audio/Video File

  1. POST /upload-url
  2. PUT file bytes to returned uploadUrl
  3. POST /upload-complete
  4. Poll GET /api/v1/notes/{id}/status

Document File

  1. POST /pdf-upload-url
  2. PUT file bytes to returned uploadUrl with returned contentType
  3. POST /pdf-upload-complete
  4. Poll GET /api/v1/notes/{id}/status

OpenAPI Specification

<!-- OPENAPI_SPEC_START -->

Generated by skills/speaknotes-openclaw/scripts/generate-openapi-spec.mjs.

Use ./openapi.json as the authoritative OpenAPI 3.1 contract for this skill.

  • Includes YouTube validation/summarization, upload flows, note status, and folder endpoints.
  • Keep this file and openapi.json in the same folder when publishing.
<!-- OPENAPI_SPEC_END -->

Output Format For Agents

For each task response:

  1. action: short description of operation performed
  2. endpoints_used: list of routes called
  3. noteId: included for create flows
  4. status: current processing status (Summarizing, Done, Error, etc.)
  5. result: concise payload summary (title, snippet, or link-ready fields)
  6. next_step: polling guidance or retry recommendation

Retry Policy

  • 403: tell user to verify/regenerate API key.
  • 429: wait Retry-After (if provided) and retry once.
  • 5xx: retry once with exponential backoff; then return actionable failure.
  • Signed URL upload failures: request a fresh upload URL and retry from step 1.

Version tags

ai-notesvk973ck08qgppn10ws15evaaesn829714ai-skillvk973ck08qgppn10ws15evaaesn829714ai-summaryvk973ck08qgppn10ws15evaaesn829714apivk973ck08qgppn10ws15evaaesn829714api-integrationvk973ck08qgppn10ws15evaaesn829714async-processingvk973ck08qgppn10ws15evaaesn829714audio-transcriptionvk973ck08qgppn10ws15evaaesn829714audio-uploadvk973ck08qgppn10ws15evaaesn829714automationvk973ck08qgppn10ws15evaaesn829714clawhubvk973ck08qgppn10ws15evaaesn829714developer-toolsvk973ck08qgppn10ws15evaaesn829714document-processingvk973ck08qgppn10ws15evaaesn829714document-summaryvk973ck08qgppn10ws15evaaesn829714docx-summaryvk973ck08qgppn10ws15evaaesn829714file-uploadvk973ck08qgppn10ws15evaaesn829714folders-apivk973ck08qgppn10ws15evaaesn829714knowledge-managementvk973ck08qgppn10ws15evaaesn829714latestvk973ck08qgppn10ws15evaaesn829714lecture-notesvk973ck08qgppn10ws15evaaesn829714meeting-notesvk973ck08qgppn10ws15evaaesn829714note-takingvk973ck08qgppn10ws15evaaesn829714notes-apivk973ck08qgppn10ws15evaaesn829714openapivk973ck08qgppn10ws15evaaesn829714openapi-3-1vk973ck08qgppn10ws15evaaesn829714openclawvk973ck08qgppn10ws15evaaesn829714pdf-summaryvk973ck08qgppn10ws15evaaesn829714podcast-notesvk973ck08qgppn10ws15evaaesn829714productivityvk973ck08qgppn10ws15evaaesn829714skillvk973ck08qgppn10ws15evaaesn829714speaknotesvk973ck08qgppn10ws15evaaesn829714speech-to-textvk973ck08qgppn10ws15evaaesn829714status-pollingvk973ck08qgppn10ws15evaaesn829714summarizationvk973ck08qgppn10ws15evaaesn829714summarizevk973ck08qgppn10ws15evaaesn829714text-summaryvk973ck08qgppn10ws15evaaesn829714transcribevk973ck08qgppn10ws15evaaesn829714transcriptvk973ck08qgppn10ws15evaaesn829714transcriptionvk973ck08qgppn10ws15evaaesn829714transcriptsvk973ck08qgppn10ws15evaaesn829714video-transcriptionvk973ck08qgppn10ws15evaaesn829714video-uploadvk973ck08qgppn10ws15evaaesn829714youtubevk973ck08qgppn10ws15evaaesn829714youtube-summaryvk973ck08qgppn10ws15evaaesn829714youtube-transcriptvk973ck08qgppn10ws15evaaesn829714

Runtime requirements

EnvSPEAKNOTES_API_KEY
Primary envSPEAKNOTES_API_KEY