Skip to content

OpenClaw integration

Use OpenClaw AI agents to schedule, monitor, pause, resume, and cancel meetings through SkipUp's AI-powered coordination API.

SkipUp’s OpenClaw skill lets AI agents schedule, monitor, pause, resume, and cancel meetings through SkipUp’s AI-powered coordination API. Your agent can create meeting requests, check their status, list all requests, look up workspace members, and pause or resume scheduling. When your agent creates a meeting request, SkipUp coordinates via email — reaching out to participants, collecting availability across timezones, and booking the optimal time automatically. This is not instant booking; SkipUp handles the back-and-forth asynchronously.

OpenClaw is an open standard for AI agent skills. The SkipUp skill is available on ClawHub, the OpenClaw marketplace.

The skill loads progressively — your agent sees a brief description at startup, loads full instructions when scheduling is relevant, and pulls detailed API reference only when needed. This keeps your agent fast even with many skills installed.

  • A SkipUp workspace on a plan with API access
  • An OpenClaw-compatible agent (any agent that supports ClawHub skills)

Install the skill from ClawHub:

Terminal window
npx clawhub@latest install ai-meeting-scheduling
  1. Go to your SkipUp workspace Settings
  2. Click API Keys in the sidebar
  3. Click Create API Key
  4. Name the key (e.g., “OpenClaw Agent”)
  5. Select these scopes:
    • meeting_requests.read
    • meeting_requests.write
    • members.read
  6. Click Create

Set the SKIPUP_API_KEY environment variable in your agent’s environment:

Terminal window
export SKIPUP_API_KEY=sk_live_your_key_here

The skill reads this variable automatically. No other configuration is needed.

The skill exposes seven actions to your AI agent:

Schedule meeting — Creates a new meeting scheduling request. SkipUp’s AI then reaches out to participants via email to coordinate a time and book the meeting. This is not instant booking — SkipUp handles the back-and-forth of finding a time that works for everyone.

Cancel meeting — Cancels an active or paused meeting request, optionally notifying participants.

Pause meeting — Temporarily pauses an active meeting request. SkipUp stops processing but still records incoming messages. Participants are not notified.

Resume meeting — Resumes a paused request. SkipUp picks up scheduling where it left off.

Check meeting status — Retrieves a single meeting request by ID to see its current status, participants, and timestamps.

List meeting requests — Returns a paginated, filterable list of all meeting requests in your workspace. Filter by status, organizer, participant, or date range.

List workspace members — Returns a paginated list of active workspace members. Useful for verifying organizer emails before creating meeting requests.

  1. SkipUp’s AI emails each participant to ask for their availability
  2. Participants reply to the email with times that work (no app or account needed)
  3. SkipUp finds a time that works for everyone, books the calendar event, and sends confirmations

The organizer can track progress in their SkipUp dashboard.

Your agent can manage meetings using natural language. Here are some examples of what you can ask:

  • “Schedule a 30-minute meeting between [email protected] and [email protected] to discuss Q2 planning”
  • “Set up a project kickoff with [email protected] and [email protected] next week”
  • “Cancel meeting request mr_01HQ… and notify participants”
  • “Schedule a 45-minute demo with the prospect at [email protected], mention we’ll cover the enterprise plan”
  • “What’s the status of meeting request mr_01HQ…?”
  • “Show me all active meeting requests”
  • “Is [email protected] in our workspace?”
  • “List all meetings organized by [email protected] this month”
  • “Pause the scheduling for the design team meeting”
  • “Resume the paused meeting with Bob”

The skill translates these into SkipUp API calls. After a meeting request is created, SkipUp’s AI takes over and coordinates scheduling via email.

Creates a new meeting scheduling request.

ParameterTypeRequiredDescription
organizer_emailstringYesEmail of the meeting organizer. Must be a SkipUp workspace member.
participant_emailsstring[]YesEmail addresses of participants. At least one required.
titlestringNoMeeting title.
purposestringNoWhy the meeting is needed.
descriptionstringNoFree-text instructions for the AI (e.g., tone guidance, CRM notes).
duration_minutesintegerNoDesired meeting duration in minutes.
include_introductionbooleanNoWhen true, the AI composes a warm introduction in the outreach email.
timeframe_startstringNoISO 8601 start of the preferred scheduling window.
timeframe_endstringNoISO 8601 end of the preferred scheduling window.

API endpoint: POST /api/v1/meeting_requests

Scope required: meeting_requests.write

Terminal window
curl -X POST https://api.skipup.ai/api/v1/meeting_requests \
-H "Authorization: Bearer $SKIPUP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"organizer_email": "[email protected]",
"participant_emails": ["[email protected]"],
"context": {
"title": "Q2 planning sync",
"purpose": "Discuss Q2 roadmap and assign workstreams",
"duration_minutes": 30
}
}'

The API returns 202 Accepted with the new meeting request. SkipUp begins coordinating in the background.

Cancels an active or paused meeting request.

