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.
Prerequisites
Section titled “Prerequisites”- A SkipUp workspace on a plan with API access
- An OpenClaw-compatible agent (any agent that supports ClawHub skills)
Installation
Section titled “Installation”Install the skill from ClawHub:
npx clawhub@latest install ai-meeting-scheduling1. Create an API key in SkipUp
Section titled “1. Create an API key in SkipUp”- Go to your SkipUp workspace Settings
- Click API Keys in the sidebar
- Click Create API Key
- Name the key (e.g., “OpenClaw Agent”)
- Select these scopes:
meeting_requests.readmeeting_requests.writemembers.read
- Click Create
2. Configure the skill
Section titled “2. Configure the skill”Set the SKIPUP_API_KEY environment variable in your agent’s environment:
export SKIPUP_API_KEY=sk_live_your_key_hereThe skill reads this variable automatically. No other configuration is needed.
What the skill does
Section titled “What the skill does”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.
What happens after a request is created
Section titled “What happens after a request is created”- SkipUp’s AI emails each participant to ask for their availability
- Participants reply to the email with times that work (no app or account needed)
- SkipUp finds a time that works for everyone, books the calendar event, and sends confirmations
The organizer can track progress in their SkipUp dashboard.
Usage examples
Section titled “Usage examples”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.
Available actions
Section titled “Available actions”Schedule meeting
Section titled “Schedule meeting”Creates a new meeting scheduling request.
| Parameter | Type | Required | Description |
|---|---|---|---|
organizer_email | string | Yes | Email of the meeting organizer. Must be a SkipUp workspace member. |
participant_emails | string[] | Yes | Email addresses of participants. At least one required. |
title | string | No | Meeting title. |
purpose | string | No | Why the meeting is needed. |
description | string | No | Free-text instructions for the AI (e.g., tone guidance, CRM notes). |
duration_minutes | integer | No | Desired meeting duration in minutes. |
include_introduction | boolean | No | When true, the AI composes a warm introduction in the outreach email. |
timeframe_start | string | No | ISO 8601 start of the preferred scheduling window. |
timeframe_end | string | No | ISO 8601 end of the preferred scheduling window. |
API endpoint: POST /api/v1/meeting_requests
Scope required: meeting_requests.write
Example API call
Section titled “Example API call”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.
Cancel meeting
Section titled “Cancel meeting”Cancels an active or paused meeting request.
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_request_id | string | Yes | ID of the meeting request to cancel (e.g., mr_01HQ...). |
notify | boolean | No | Whether to send cancellation notifications to participants. Defaults to false. |
API endpoint: POST /api/v1/meeting_requests/:id/cancel
Scope required: meeting_requests.write
Example API call
Section titled “Example API call”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.
Pause meeting
Section titled “Pause meeting”Temporarily pauses an active meeting request. SkipUp stops sending follow-ups and processing messages, but still records any incoming replies. Participants are not notified.
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_request_id | string | Yes | ID of the meeting request to pause (e.g., mr_01HQ...). |
API endpoint: POST /api/v1/meeting_requests/:id/pause
Scope required: meeting_requests.write
Example API call
Section titled “Example API call”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.
Resume meeting
Section titled “Resume meeting”Resumes a paused meeting request. SkipUp picks up scheduling where it left off, including any messages that arrived while paused.
| Parameter | Type | Required | Description |
|---|---|---|---|
meeting_request_id | string | Yes | ID of the meeting request to resume (e.g., mr_01HQ...). |
API endpoint: POST /api/v1/meeting_requests/:id/resume
Scope required: meeting_requests.write
Example API call
Section titled “Example API call”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.
Get meeting request
Section titled “Get meeting request”Retrieves a single meeting request by ID.
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Meeting request ID (e.g., mr_01HQ...). Passed in the URL path. |
API endpoint: GET /api/v1/meeting_requests/:id
Scope required: meeting_requests.read
Example API call
Section titled “Example API call”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.
List meeting requests
Section titled “List meeting requests”Returns a paginated list of meeting requests in your workspace, sorted by creation date (newest first).
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | No | Filter by status: active, paused, booked, or cancelled. |
organizer_email | string | No | Filter by organizer email address. |
participant_email | string | No | Filter by participant email address. |
created_after | string | No | ISO 8601 timestamp. Only return requests created on or after this time. |
created_before | string | No | ISO 8601 timestamp. Only return requests created on or before this time. |
limit | integer | No | Results per page (1-100). Defaults to 25. |
cursor | string | No | Cursor for the next page of results. |
API endpoint: GET /api/v1/meeting_requests
Scope required: meeting_requests.read
Example API call
Section titled “Example API call”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.
List workspace members
Section titled “List workspace members”Returns a paginated list of active workspace members.
| Parameter | Type | Required | Description |
|---|---|---|---|
email | string | No | Filter by exact email address. |
role | string | No | Filter by role (e.g., member, admin). |
limit | integer | No | Results per page (1-100). Defaults to 25. |
cursor | string | No | Cursor for the next page of results. |
API endpoint: GET /api/v1/workspace_members
Scope required: members.read
Example API call
Section titled “Example API call” -H "Authorization: Bearer $SKIPUP_API_KEY"Each member object includes id, email, name, role, deactivated_at, and created_at fields.
Troubleshooting
Section titled “Troubleshooting””Invalid or missing API key” (401)
Section titled “”Invalid or missing API key” (401)”The SKIPUP_API_KEY environment variable is missing or contains an invalid key.
- Verify the variable is set in your agent’s environment
- Check that the key starts with
sk_live_ - 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.
”Invalid organizer” (422)
Section titled “”Invalid organizer” (422)”The organizer email must belong to an active member of your SkipUp workspace. Check that:
- The email address is spelled correctly
- The person has been added to your workspace in Settings > Members
- 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.
Rate limiting (429)
Section titled “Rate limiting (429)”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.
What’s next
Section titled “What’s next”- API Authentication — API key management and scopes
- Meeting Requests API — Full API reference for meeting requests
- Errors and Rate Limits — Error handling and retry guidance