🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Cleaning And Maintenance

by @mchusma

Schedule cleanings, manage maintenance tasks, check availability, and add service professionals with TIDY.

Versionv1.0.0
Downloads482
TERMINAL
clawhub install cleaning-and-maintenance

πŸ“– About This Skill


name: cleaning-and-maintenance description: Schedule cleanings, manage maintenance tasks, check availability, and add service professionals with TIDY. version: 1.0.0 metadata: openclaw: requires: env: - TIDY_API_TOKEN primaryEnv: TIDY_API_TOKEN emoji: "🧹" homepage: https://tidy.com

Cleaning & Maintenance β€” TIDY

Schedule and manage cleaning jobs, create maintenance tasks, check booking availability, and add service professionals through the TIDY API. Built for property managers, Airbnb hosts, and cleaning service coordinators.

Authentication

All requests require a Bearer token.

# Log in
curl -X POST https://public-api.tidy.com/api/v2/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"jane@example.com","password":"secret123"}'

Returns: { "token": "abc123..." }

export TIDY_API_TOKEN="abc123..."

Tokens do not expire. Include Authorization: Bearer $TIDY_API_TOKEN on all requests.


Jobs (Cleaning Bookings)

Jobs represent scheduled cleaning appointments.

Service Types

| Service Type Key | Description | |---|---| | regular_cleaning.one_hour | 1-hour regular cleaning | | regular_cleaning.two_and_a_half_hours | 2.5-hour regular cleaning | | regular_cleaning.four_hours | 4-hour regular cleaning | | deep_cleaning.two_and_a_half_hours | 2.5-hour deep cleaning | | deep_cleaning.four_hours | 4-hour deep cleaning | | turnover_cleaning.two_and_a_half_hours | 2.5-hour turnover cleaning | | turnover_cleaning.four_hours | 4-hour turnover cleaning |

Booking Statuses

scheduled β†’ in_progress β†’ completed or cancelled or failed

Check Availability

Before creating a booking, check available time slots:

curl -s "https://public-api.tidy.com/api/v2/booking-availabilities?address_id=123&service_type_key=regular_cleaning.two_and_a_half_hours" \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Required: address_id, service_type_key.

List all jobs

curl -s https://public-api.tidy.com/api/v2/jobs \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Filter by address

curl -s "https://public-api.tidy.com/api/v2/jobs?address_id=123" \ -H "Authorization: Bearer $TIDY_API_TOKEN"

Filter by status (comma-separated)

curl -s "https://public-api.tidy.com/api/v2/jobs?status=scheduled,in_progress" \ -H "Authorization: Bearer $TIDY_API_TOKEN"

Filter by to-do list

curl -s "https://public-api.tidy.com/api/v2/jobs?to_do_list_id=789" \ -H "Authorization: Bearer $TIDY_API_TOKEN"

Get a single job

curl -s https://public-api.tidy.com/api/v2/jobs/456 \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Response fields: id, address_id, to_do_list_id, status, price, service_type_key, service_type_name, current_start_datetime (date, time), preferred_start_datetime (date, time), start_no_earlier_than (date, time), end_no_later_than (date, time), is_partially_completed, cancelled_by, url, created_at.

Create a job

curl -X POST https://public-api.tidy.com/api/v2/jobs \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "address_id": 123,
    "service_type_key": "regular_cleaning.two_and_a_half_hours",
    "start_no_earlier_than": { "date": "2026-04-10", "time": "09:00" },
    "end_no_later_than": { "date": "2026-04-10", "time": "17:00" },
    "preferred_start_datetime": { "date": "2026-04-10", "time": "10:00" },
    "to_do_list_id": 789
  }'

Required: address_id, service_type_key, start_no_earlier_than (with date and time), end_no_later_than (with date and time).

Optional: preferred_start_datetime (with date, time), to_do_list_id.

The time window (start_no_earlier_than to end_no_later_than) defines when the service provider can arrive. preferred_start_datetime is a soft preference within that window.

Date format: YYYY-MM-DD. Time format: HH:MM (24-hour).

Update a job

curl -X PUT https://public-api.tidy.com/api/v2/jobs/456 \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "to_do_list_id": 790,
    "start_no_earlier_than": { "date": "2026-04-11", "time": "08:00" },
    "end_no_later_than": { "date": "2026-04-11", "time": "14:00" }
  }'

Cancel a job

curl -X POST https://public-api.tidy.com/api/v2/jobs/456/cancel \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Reschedule a job

