Free Cleaning & Home Service API

TIDY makes it easy to book cleaning or maintenance pros via our API, then manage or track those jobs. Use TIDY with your existing pros or we can help you find one through our network. The API is for internal use (e.g. property managers) or for end users of your product (e.g. property management software). Most people use it for free!

Thousands of customers including:
Compass Luxury Zeal


Request Bookings With Any Pro

A pro from our network or any pro you add. Define your job request and send to your priority list. Your top priority pro will get the first chance to accept, followed by your next priority and so on.

Customize the Job with To-Do Lists

Define exactly what you want done for any job. Add photos & define what is important. Your pro sees your list when at the property.

Get Job Updates with Webhooks

Use webhooks to get alerts of things like jobs being scheduled, accepted, or completed.

Concierge Support

The TIDY Concierge is available to help you with any needs, regarding the API or with helping set you up with great pros. Let us do the work for you!

Watch an Overview

Watch an 8 minutes of highlights from our March 2021 webinar to get an overview of how to use the API.

A happy rental cleaning customer

“I use TIDY to automatically book turnover cleanings for my 30 rental properties. We have our own property management system, and TIDY automatically gets us the right person in the order we want. It's great.

Kara P.

How to Get API Access

Create an account.
Generate a token.
Start automating booking.

Code Example: Book a Cleaning

Our mission is to give development teams the tools to easily work with home services. Extensive documentation and dedicated developer support make it a pleasure to work with TIDY. Here are examples of how to book a cleaning in a few lines of code:

Curl Example:
curl --location --request POST '' \
--header 'Authorization: Bearer {CUSTOMER_TOKEN}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "address_id": 346858,
  "to_do_list_id": 1324,
  "service_type_key": "regular_cleaning.one_hour",
  "end_no_later_than": {
    "date": "2021-01-25",
    "time": "15:30"
  "start_no_earlier_than": {
    "date": "2021-01-20",
    "time": "15:30"
  "preferred_start_datetime": {
    "date": "2021-01-23",
    "time": "08:00"
Ruby Example:
require "uri"
require "net/http"

url = URI("")

https =, url.port)
https.use_ssl = true

request =
request["Authorization"] = "Bearer {CUSTOMER_TOKEN}"
request["Content-Type"] = "application/json"
request.body = "{\"address_id\": 346858, \"to_do_list_id\": 1324, \"service_type_key\": \"regular_cleaning.one_hour\", \"end_no_later_than\": {   \"date\": \"2021-01-25\",   \"time\": \"15:30\" }, \"start_no_earlier_than\": {   \"date\": \"2021-01-20\",   \"time\": \"15:30\" }, \"preferred_start_datetime\": {   \"date\": \"2021-01-23\",   \"time\": \"08:00\" }}"

response = https.request(request)
puts response.read_body
Python Example:
import http.client

conn = http.client.HTTPSConnection("")
payload = "{\"address_id\": 346858, \"to_do_list_id\": 1324, \"service_type_key\": \"regular_cleaning.one_hour\", \"end_no_later_than\": {   \"date\": \"2021-01-25\",   \"time\": \"15:30\" }, \"start_no_earlier_than\": {   \"date\": \"2021-01-20\",   \"time\": \"15:30\" }, \"preferred_start_datetime\": {   \"date\": \"2021-01-23\",   \"time\": \"08:00\" }}"
headers = {
  'Authorization': 'Bearer {CUSTOMER_TOKEN}',
  'Content-Type': 'application/json'
conn.request("POST", "/api/v1/bookings", payload, headers)
res = conn.getresponse()
data =
PHP Example:
  'follow_redirects' => TRUE
  'Authorization' => 'Bearer {CUSTOMER_TOKEN}',
  'Content-Type' => 'application/json'
$request->setBody('{\n  "address_id": 346858,\n  "to_do_list_id": 1324,\n  "service_type_key": "regular_cleaning.one_hour",\n  "end_no_later_than": {\n    "date": "2021-01-25",\n    "time": "15:30"\n  },\n  "start_no_earlier_than": {\n    "date": "2021-01-20",\n    "time": "15:30"\n  },\n  "preferred_start_datetime": {\n    "date": "2021-01-23",\n    "time": "08:00"\n  }\n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
Javascript Example:
var myHeaders = new Headers();
myHeaders.append("Authorization", "Bearer {CUSTOMER_TOKEN}");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({"address_id":346858,"to_do_list_id":1324,"service_type_key":"regular_cleaning.one_hour","end_no_later_than":{"date":"2021-01-25","time":"15:30"},"start_no_earlier_than":{"date":"2021-01-20","time":"15:30"},"preferred_start_datetime":{"date":"2021-01-23","time":"08:00"}});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'

fetch("", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
More Languages Supported...

Once you create an account, you can contact our developer support team to get support with any application in any language. Our job is to help you!


The TIDY API itself is available for free, but it can be used to book free or paid services at our standard rates.


  • 📋 Create & share stunning digital to-do lists.
  • 🙋 Add & manage your exising pros/vendors.
  • 📲 Easily send job requests to one or many pros.
  • 🚀 Integrate with Airbnb & more for automatic booking.
  • 💻 Use our API & webhooks.

Pay as You Go

  • ⚡ Instantly book a certified Pro from our network, who can be there as soon as today.
  • 😎 Upfront pricing. Just add your address to your account to get a transparent price for any service.
  • ⭐ Used by over 20,000 clients. See reviews.

Pricing Examples:

Example 1: You work with Ana who cleans your home for rental turnovers. You add her to your TIDY account to share your digital to-do list and automatically book her when guests check out. You send her 100 jobs using TIDY. Your cost is $0 (free).

Example 2: Ana leaves for a while and you use TIDY to find you a new pro named Maria. You look up the price for your address and see it is $100 per cleaning for your needs. You send 2 jobs to Maria, who completes them. Your cost is 2 jobs at $100 each totaling $200.

Example 3: Ana comes back, and now you do 10 more jobs, 6 with Ana and 4 with Maria. Your cost is 6 jobs free and 4 jobs at $100 each totaling $400.

Need to talk to us?

Schedule a Developer Support CallOr View the API Reference