REST API reference

Klook API

10 endpoints for Klook. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/klook
Connects with
Your own Klook account (a traveler account, no partner or supplier access needed)
Integration page
Klook
Klook Endpoints
Endpoint Access Description
search_activities read Tours, tickets and experiences by keyword or destination, with price, rating and cancellation type.
get_activity read Packages with prices, what is included, meeting point and cancellation policy of one activity.
check_availability read Open dates and time slots for a package, with the price per unit (adult, child).
list_activity_reviews read Traveler reviews of an activity with rating, date and text.
list_bookings read Bookings on your account with Booking Reference ID, activity, date and status.
get_booking read One booking with participants, cancellation policy, amend option and voucher link.
get_klookcash_balance read KlookCash on your account with the expiry date of each part.
book_activity write Book a package of an activity for a date. You see the total before anything is paid.
amend_booking write Change the participation date or contact info of a booking that allows Amend booking.
cancel_booking write Cancel a booking and apply for a refund, where it has free cancellation.

POST https://cotlet.dev/api/v1/klook/search_activities

Returns activities that match a keyword or destination, in the order set by sort. A date keeps only activities available that day. Each item has the lowest price, rating and review count, and the cancellation type: free, conditional or none. Use get_activity for packages and details.

Parameters

Parameters: search_activities
NameTypeDescription
query required string Keyword or destination, e.g. "Mount Fuji day tour" or "Bangkok".
date date Only activities available on this date.
sort enum popular, price_low, price_high or rating. Default: popular.
currency string ISO 4217 code, e.g. USD. Default: your account currency.
limit integer 1 to 50. Default: 20.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/search_activities \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"Mount Fuji day tour"}'
Python
result = client.call("klook", "search_activities", {"query":"Mount Fuji day tour"})
Node.js
const result = await cotlet.call('klook', 'search_activities', {"query":"Mount Fuji day tour"});
CLI
cotlet call klook search_activities --data '{"query":"Mount Fuji day tour"}'

Example response

{
  "activities": [
    {
      "activity_id": "41528",
      "title": "Mount Fuji One Day Tour from Tokyo",
      "city": "Tokyo",
      "price_from": {
        "amount": 93.2,
        "currency": "USD"
      },
      "rating": 4.7,
      "reviews": 3120,
      "cancellation": "free"
    },
    {
      "activity_id": "30977",
      "title": "Mt. Fuji and Hakone Day Trip with Lake Cruise",
      "city": "Tokyo",
      "price_from": {
        "amount": 98.5,
        "currency": "USD"
      },
      "rating": 4.6,
      "reviews": 1844,
      "cancellation": "free"
    },
    {
      "activity_id": "52204",
      "title": "Private Mount Fuji Tour with English Driver",
      "city": "Tokyo",
      "price_from": {
        "amount": 112,
        "currency": "USD"
      },
      "rating": 4.8,
      "reviews": 402,
      "cancellation": "none"
    }
  ]
}

POST https://cotlet.dev/api/v1/klook/get_activity

Returns one activity with its packages, each with its own package_id and lowest price. It also returns what is included, the meeting point and the cancellation policy shown on the activity page. Use package_id with check_availability and book_activity.

Parameters

Parameters: get_activity
NameTypeDescription
activity_id required string Activity ID from search_activities.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/get_activity \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activity_id":"activity_8c41d2"}'
Python
result = client.call("klook", "get_activity", {"activity_id":"activity_8c41d2"})
Node.js
const result = await cotlet.call('klook', 'get_activity', {"activity_id":"activity_8c41d2"});
CLI
cotlet call klook get_activity --data '{"activity_id":"activity_8c41d2"}'

Example response

{
  "activity_id": "41528",
  "title": "Mount Fuji One Day Tour from Tokyo",
  "packages": [
    {
      "package_id": "98731",
      "name": "Departure from Shinjuku, English guide",
      "price_from": {
        "adult": 93.2,
        "child": 80
      },
      "currency": "USD"
    },
    {
      "package_id": "98740",
      "name": "Departure from Tokyo Station, English guide",
      "price_from": {
        "adult": 96.5,
        "child": 83
      },
      "currency": "USD"
    }
  ],
  "includes": [
    "Round-trip bus",
    "English-speaking guide",
    "Lunch"
  ],
  "meeting_point": "Shinjuku Station West Exit",
  "cancellation": {
    "type": "free",
    "policy": "Free cancellation up to 24 hours before the start time"
  }
}

POST https://cotlet.dev/api/v1/klook/check_availability

Returns the open dates and time slots of one package in a date range, with the price per unit type. Dates with no slots are left out. Run it before book_activity or amend_booking so you only ask for a slot that exists.

Parameters