curl -X POST https://public-api.tidy.com/api/v2/jobs/456/reschedule \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "service_type_key": "regular_cleaning.two_and_a_half_hours",
    "start_no_earlier_than": { "date": "2026-04-15", "time": "09:00" },
    "end_no_later_than": { "date": "2026-04-15", "time": "17:00" },
    "preferred_start_datetime": { "date": "2026-04-15", "time": "11:00" }
  }'

Required: service_type_key, start_no_earlier_than, end_no_later_than.

Optional: preferred_start_datetime, to_do_list_id.


Tasks (Maintenance / Issue Reports)

Tasks represent maintenance issues or repair requests tied to a property.

Task Statuses

reported β†’ in_progress β†’ completed

Task Urgency Levels

low, normal, high, emergency

List tasks

curl -s https://public-api.tidy.com/api/v2/tasks \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Filter by address, status, type, or urgency (comma-separated)

curl -s "https://public-api.tidy.com/api/v2/tasks?address_id=123&urgency=high" \ -H "Authorization: Bearer $TIDY_API_TOKEN"

Filter by concierge assignment

curl -s "https://public-api.tidy.com/api/v2/tasks?assigned_to_concierge=true" \ -H "Authorization: Bearer $TIDY_API_TOKEN"

Get a single task

curl -s https://public-api.tidy.com/api/v2/tasks/789 \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Response fields: id, address_id, title, description, reporter_type, reporter_name, type, status, urgency, due_date, assigned_to_concierge, archived_at, created_at.

Create a task

curl -X POST https://public-api.tidy.com/api/v2/tasks \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "address_id": 123,
    "title": "Broken window in master bedroom",
    "description": "The left window pane is cracked and letting in air. Needs glass replacement.",
    "type": "repair",
    "urgency": "high",
    "due_date": "2026-04-05",
    "assigned_to_concierge": true
  }'

Required: address_id, title, description, type.

Optional: status, urgency, due_date (YYYY-MM-DD), assigned_to_concierge (boolean β€” if true, TIDY will auto-handle).

Update a task

curl -X PUT https://public-api.tidy.com/api/v2/tasks/789 \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "in_progress",
    "urgency": "medium",
    "due_date": "2026-04-12"
  }'

Delete a task

curl -X DELETE https://public-api.tidy.com/api/v2/tasks/789 \
  -H "Authorization: Bearer $TIDY_API_TOKEN"


Service Professionals (Pros)

Add your own cleaning or maintenance professionals to the TIDY platform.

curl -X POST https://public-api.tidy.com/api/v2/pros \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Maria Garcia",
    "email": "maria@example.com",
    "phone": "+1-555-0199",
    "service_types": ["regular_cleaning"]
  }'

Required: name, email.

Optional: phone, service_types (array, default ["regular_cleaning"]).


To-Do Lists

To-do lists are cleaning checklists attached to jobs.

curl -s https://public-api.tidy.com/api/v2/to-do-lists \
  -H "Authorization: Bearer $TIDY_API_TOKEN"

Filter by address

curl -s "https://public-api.tidy.com/api/v2/to-do-lists?address_id=123" \ -H "Authorization: Bearer $TIDY_API_TOKEN"


Natural Language (message-tidy)

For complex or multi-step operations, send a natural language request:

curl -X POST https://public-api.tidy.com/api/v2/message-tidy \
  -H "Authorization: Bearer $TIDY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "Schedule a deep clean at my Beach House for next Tuesday afternoon",
    "context": { "address_id": 123 }
  }'

This is asynchronous. Poll GET /api/v2/message-tidy/{id} every 3–5 seconds until status is completed.

Example requests

  • "Schedule a 2.5 hour deep clean at address 123 for next Tuesday between 9am and 5pm"
  • "Cancel booking 456"
  • "Reschedule my cleaning to Friday"
  • "Create a maintenance task: the dishwasher is leaking at my Beach House"
  • "Show me all scheduled cleanings"
  • "What time slots are available for a 4-hour cleaning at address 123?"

  • CLI Alternative

    Install: brew install tidyapp/tap/tidy-request or npm i -g @tidydotcom/cli.

    tidy-request login
    tidy-request "Schedule a deep clean for next Tuesday" --address-id 123
    tidy-request "Cancel booking 456" --booking-id 456
    tidy-request "Report a broken dishwasher" --address-id 123
    tidy-request "What cleaning slots are available next week?" --address-id 123
    


    Error Handling

    | HTTP Status | Error Type | When | |---|---|---| | 400 | invalid_request_error | Missing or invalid parameters | | 401 | authentication_error | Bad credentials or missing token | | 404 | not_found_error | Resource does not exist | | 500 | internal_error | Server error |