ParameterTypeRequiredDescription
meeting_request_idstringYesID of the meeting request to cancel (e.g., mr_01HQ...).
notifybooleanNoWhether to send cancellation notifications to participants. Defaults to false.

API endpoint: POST /api/v1/meeting_requests/:id/cancel

Scope required: meeting_requests.write

Terminal window
curl -X POST https://api.skipup.ai/api/v1/meeting_requests/mr_01HQ.../cancel \
-H "Authorization: Bearer $SKIPUP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"notify": true}'

Only requests with status active or paused can be cancelled. Attempting to cancel a booked or already cancelled request returns a 422 error.

Temporarily pauses an active meeting request. SkipUp stops sending follow-ups and processing messages, but still records any incoming replies. Participants are not notified.

ParameterTypeRequiredDescription
meeting_request_idstringYesID of the meeting request to pause (e.g., mr_01HQ...).

API endpoint: POST /api/v1/meeting_requests/:id/pause

Scope required: meeting_requests.write

Terminal window
curl -X POST https://api.skipup.ai/api/v1/meeting_requests/mr_01HQ.../pause \
-H "Authorization: Bearer $SKIPUP_API_KEY"

Only requests with status active can be paused. No request body is required.

Resumes a paused meeting request. SkipUp picks up scheduling where it left off, including any messages that arrived while paused.

ParameterTypeRequiredDescription
meeting_request_idstringYesID of the meeting request to resume (e.g., mr_01HQ...).

API endpoint: POST /api/v1/meeting_requests/:id/resume

Scope required: meeting_requests.write

Terminal window
curl -X POST https://api.skipup.ai/api/v1/meeting_requests/mr_01HQ.../resume \
-H "Authorization: Bearer $SKIPUP_API_KEY"

Only requests with status paused can be resumed. No request body is required.

Retrieves a single meeting request by ID.

ParameterTypeRequiredDescription
idstringYesMeeting request ID (e.g., mr_01HQ...). Passed in the URL path.

API endpoint: GET /api/v1/meeting_requests/:id

Scope required: meeting_requests.read

Terminal window
curl https://api.skipup.ai/api/v1/meeting_requests/mr_01HQ... \
-H "Authorization: Bearer $SKIPUP_API_KEY"

Returns the full meeting request object including status, participants, and timestamps such as booked_at and cancelled_at.

Returns a paginated list of meeting requests in your workspace, sorted by creation date (newest first).

ParameterTypeRequiredDescription
statusstringNoFilter by status: active, paused, booked, or cancelled.
organizer_emailstringNoFilter by organizer email address.
participant_emailstringNoFilter by participant email address.
created_afterstringNoISO 8601 timestamp. Only return requests created on or after this time.
created_beforestringNoISO 8601 timestamp. Only return requests created on or before this time.
limitintegerNoResults per page (1-100). Defaults to 25.
cursorstringNoCursor for the next page of results.

API endpoint: GET /api/v1/meeting_requests

Scope required: meeting_requests.read

Terminal window
curl "https://api.skipup.ai/api/v1/meeting_requests?status=active&limit=10" \
-H "Authorization: Bearer $SKIPUP_API_KEY"

The response includes a meta object with has_more and next_cursor fields for pagination.

Returns a paginated list of active workspace members.

ParameterTypeRequiredDescription
emailstringNoFilter by exact email address.
rolestringNoFilter by role (e.g., member, admin).
limitintegerNoResults per page (1-100). Defaults to 25.
cursorstringNoCursor for the next page of results.

API endpoint: GET /api/v1/workspace_members

Scope required: members.read

Terminal window
curl "https://api.skipup.ai/api/v1/[email protected]" \
-H "Authorization: Bearer $SKIPUP_API_KEY"

Each member object includes id, email, name, role, deactivated_at, and created_at fields.

The SKIPUP_API_KEY environment variable is missing or contains an invalid key.

  1. Verify the variable is set in your agent’s environment
  2. Check that the key starts with sk_live_
  3. Confirm the key is still active in SkipUp Settings > API Keys

”API key missing required scope” (403)

Section titled “”API key missing required scope” (403)”

Your API key doesn’t have the scopes the skill needs. Create a new key with meeting_requests.read, meeting_requests.write, and members.read scopes.

The organizer email must belong to an active member of your SkipUp workspace. Check that:

  1. The email address is spelled correctly
  2. The person has been added to your workspace in Settings > Members
  3. Their membership is active (not deactivated)

”At least one participant email is required” (422)

Section titled “”At least one participant email is required” (422)”

The schedule action requires at least one participant email. Make sure your agent is passing participant emails to the skill.

Validation errors with both participant formats (422)

Section titled “Validation errors with both participant formats (422)”

The API accepts either participant_emails (a flat list of email strings) or participants (rich objects with name and timezone), but not both in the same request. If you see a validation error, check that only one format is being used.

The SkipUp API allows 120 requests per minute per API key. If your agent hits this limit, it should wait and retry with exponential backoff. In typical usage, you won’t hit this limit.