Parameters: check_availability
NameTypeDescription
activity_id required string Activity ID from search_activities.
package_id string Package from get_activity. Default: all packages.
from required date First date to check.
to date Last date to check. Default: same as from.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/check_availability \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activity_id":"activity_8c41d2","from":"2026-10-01"}'
Python
result = client.call("klook", "check_availability", {"activity_id":"activity_8c41d2","from":"2026-10-01"})
Node.js
const result = await cotlet.call('klook', 'check_availability', {"activity_id":"activity_8c41d2","from":"2026-10-01"});
CLI
cotlet call klook check_availability --data '{"activity_id":"activity_8c41d2","from":"2026-10-01"}'

Example response

{
  "activity_id": "41528",
  "package_id": "98731",
  "availability": [
    {
      "date": "2026-11-14",
      "slots": [
        "08:00",
        "09:30"
      ],
      "price": {
        "adult": 93.2,
        "child": 80
      },
      "currency": "USD"
    },
    {
      "date": "2026-11-15",
      "slots": [
        "08:00"
      ],
      "price": {
        "adult": 93.2,
        "child": 80
      },
      "currency": "USD"
    }
  ]
}

POST https://cotlet.dev/api/v1/klook/list_activity_reviews

Returns reviews of one activity, newest first by default, each with the rating, date and text. Set sort to rating to see the best rated first. Use it to check what travelers say before you book.

Parameters

Parameters: list_activity_reviews
NameTypeDescription
activity_id required string Activity ID from search_activities.
sort enum recent or rating. Default: recent.
limit integer 1 to 50. Default: 20.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/list_activity_reviews \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activity_id":"activity_8c41d2"}'
Python
result = client.call("klook", "list_activity_reviews", {"activity_id":"activity_8c41d2"})
Node.js
const result = await cotlet.call('klook', 'list_activity_reviews', {"activity_id":"activity_8c41d2"});
CLI
cotlet call klook list_activity_reviews --data '{"activity_id":"activity_8c41d2"}'

Example response

{
  "activity_id": "41528",
  "reviews": [
    {
      "rating": 5,
      "date": "2026-10-02",
      "text": "Clear views of Fuji and a guide who kept to the schedule."
    },
    {
      "rating": 4,
      "date": "2026-09-28",
      "text": "Long day, but the lunch stop was good."
    }
  ],
  "next_cursor": null
}

POST https://cotlet.dev/api/v1/klook/list_bookings

Returns the bookings shown on the Bookings page of your account, with the Booking Reference ID, activity, participation date and status. Filter by upcoming, completed or cancelled. Pass booking_ref to get_booking, amend_booking or cancel_booking.

Parameters

Parameters: list_bookings
NameTypeDescription
status enum upcoming, completed, cancelled or all. Default: upcoming.
limit integer 1 to 100. Default: 20.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/list_bookings \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("klook", "list_bookings")
Node.js
const result = await cotlet.call('klook', 'list_bookings');
CLI
cotlet call klook list_bookings

Example response

{
  "bookings": [
    {
      "booking_ref": "KPR834512",
      "activity": "Mount Fuji One Day Tour from Tokyo",
      "date": "2026-11-14",
      "status": "upcoming"
    },
    {
      "booking_ref": "NJT204518",
      "activity": "Nami Island and Petite France Day Tour from Seoul",
      "date": "2026-11-21",
      "status": "upcoming"
    },
    {
      "booking_ref": "BKK771903",
      "activity": "Bangkok Street Food Evening Tour",
      "date": "2026-12-02",
      "status": "upcoming"
    }
  ]
}

POST https://cotlet.dev/api/v1/klook/get_booking

Returns one booking with its date, time, participants and voucher link. The cancellation policy says whether the booking is free to cancel, conditional or not cancellable, and whether Amend booking is available. Check it before amend_booking or cancel_booking.

Parameters

Parameters: get_booking
NameTypeDescription
booking_ref required string Booking Reference ID from list_bookings, e.g. ABC123456.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/get_booking \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"booking_ref":"booking ref"}'
Python
result = client.call("klook", "get_booking", {"booking_ref":"booking ref"})
Node.js
const result = await cotlet.call('klook', 'get_booking', {"booking_ref":"booking ref"});
CLI
cotlet call klook get_booking --data '{"booking_ref":"booking ref"}'

Example response

{
  "booking_ref": "BKK771903",
  "activity": "Bangkok Street Food Evening Tour",
  "date": "2026-12-02",
  "time": "17:30",
  "status": "upcoming",
  "units": {
    "adult": 2
  },
  "total": {
    "amount": 64,
    "currency": "USD"
  },
  "cancellation": {
    "type": "free",
    "policy": "Free cancellation up to 24 hours before the start time"
  },
  "can_amend": true,
  "voucher_url": "https://www.klook.com/en-US/bookings/"
}

POST https://cotlet.dev/api/v1/klook/get_klookcash_balance

Returns your KlookCash balance and the entries it is made of, each with its expiry date, like the Klookcash page in your profile. Klook lets you use KlookCash only with at least 10 KlookCash, which usable shows. It takes no parameters.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/get_klookcash_balance \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("klook", "get_klookcash_balance")
Node.js
const result = await cotlet.call('klook', 'get_klookcash_balance');
CLI
cotlet call klook get_klookcash_balance

