Get the FREE Ultimate OpenClaw Setup Guide →
b

Talkspresso

Scanned

@baron-talkspresso

npx machina-cli add skill @baron-talkspresso/talkspresso --openclaw
Files (1)
SKILL.md
11.5 KB

Talkspresso

Manage a Talkspresso business via the REST API using curl and jq.

Setup

The user needs a TALKSPRESSO_API_KEY. If missing:

  1. Direct them to https://app.talkspresso.com/settings/api-keys to generate one
  2. If they don't have a Talkspresso account, direct them to https://talkspresso.com/signup
  3. Set it: export TALKSPRESSO_API_KEY="tsp_..."

If the user is new to Talkspresso, help them set up: profile, timezone, availability, first service.

API Pattern

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": ... }.

Quick Reference

Profile

# 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.

Services (Video Calls, Workshops)

# 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}

Products (Digital Downloads)

# 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.

Appointments & Scheduling

# 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.

Clients

# 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

Earnings

# Get transactions
curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" \
  "https://api.talkspresso.com/transaction/my?limit=50" | jq .data

Calendar & Availability

# 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

File Uploads

# 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.

Booking Link

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).

Workflows

New User Setup

  1. Get profile to see current state
  2. Update profile: expert_title, about, bio
  3. Set timezone in calendar
  4. Set availability windows
  5. Create first service (start with a free 15-min intro call)
  6. Share booking link: https://talkspresso.com/HANDLE

Create a Product from Scratch

  1. Ask what the product is about
  2. Use AI to generate details: POST /product/generate-details
  3. Create the product with generated details
  4. If the user has a file, upload it and attach to the product
  5. Share the product link

Schedule a Session

  1. Search for the client: GET /client/my?search=name
  2. List services to pick the right one
  3. Check availability for the date
  4. Create appointment with skip_email: true
  5. Show details to user for confirmation
  6. Only then send the invite email

Revenue Check

  1. Get transactions: GET /transaction/my
  2. Calculate this month's total from payment transactions
  3. Show upcoming appointments count
  4. Show booking link for sharing

Rules

  • 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.

Additional Endpoints

For full API reference including notifications, testimonials, recordings, promo codes, file library, messaging, Google Calendar sync, and organization features, see references/api.md.

Source

git clone https://clawhub.ai/baron-talkspresso/talkspressoView on GitHub

Overview

This skill lets you manage a Talkspresso business through the REST API using curl and jq. It covers bookings, services, products, clients, earnings, and calendar, and requires a TALKSPRESSO_API_KEY to authenticate. Use it to check bookings, create or update services, manage digital products, review earnings, and adjust your profile.

How This Skill Works

Authenticate with a Bearer token using your TALKSPRESSO_API_KEY. API calls follow the GET, POST, PUT, and DELETE patterns shown in the Quick Reference, with responses wrapped as { data: ... }. Use curl to call endpoints like /profile, /service, or /product and pipe the result to jq .data for clean output.

When to Use It

  • Check upcoming or past bookings for a service
  • Create, update, or delete a service (1:1, group, or webinar)
  • List or create digital products (downloads)
  • Review earnings and profile information
  • Update profile settings, timezone, availability, or schedule sessions

Quick Start

  1. Step 1: Ensure TALKSPRESSO_API_KEY is set in your environment
  2. Step 2: List current services to understand your catalog
  3. Step 3: Create or update a service using the JSON payload shown in the docs

Best Practices

  • Export and securely store your TALKSPRESSO_API_KEY
  • Follow the documented curl patterns and headers
  • Always pipe responses to jq .data to unwrap payloads
  • Validate resource IDs before updating or deleting
  • Test changes on a non-production Talkspresso account first

Example Use Cases

  • List current services: curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" https://api.talkspresso.com/service/me | jq .data
  • Create a new service like 'Strategy Call' using the payload in the docs
  • Update a service title or price with PUT https://api.talkspresso.com/service/SERVICE_ID
  • Delete a service with DELETE https://api.talkspresso.com/service/SERVICE_ID
  • List your profile: curl -s -H "Authorization: Bearer $TALKSPRESSO_API_KEY" https://api.talkspresso.com/profile/me | jq .data

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers