{
  "schemaVersion": "1.0",
  "item": {
    "slug": "talkspresso",
    "name": "Talkspresso",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/baron-talkspresso/talkspresso",
    "canonicalUrl": "https://clawhub.ai/baron-talkspresso/talkspresso",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/talkspresso",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=talkspresso",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/talkspresso"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/talkspresso",
    "agentPageUrl": "https://openagent3.xyz/skills/talkspresso/agent",
    "manifestUrl": "https://openagent3.xyz/skills/talkspresso/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/talkspresso/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Talkspresso",
        "body": "Manage a Talkspresso business via the REST API using curl and jq."
      },
      {
        "title": "Setup",
        "body": "The user needs a TALKSPRESSO_API_KEY. If missing:\n\nDirect them to https://app.talkspresso.com/settings/api-keys to generate one\nIf they don't have a Talkspresso account, direct them to https://talkspresso.com/signup\nSet it: export TALKSPRESSO_API_KEY=\"tsp_...\"\n\nIf the user is new to Talkspresso, help them set up: profile, timezone, availability, first service."
      },
      {
        "title": "API Pattern",
        "body": "All calls follow this pattern:\n\n# GET\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n# POST\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\":\"value\"}' \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n# PUT\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\":\"value\"}' \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n# DELETE\ncurl -s -X DELETE -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\nUse jq .data on every response. The API wraps all responses in { \"data\": ... }."
      },
      {
        "title": "Profile",
        "body": "# Get profile\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/profile/me\" | jq .data\n\n# Update profile\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"expert_title\":\"Executive Coach\",\"about\":\"Short bio\",\"bio\":\"Full bio\",\"categories\":[\"coaching\"]}' \\\n  \"https://api.talkspresso.com/profile\" | jq .data\n\nKey fields: expert_title, about, bio, categories (array), handle (URL slug), profile_photo."
      },
      {
        "title": "Services (Video Calls, Workshops)",
        "body": "# List services\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/service/me\" | jq .data\n\n# Create service\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\":\"Strategy Call\",\n    \"short_description\":\"1-on-1 strategy session\",\n    \"long_description\":\"\",\n    \"price\":100,\n    \"duration\":30,\n    \"logistics\":{\"session_type\":\"single\",\"capacity_type\":\"single\",\"capacity\":1}\n  }' \\\n  \"https://api.talkspresso.com/service\" | jq .data\n\n# Update service\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"New Title\",\"price\":150}' \\\n  \"https://api.talkspresso.com/service/SERVICE_ID\" | jq .data\n\n# Delete service\ncurl -s -X DELETE -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/service/SERVICE_ID\" | jq .data\n\nService types (via logistics):\n\n1:1 call: {\"capacity_type\":\"single\",\"capacity\":1}\nGroup session: {\"capacity_type\":\"group\",\"capacity\":10}\nWebinar: {\"capacity_type\":\"group\",\"capacity\":50,\"is_webinar\":true}"
      },
      {
        "title": "Products (Digital Downloads)",
        "body": "# List products\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/me\" | jq .data\n\n# Create product\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\":\"Leadership Guide\",\n    \"slug\":\"leadership-guide\",\n    \"short_description\":\"Comprehensive guide for emerging leaders\",\n    \"long_description\":\"Full description here...\",\n    \"price\":29,\n    \"product_type\":\"download\",\n    \"status\":\"active\"\n  }' \\\n  \"https://api.talkspresso.com/product\" | jq .data\n\n# AI-generate product details from description\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"description\":\"A guide about leadership for new managers\",\"productType\":\"download\"}' \\\n  \"https://api.talkspresso.com/product/generate-details\" | jq .data\n\n# Update product\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":39,\"status\":\"active\"}' \\\n  \"https://api.talkspresso.com/product/PRODUCT_ID\" | jq .data\n\n# Delete product\ncurl -s -X DELETE -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/PRODUCT_ID\" | jq .data\n\n# Product analytics\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/analytics\" | jq .data\n\n# List purchases\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/purchases\" | jq .data\n\nProduct types: download, video, bundle. Status: draft, active, archived."
      },
      {
        "title": "Appointments & Scheduling",
        "body": "# List appointments (upcoming by default)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/me?status=upcoming\" | jq .data\n\n# Get specific appointment\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/APT_ID\" | jq .data\n\n# Check available time slots\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"date\":\"2026-02-20\",\"interval\":30,\"provider_id\":\"PROVIDER_ID\"}' \\\n  \"https://api.talkspresso.com/appointments/slots\" | jq .data\n\n# Create appointment (does NOT send email)\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"client_name\":\"Jane Smith\",\n    \"client_email\":\"jane@example.com\",\n    \"service_id\":\"SERVICE_ID\",\n    \"scheduled_date\":\"2026-02-20\",\n    \"scheduled_time\":\"10:00\",\n    \"is_complimentary\":true,\n    \"skip_email\":true\n  }' \\\n  \"https://api.talkspresso.com/appointments/invite\" | jq .data\n\n# Send the invitation email (after reviewing)\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}' \\\n  \"https://api.talkspresso.com/appointments/APT_ID/resend-invite\" | jq .data\n\n# Approve pending booking\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/APT_ID/approve\" | jq .data\n\n# Cancel appointment\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/APT_ID/cancel\" | jq .data\n\nImportant: Always create appointments with skip_email: true first. Show the user the details. Only send the invitation email after they confirm."
      },
      {
        "title": "Clients",
        "body": "# List clients (optional search)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/client/my?search=jane\" | jq .data\n\n# Get client details + booking history\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/client/CLIENT_ID/appointments\" | jq .data\n\n# Get session history (summaries, action items)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/client/CLIENT_ID/session-history\" | jq .data"
      },
      {
        "title": "Earnings",
        "body": "# Get transactions\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/transaction/my?limit=50\" | jq .data"
      },
      {
        "title": "Calendar & Availability",
        "body": "# Get calendar settings (timezone, availability windows)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/calendar/me\" | jq .data\n\n# Update timezone\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"timezone\":\"America/New_York\"}' \\\n  \"https://api.talkspresso.com/calendar\" | jq .data\n\n# Update availability windows\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"availability\":{\"Monday\":{\"is_selected\":true,\"start_time\":\"09:00\",\"end_time\":\"17:00\"}}}' \\\n  \"https://api.talkspresso.com/calendar\" | jq .data"
      },
      {
        "title": "File Uploads",
        "body": "# Upload image\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/image.jpg\" \\\n  \"https://api.talkspresso.com/file/upload/image\" | jq .data\n\n# Upload video\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/video.mp4\" \\\n  \"https://api.talkspresso.com/file/upload/video\" | jq .data\n\n# Upload file (PDF, doc, etc)\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/document.pdf\" \\\n  \"https://api.talkspresso.com/file/upload/file\" | jq .data\n\n# Set profile photo (upload, then update profile)\nCDN_URL=$(curl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/photo.jpg\" \\\n  \"https://api.talkspresso.com/file/upload/image\" | jq -r .data)\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"profile_photo\\\":\\\"$CDN_URL\\\"}\" \\\n  \"https://api.talkspresso.com/profile\" | jq .data\n\n# Attach file to product\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"file_type\":\"pdf\",\"file_name\":\"Guide.pdf\",\"file_url\":\"CDN_URL\",\"file_size\":12345}' \\\n  \"https://api.talkspresso.com/product/PRODUCT_ID/files\" | jq .data\n\nFile types for products: pdf, video, audio, image, zip, presentation, other."
      },
      {
        "title": "Booking Link",
        "body": "The public booking page URL is: https://talkspresso.com/HANDLE\n\nA specific service: https://talkspresso.com/HANDLE/SERVICE_SLUG\n\nGet the handle from the profile (handle field)."
      },
      {
        "title": "New User Setup",
        "body": "Get profile to see current state\nUpdate profile: expert_title, about, bio\nSet timezone in calendar\nSet availability windows\nCreate first service (start with a free 15-min intro call)\nShare booking link: https://talkspresso.com/HANDLE"
      },
      {
        "title": "Create a Product from Scratch",
        "body": "Ask what the product is about\nUse AI to generate details: POST /product/generate-details\nCreate the product with generated details\nIf the user has a file, upload it and attach to the product\nShare the product link"
      },
      {
        "title": "Schedule a Session",
        "body": "Search for the client: GET /client/my?search=name\nList services to pick the right one\nCheck availability for the date\nCreate appointment with skip_email: true\nShow details to user for confirmation\nOnly then send the invite email"
      },
      {
        "title": "Revenue Check",
        "body": "Get transactions: GET /transaction/my\nCalculate this month's total from payment transactions\nShow upcoming appointments count\nShow booking link for sharing"
      },
      {
        "title": "Rules",
        "body": "Never send invites without confirmation. Always create with skip_email: true, show the user, then send.\nStripe required for paid sessions. If the user hasn't connected Stripe, they can only create free services and free products.\nGet provider_id from the profile (id field) when needed for availability checks.\nSlugs are auto-generated from titles if not provided. Lowercase, hyphens, no special chars.\nTimezone comes from calendar settings, not the user model. Always check GET /calendar/me."
      },
      {
        "title": "Additional Endpoints",
        "body": "For full API reference including notifications, testimonials, recordings, promo codes, file library, messaging, Google Calendar sync, and organization features, see references/api.md."
      }
    ],
    "body": "Talkspresso\n\nManage a Talkspresso business via the REST API using curl and jq.\n\nSetup\n\nThe user needs a TALKSPRESSO_API_KEY. If missing:\n\nDirect them to https://app.talkspresso.com/settings/api-keys to generate one\nIf they don't have a Talkspresso account, direct them to https://talkspresso.com/signup\nSet it: export TALKSPRESSO_API_KEY=\"tsp_...\"\n\nIf the user is new to Talkspresso, help them set up: profile, timezone, availability, first service.\n\nAPI Pattern\n\nAll calls follow this pattern:\n\n# GET\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n# POST\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\":\"value\"}' \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n# PUT\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"key\":\"value\"}' \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n# DELETE\ncurl -s -X DELETE -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/ENDPOINT\" | jq .data\n\n\nUse jq .data on every response. The API wraps all responses in { \"data\": ... }.\n\nQuick Reference\nProfile\n# Get profile\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/profile/me\" | jq .data\n\n# Update profile\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"expert_title\":\"Executive Coach\",\"about\":\"Short bio\",\"bio\":\"Full bio\",\"categories\":[\"coaching\"]}' \\\n  \"https://api.talkspresso.com/profile\" | jq .data\n\n\nKey fields: expert_title, about, bio, categories (array), handle (URL slug), profile_photo.\n\nServices (Video Calls, Workshops)\n# List services\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/service/me\" | jq .data\n\n# Create service\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\":\"Strategy Call\",\n    \"short_description\":\"1-on-1 strategy session\",\n    \"long_description\":\"\",\n    \"price\":100,\n    \"duration\":30,\n    \"logistics\":{\"session_type\":\"single\",\"capacity_type\":\"single\",\"capacity\":1}\n  }' \\\n  \"https://api.talkspresso.com/service\" | jq .data\n\n# Update service\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"title\":\"New Title\",\"price\":150}' \\\n  \"https://api.talkspresso.com/service/SERVICE_ID\" | jq .data\n\n# Delete service\ncurl -s -X DELETE -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/service/SERVICE_ID\" | jq .data\n\n\nService types (via logistics):\n\n1:1 call: {\"capacity_type\":\"single\",\"capacity\":1}\nGroup session: {\"capacity_type\":\"group\",\"capacity\":10}\nWebinar: {\"capacity_type\":\"group\",\"capacity\":50,\"is_webinar\":true}\nProducts (Digital Downloads)\n# List products\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/me\" | jq .data\n\n# Create product\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"title\":\"Leadership Guide\",\n    \"slug\":\"leadership-guide\",\n    \"short_description\":\"Comprehensive guide for emerging leaders\",\n    \"long_description\":\"Full description here...\",\n    \"price\":29,\n    \"product_type\":\"download\",\n    \"status\":\"active\"\n  }' \\\n  \"https://api.talkspresso.com/product\" | jq .data\n\n# AI-generate product details from description\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"description\":\"A guide about leadership for new managers\",\"productType\":\"download\"}' \\\n  \"https://api.talkspresso.com/product/generate-details\" | jq .data\n\n# Update product\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"price\":39,\"status\":\"active\"}' \\\n  \"https://api.talkspresso.com/product/PRODUCT_ID\" | jq .data\n\n# Delete product\ncurl -s -X DELETE -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/PRODUCT_ID\" | jq .data\n\n# Product analytics\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/analytics\" | jq .data\n\n# List purchases\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/product/purchases\" | jq .data\n\n\nProduct types: download, video, bundle. Status: draft, active, archived.\n\nAppointments & Scheduling\n# List appointments (upcoming by default)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/me?status=upcoming\" | jq .data\n\n# Get specific appointment\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/APT_ID\" | jq .data\n\n# Check available time slots\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"date\":\"2026-02-20\",\"interval\":30,\"provider_id\":\"PROVIDER_ID\"}' \\\n  \"https://api.talkspresso.com/appointments/slots\" | jq .data\n\n# Create appointment (does NOT send email)\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"client_name\":\"Jane Smith\",\n    \"client_email\":\"jane@example.com\",\n    \"service_id\":\"SERVICE_ID\",\n    \"scheduled_date\":\"2026-02-20\",\n    \"scheduled_time\":\"10:00\",\n    \"is_complimentary\":true,\n    \"skip_email\":true\n  }' \\\n  \"https://api.talkspresso.com/appointments/invite\" | jq .data\n\n# Send the invitation email (after reviewing)\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{}' \\\n  \"https://api.talkspresso.com/appointments/APT_ID/resend-invite\" | jq .data\n\n# Approve pending booking\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/APT_ID/approve\" | jq .data\n\n# Cancel appointment\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/appointments/APT_ID/cancel\" | jq .data\n\n\nImportant: Always create appointments with skip_email: true first. Show the user the details. Only send the invitation email after they confirm.\n\nClients\n# List clients (optional search)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/client/my?search=jane\" | jq .data\n\n# Get client details + booking history\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/client/CLIENT_ID/appointments\" | jq .data\n\n# Get session history (summaries, action items)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/client/CLIENT_ID/session-history\" | jq .data\n\nEarnings\n# Get transactions\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/transaction/my?limit=50\" | jq .data\n\nCalendar & Availability\n# Get calendar settings (timezone, availability windows)\ncurl -s -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  \"https://api.talkspresso.com/calendar/me\" | jq .data\n\n# Update timezone\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"timezone\":\"America/New_York\"}' \\\n  \"https://api.talkspresso.com/calendar\" | jq .data\n\n# Update availability windows\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"availability\":{\"Monday\":{\"is_selected\":true,\"start_time\":\"09:00\",\"end_time\":\"17:00\"}}}' \\\n  \"https://api.talkspresso.com/calendar\" | jq .data\n\nFile Uploads\n# Upload image\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/image.jpg\" \\\n  \"https://api.talkspresso.com/file/upload/image\" | jq .data\n\n# Upload video\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/video.mp4\" \\\n  \"https://api.talkspresso.com/file/upload/video\" | jq .data\n\n# Upload file (PDF, doc, etc)\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/document.pdf\" \\\n  \"https://api.talkspresso.com/file/upload/file\" | jq .data\n\n# Set profile photo (upload, then update profile)\nCDN_URL=$(curl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -F \"file=@/path/to/photo.jpg\" \\\n  \"https://api.talkspresso.com/file/upload/image\" | jq -r .data)\ncurl -s -X PUT -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"profile_photo\\\":\\\"$CDN_URL\\\"}\" \\\n  \"https://api.talkspresso.com/profile\" | jq .data\n\n# Attach file to product\ncurl -s -X POST -H \"Authorization: Bearer $TALKSPRESSO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"file_type\":\"pdf\",\"file_name\":\"Guide.pdf\",\"file_url\":\"CDN_URL\",\"file_size\":12345}' \\\n  \"https://api.talkspresso.com/product/PRODUCT_ID/files\" | jq .data\n\n\nFile types for products: pdf, video, audio, image, zip, presentation, other.\n\nBooking Link\n\nThe public booking page URL is: https://talkspresso.com/HANDLE\n\nA specific service: https://talkspresso.com/HANDLE/SERVICE_SLUG\n\nGet the handle from the profile (handle field).\n\nWorkflows\nNew User Setup\nGet profile to see current state\nUpdate profile: expert_title, about, bio\nSet timezone in calendar\nSet availability windows\nCreate first service (start with a free 15-min intro call)\nShare booking link: https://talkspresso.com/HANDLE\nCreate a Product from Scratch\nAsk what the product is about\nUse AI to generate details: POST /product/generate-details\nCreate the product with generated details\nIf the user has a file, upload it and attach to the product\nShare the product link\nSchedule a Session\nSearch for the client: GET /client/my?search=name\nList services to pick the right one\nCheck availability for the date\nCreate appointment with skip_email: true\nShow details to user for confirmation\nOnly then send the invite email\nRevenue Check\nGet transactions: GET /transaction/my\nCalculate this month's total from payment transactions\nShow upcoming appointments count\nShow booking link for sharing\nRules\nNever send invites without confirmation. Always create with skip_email: true, show the user, then send.\nStripe required for paid sessions. If the user hasn't connected Stripe, they can only create free services and free products.\nGet provider_id from the profile (id field) when needed for availability checks.\nSlugs are auto-generated from titles if not provided. Lowercase, hyphens, no special chars.\nTimezone comes from calendar settings, not the user model. Always check GET /calendar/me.\nAdditional Endpoints\n\nFor full API reference including notifications, testimonials, recordings, promo codes, file library, messaging, Google Calendar sync, and organization features, see references/api.md."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/baron-talkspresso/talkspresso",
    "publisherUrl": "https://clawhub.ai/baron-talkspresso/talkspresso",
    "owner": "baron-talkspresso",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/talkspresso",
    "downloadUrl": "https://openagent3.xyz/downloads/talkspresso",
    "agentUrl": "https://openagent3.xyz/skills/talkspresso/agent",
    "manifestUrl": "https://openagent3.xyz/skills/talkspresso/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/talkspresso/agent.md"
  }
}