Example response

{
  "klookcash": 1850,
  "usable": true,
  "entries": [
    {
      "amount": 300,
      "expires_on": "2026-11-30"
    },
    {
      "amount": 1550,
      "expires_on": "2027-06-12"
    }
  ]
}

Book activity

write Confirm

POST https://cotlet.dev/api/v1/klook/book_activity

Books one package for a date and time slot through Klook checkout and returns the Booking Reference ID. With use_klookcash set, it ticks KlookCash in the Discount section, which works only with at least 10 KlookCash and not on Klook Passes, e-Gift Cards, Travel Insurance, Stay+ packages or selected events. If checkout asks for extra authentication, the call stops and returns a link for you to finish it. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: book_activity
NameTypeDescription
activity_id required string Activity ID from search_activities.
package_id required string Package from get_activity.
date required date Participation date.
time_slot string Time from check_availability, if the package has slots.
units required object Quantity per unit type, e.g. { "adult": 2, "child": 1 }.
use_klookcash boolean Apply KlookCash at checkout where Klook allows it. Default: false.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/book_activity \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"activity_id":"41528","package_id":"98731","date":"2026-11-14","time_slot":"08:00","units":{"adult":2},"use_klookcash":true}'
Python
result = client.call("klook", "book_activity", {"activity_id":"41528","package_id":"98731","date":"2026-11-14","time_slot":"08:00","units":{"adult":2},"use_klookcash":True})
Node.js
const result = await cotlet.call('klook', 'book_activity', {"activity_id":"41528","package_id":"98731","date":"2026-11-14","time_slot":"08:00","units":{"adult":2},"use_klookcash":true});
CLI
cotlet call klook book_activity --data '{"activity_id":"41528","package_id":"98731","date":"2026-11-14","time_slot":"08:00","units":{"adult":2},"use_klookcash":true}'

Example response

{
  "booking_ref": "KPR834512",
  "status": "confirmed",
  "activity": "Mount Fuji One Day Tour from Tokyo",
  "date": "2026-11-14",
  "time_slot": "08:00",
  "units": {
    "adult": 2
  },
  "subtotal": {
    "amount": 186.4,
    "currency": "USD"
  },
  "klookcash_discount": {
    "amount": 12,
    "currency": "USD"
  },
  "total_paid": {
    "amount": 174.4,
    "currency": "USD"
  }
}

Amend booking

write Confirm

POST https://cotlet.dev/api/v1/klook/amend_booking

Changes the participation date, the traveler contact info or both. It works only on bookings where Klook offers Amend booking: not with a No cancellation or Conditional cancellation policy, and not for vouchers whose codes do not begin with KLK. Klook then emails a booking change confirmation and an updated voucher. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: amend_booking
NameTypeDescription
booking_ref required string Booking Reference ID from list_bookings, e.g. ABC123456.
date date New participation date.
contact object Traveler contact info to change, as the Amend booking form shows it.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/amend_booking \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"booking_ref":"NJT204518","date":"2026-11-22"}'
Python
result = client.call("klook", "amend_booking", {"booking_ref":"NJT204518","date":"2026-11-22"})
Node.js
const result = await cotlet.call('klook', 'amend_booking', {"booking_ref":"NJT204518","date":"2026-11-22"});
CLI
cotlet call klook amend_booking --data '{"booking_ref":"NJT204518","date":"2026-11-22"}'

Example response

{
  "booking_ref": "NJT204518",
  "status": "amended",
  "activity": "Nami Island and Petite France Day Tour from Seoul",
  "old_date": "2026-11-21",
  "date": "2026-11-22"
}

Cancel booking

write Confirm

POST https://cotlet.dev/api/v1/klook/cancel_booking

Applies for a refund on a booking within the free cancellation period stated on the booking, for all units or for the quantity you set. Klook emails a cancellation confirmation, and the previous voucher can no longer be used. For conditional cancellation Klook asks you to contact Klook Customer Support, and the tool stops and says so; with No cancellation there is no refund. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: cancel_booking
NameTypeDescription
booking_ref required string Booking Reference ID from list_bookings, e.g. ABC123456.
quantity integer Units to cancel. Default: all.
reason string Reason for the refund form.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/klook/cancel_booking \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"booking_ref":"BKK771903","quantity":1,"reason":"Change of plans"}'
Python
result = client.call("klook", "cancel_booking", {"booking_ref":"BKK771903","quantity":1,"reason":"Change of plans"})
Node.js
const result = await cotlet.call('klook', 'cancel_booking', {"booking_ref":"BKK771903","quantity":1,"reason":"Change of plans"});
CLI
cotlet call klook cancel_booking --data '{"booking_ref":"BKK771903","quantity":1,"reason":"Change of plans"}'

Example response

{
  "booking_ref": "BKK771903",
  "status": "refund_requested",
  "quantity_cancelled": 2,
  "reason": "Change of plans",
  "refund": {
    "amount": 64,
    "currency": "USD"
  }
}