Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Manage a Talkspresso business (services, appointments, products, clients, earnings, calendar) using the Talkspresso REST API. Use when the user wants to chec...
Manage a Talkspresso business (services, appointments, products, clients, earnings, calendar) using the Talkspresso REST API. Use when the user wants to chec...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
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.
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.
Manage a Talkspresso business via the REST API using curl and jq.
The user needs a TALKSPRESSO_API_KEY. If missing: Direct them to https://app.talkspresso.com/settings/api-keys to generate one If they don't have a Talkspresso account, direct them to https://talkspresso.com/signup Set it: export TALKSPRESSO_API_KEY="tsp_..." If the user is new to Talkspresso, help them set up: profile, timezone, availability, first service.
All calls follow this pattern: # GET curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/ENDPOINT" | jq .data # POST curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"key":"value"}' \ "https://api.talkspresso.com/ENDPOINT" | jq .data # PUT curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"key":"value"}' \ "https://api.talkspresso.com/ENDPOINT" | jq .data # DELETE curl -s -X DELETE -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/ENDPOINT" | jq .data Use jq .data on every response. The API wraps all responses in { "data": ... }.
# Get profile curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/profile/me" | jq .data # Update profile curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"expert_title":"Executive Coach","about":"Short bio","bio":"Full bio","categories":["coaching"]}' \ "https://api.talkspresso.com/profile" | jq .data Key fields: expert_title, about, bio, categories (array), handle (URL slug), profile_photo.
# List services curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/service/me" | jq .data # Create service curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title":"Strategy Call", "short_description":"1-on-1 strategy session", "long_description":"", "price":100, "duration":30, "logistics":{"session_type":"single","capacity_type":"single","capacity":1} }' \ "https://api.talkspresso.com/service" | jq .data # Update service curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"title":"New Title","price":150}' \ "https://api.talkspresso.com/service/SERVICE_ID" | jq .data # Delete service curl -s -X DELETE -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/service/SERVICE_ID" | jq .data Service types (via logistics): 1:1 call: {"capacity_type":"single","capacity":1} Group session: {"capacity_type":"group","capacity":10} Webinar: {"capacity_type":"group","capacity":50,"is_webinar":true}
# List products curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/product/me" | jq .data # Create product curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title":"Leadership Guide", "slug":"leadership-guide", "short_description":"Comprehensive guide for emerging leaders", "long_description":"Full description here...", "price":29, "product_type":"download", "status":"active" }' \ "https://api.talkspresso.com/product" | jq .data # AI-generate product details from description curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"description":"A guide about leadership for new managers","productType":"download"}' \ "https://api.talkspresso.com/product/generate-details" | jq .data # Update product curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"price":39,"status":"active"}' \ "https://api.talkspresso.com/product/PRODUCT_ID" | jq .data # Delete product curl -s -X DELETE -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/product/PRODUCT_ID" | jq .data # Product analytics curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/product/analytics" | jq .data # List purchases curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/product/purchases" | jq .data Product types: download, video, bundle. Status: draft, active, archived.
# List appointments (upcoming by default) curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/appointments/me?status=upcoming" | jq .data # Get specific appointment curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/appointments/APT_ID" | jq .data # Check available time slots curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"date":"2026-02-20","interval":30,"provider_id":"PROVIDER_ID"}' \ "https://api.talkspresso.com/appointments/slots" | jq .data # Create appointment (does NOT send email) curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "client_name":"Jane Smith", "client_email":"jane@example.com", "service_id":"SERVICE_ID", "scheduled_date":"2026-02-20", "scheduled_time":"10:00", "is_complimentary":true, "skip_email":true }' \ "https://api.talkspresso.com/appointments/invite" | jq .data # Send the invitation email (after reviewing) curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{}' \ "https://api.talkspresso.com/appointments/APT_ID/resend-invite" | jq .data # Approve pending booking curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/appointments/APT_ID/approve" | jq .data # Cancel appointment curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/appointments/APT_ID/cancel" | jq .data Important: Always create appointments with skip_email: true first. Show the user the details. Only send the invitation email after they confirm.
# List clients (optional search) curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/client/my?search=jane" | jq .data # Get client details + booking history curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/client/CLIENT_ID/appointments" | jq .data # Get session history (summaries, action items) curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/client/CLIENT_ID/session-history" | jq .data
# Get transactions curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/transaction/my?limit=50" | jq .data
# Get calendar settings (timezone, availability windows) curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ "https://api.talkspresso.com/calendar/me" | jq .data # Update timezone curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"timezone":"America/New_York"}' \ "https://api.talkspresso.com/calendar" | jq .data # Update availability windows curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"availability":{"Monday":{"is_selected":true,"start_time":"09:00","end_time":"17:00"}}}' \ "https://api.talkspresso.com/calendar" | jq .data
# Upload image curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -F "file=@/path/to/image.jpg" \ "https://api.talkspresso.com/file/upload/image" | jq .data # Upload video curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -F "file=@/path/to/video.mp4" \ "https://api.talkspresso.com/file/upload/video" | jq .data # Upload file (PDF, doc, etc) curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -F "file=@/path/to/document.pdf" \ "https://api.talkspresso.com/file/upload/file" | jq .data # Set profile photo (upload, then update profile) CDN_URL=$(curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -F "file=@/path/to/photo.jpg" \ "https://api.talkspresso.com/file/upload/image" | jq -r .data) curl -s -X PUT -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"profile_photo\":\"$CDN_URL\"}" \ "https://api.talkspresso.com/profile" | jq .data # Attach file to product curl -s -X POST -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"file_type":"pdf","file_name":"Guide.pdf","file_url":"CDN_URL","file_size":12345}' \ "https://api.talkspresso.com/product/PRODUCT_ID/files" | jq .data File types for products: pdf, video, audio, image, zip, presentation, other.
The public booking page URL is: https://talkspresso.com/HANDLE A specific service: https://talkspresso.com/HANDLE/SERVICE_SLUG Get the handle from the profile (handle field).
Get profile to see current state Update profile: expert_title, about, bio Set timezone in calendar Set availability windows Create first service (start with a free 15-min intro call) Share booking link: https://talkspresso.com/HANDLE
Ask what the product is about Use AI to generate details: POST /product/generate-details Create the product with generated details If the user has a file, upload it and attach to the product Share the product link
Search for the client: GET /client/my?search=name List services to pick the right one Check availability for the date Create appointment with skip_email: true Show details to user for confirmation Only then send the invite email
Get transactions: GET /transaction/my Calculate this month's total from payment transactions Show upcoming appointments count Show booking link for sharing
Never send invites without confirmation. Always create with skip_email: true, show the user, then send. Stripe required for paid sessions. If the user hasn't connected Stripe, they can only create free services and free products. Get provider_id from the profile (id field) when needed for availability checks. Slugs are auto-generated from titles if not provided. Lowercase, hyphens, no special chars. Timezone comes from calendar settings, not the user model. Always check GET /calendar/me.
For full API reference including notifications, testimonials, recordings, promo codes, file library, messaging, Google Calendar sync, and organization features, see references/api.md.
Workflow acceleration for inboxes, docs, calendars, planning, and execution loops.
Largest current source with strong distribution and engagement signals.