# Houfy Open API — full reference

> Base URL: `https://api.houfy.com` · All requests and responses are JSON.
> Every call requires TWO headers: `Authtoken` (self-serve: Settings & Privacy → API access token)
> and `Authkey` (issued privately by Houfy — email info@houfy.com). Unauthorized calls receive `401`.
> Rate limit: 60 requests per minute per API key — spread bulk syncs and prefer webhooks over polling.

Machine-readable spec: https://docs.houfy.com/json/swagger3.yaml · Postman: https://docs.houfy.com/postman/houfy-openapi.postman_collection.json

## Webhooks

Notifications object types  1.listing.listingData 2.listing.bedrooms 3.listing.location 4.listing.locationViews 5.listing.images 6.listing.amenities 7.listing.suitability 8.listing.activities 9.listing.policies 10.pricing.pricing 11.pricing.petfee 12.pricing.discounts 13.pricing.taxes 14.pricing.deposite 15.pricing.reservation_deposit 16.pricing.fees 17.rates 18.availability 19.inquiry.new.{id} 20.msg.new.{id} 21.req.ch.{id}  Reservation changes will be notified with log_type = req.ch and log objects as below: Accepted reservation with the payment - req.acc.{id} Declined reservation with the payment - req.dec.{id} Cancelled reservation - req.can.{id} Marked as confirmed reservation - req.mark.{id} Reservation changed - req.changed.{id} Review posted for the reservation - review.new.{id}
On change of any data on Houfy platform, callback urls will be notified for the changes Notification will be sent to callback url which user enters in his account settings throught GET request Reservation related notifcations are instant. Other notifications will be sent out with 10 minutes interval. Notifcations will be one time for those changes during that interval.  1.notification_idNotification id 2.listing_idHoufy listing id 3.log_objectstring consisting of log objects separated by '-' 4.unixtimestampUnix timestamp of last updated datetime

## Listing

Listing details

### Get listing details by listing id

**Endpoint:** `GET /listings/getlistingdetails/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Get listing details by listing id (required)

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `id` | string | Listing id | `201` |
| `listingData` | object | Listing details | `` |
| `listingData.lodgingType` | string (Vacation Rental\|Multi-room Listing) |  | `Vacation Rental` |
| `listingData.propertyType` | string (Condominium\|Vacation home\|Studio\|Apartment\|Townhouse\|Loft\|Bungalow\|Villa\|Estate/Castle\|Chalet\|Cottage\|Cabin\|Barn/Farmhouse\|Boat/Yacht\|Houseboat\|Camper/RV\|Other\|Hotel\|B&B\|Hostel\|Motel\|Inn\|Condo Hotel\|Resort\|Campground\|Riad) |  | `Condominium` |
| `listingData.listingName` | string | Listing name or title | `Cute cottage` |
| `listingData.headline` | string | Headline or catch line about the listing | `Have you ever stayed in a 100 year old cottage right on main street Breckenridge? BOOK DIRECT on Houfy.com and save on service fees` |
| `listingData.summary` | string | Description about the listing | `` |
| `listingData.guests` | Number | Maximum number of guests | `2` |
| `listingData.bedrooms` | Number | Number of bedrooms | `2` |
| `listingData.bathrooms` | Number | Number of bathrooms | `2` |
| `listingData.area` | Number | Area of the listing | `1000` |
| `listingData.areaUnit` | string (Sqft\|Sqmt) | Area unit of the listing | `Sqft` |
| `listingData.listed_by` | string (Owner\|Manager) | Listed by | `Owner` |
| `listingData.aboutowner` | string | Description of owner/manager | `` |
| `bedrooms` | array | Listing bedrooms | `` |
| `bedrooms[].bedroomid` | Number | Bedroom id or null to insert new bedroom | `` |
| `bedrooms[].bedroomname` | String | Bedroom name | `Master bedroom` |
| `bedrooms[].bedroomcomment` | String | Bedroom comment | `Master bedroom` |
| `bedrooms[].beds` | array | beds | `` |
| `bedrooms[].beds[].bed_id` | number | Bed id or null to insert new bed | `` |
| `bedrooms[].beds[].bedtype` | string (King\|Queen\|Double\|Single/Twin\|Sofa bed\|Bunk bed\|Rollaway bed\|Crib) | Bed type | `King` |
| `bedrooms[].beds[].sleeps` | String | Number of people sleeps on the bed | `2` |
| `location` | object |  | `` |
| `location.latitude` | Double | Latitude | `39.48498306513508` |
| `location.longitude` | Double | Longitude | `-106.04642089999999` |
| `location.ex_location` | string (Y\|N) | Exact location shown | `Y` |
| `location.city` | string | City | `Breckenridge, CO, United States` |
| `location.address` | string | Address | `303 North Main Street` |
| `location.floornr` | string | Floor number | `1` |
| `location.unitnr` | string | Unit number | `103` |
| `location.gettingaround` | string | Getting around | `` |
| `locationViews` | object |  | `` |
| `locationViews.beachfront` | string (Y\|N) | Beachfront | `Y` |
| `locationViews.viewbeach` | string (Y\|N) | Beach view | `Y` |
| `locationViews.oceanfront` | string (Y\|N) | Ocean front | `Y` |
| `locationViews.viewocean` | string (Y\|N) | Ocean view | `Y` |
| `locationViews.bayfront` | string (Y\|N) | Bay front | `Y` |
| `locationViews.bay_view` | string (Y\|N) | Bay view | `Y` |
| `locationViews.riverfront` | string (Y\|N) | River front | `Y` |
| `locationViews.viewriver` | string (Y\|N) | River view | `Y` |
| `locationViews.lakefront` | string (Y\|N) | Lake front | `Y` |
| `locationViews.viewlake` | string (Y\|N) | Lake view | `Y` |
| `locationViews.waterfront` | string (Y\|N) | Water front | `Y` |
| `locationViews.water_view` | string (Y\|N) | Water view | `Y` |
| `locationViews.golffront` | string (Y\|N) | Golf Course front | `Y` |
| `locationViews.viewgolfcourse` | string (Y\|N) | Golf Course | `Y` |
| `locationViews.mountainfront` | string (Y\|N) | Mountain | `Y` |
| `locationViews.viewmountain` | string (Y\|N) | Mountain view | `Y` |
| `locationViews.viewcity` | string (Y\|N) | City | `Y` |
| `locationViews.viewvillage` | string (Y\|N) | Village | `Y` |
| `locationViews.viewmonument` | string (Y\|N) | Landmark/Monument | `Y` |
| `locationViews.viewpark` | string (Y\|N) | Park | `Y` |
| `locationViews.viewwoods` | string (Y\|N) | Woods | `Y` |
| `locationViews.view_garden` | string (Y\|N) | Garden | `Y` |
| `locationViews.skislopes` | string (Y\|N) | Ski Slopes | `Y` |
| `locationViews.skiinout` | string (Y\|N) | Ski in/out | `Y` |
| `images` | array | Listing photos | `` |
| `images[].filename` | string |  | `50fe40ddcf626770027a13ea23f0b018.jpg` |
| `images[].original_url` | string |  | `https://www.houfy.com/assets/images/properties/50fe40ddcf626770027a13ea23f0b018.jpg` |
| `images[].caption` | string |  | `Willoughby Cottage in winter` |
| `amenities` | object |  | `` |
| `amenities.washing_machine` | string (Y\|N) | Washing Machine | `Y` |
| `amenities.cloth_dryer` | string (Y\|N) | Cloth Dryer | `Y` |
| `amenities.linens` | string (Y\|N) | Linens Provided | `Y` |
| `amenities.heating` | string (Y\|N) | Heating | `Y` |
| `amenities.airconditioner` | string (Y\|N) | Air Conditioner | `Y` |
| `amenities.doorman` | string (Y\|N) | Door Man | `Y` |
| `amenities.intercom` | string (Y\|N) | intercom | `Y` |
| `amenities.gameroom` | string (Y\|N) | Game room | `Y` |
| `amenities.house_safe` | string (Y\|N) | House safe | `Y` |
| `amenities.ironboard` | string (Y\|N) | Iron Board | `Y` |
| `amenities.hairdryer` | string (Y\|N) | Hair Dryer | `Y` |
| `amenities.towels` | string (Y\|N) | Towels Provided | `Y` |
| `amenities.ceilingfan` | string (Y\|N) | Ceiling Fan | `Y` |
| `amenities.gasfireplace` | string (Y\|N) | Gas Fireplace | `Y` |
| `amenities.elevator` | string (Y\|N) | Elevator | `Y` |
| `amenities.fitnessroom` | string (Y\|N) | Fitness room | `Y` |
| `amenities.pooltable` | string (Y\|N) | Pool Table | `Y` |
| `amenities.ev_charging` | string (Y\|N) | Electric Vehicle charging | `Y` |
| `amenities.fullkitchen` | string (Y\|N) | Full Kitchen | `Y` |
| `amenities.stove` | string (Y\|N) | Stove | `Y` |
| `amenities.fridge` | string (Y\|N) | Fridge | `Y` |
| `amenities.dishwasher` | string (Y\|N) | Dishwasher | `Y` |
| `amenities.microwave` | string (Y\|N) | Microwave | `Y` |
| `amenities.coffeemaker` | string (Y\|N) | Coffee maker | `Y` |
| `amenities.kitchenette` | string (Y\|N) | Kitchenette | `Y` |
| `amenities.oven` | string (Y\|N) | Oven | `Y` |
| `amenities.toaster` | string (Y\|N) | Toaster | `Y` |
| `amenities.cookingutensils` | string (Y\|N) | Cooking Utensils | `Y` |
| `amenities.icemaker` | string (Y\|N) | Ice Maker | `Y` |
| `amenities.waterpurifier` | string (Y\|N) | Water Purifier | `Y` |
| `amenities.terrace` | string (Y\|N) | Terrace | `Y` |
| `amenities.patio` | string (Y\|N) | Patio | `Y` |
| `amenities.gasgrill` | string (Y\|N) | Gas grill | `Y` |
| `amenities.privatepool` | string (Y\|N) | Private pool | `Y` |
| `amenities.balcony` | string (Y\|N) | Balcony | `Y` |
| `amenities.hot_tub` | string (Y\|N) | Hot Tub | `Y` |
| `amenities.charcoalgrill` | string (Y\|N) | Charcoal grill | `Y` |
| `amenities.private_garden` | string (Y\|N) | Private garden | `Y` |
| `amenities.internet` | string (Y\|N) | Internet | `Y` |
| `amenities.cabletv` | string (Y\|N) | Cable tv | `Y` |
| `amenities.dvdplayer` | string (Y\|N) | Dvd player | `Y` |
| `amenities.iphonedock` | string (Y\|N) | iphone dock | `Y` |
| `amenities.security_cameras` | string (Y\|N) | Security cameras | `Y` |
| `amenities.laptopfriendly` | string (Y\|N) | laptop friendly | `Y` |
| `amenities.satelitetv` | string (Y\|N) | Satelite tv | `Y` |
| `amenities.gameconsole` | string (Y\|N) | Game console | `Y` |
| `amenities.alarm` | string (Y\|N) | Alarm | `Y` |
| `amenities.smokedetector` | string (Y\|N) | Smoke detector | `Y` |
| `amenities.firstaidkit` | string (Y\|N) | First aid kit | `Y` |
| `amenities.codetector` | string (Y\|N) | Carbon Monoxide Detector | `Y` |
| `amenities.fireextinguisher` | string (Y\|N) | Fire Extinguisher | `Y` |
| `amenities.sharedpool` | string (Y\|N) | Shared pool | `Y` |
| `amenities.sharefitnessroom` | string (Y\|N) | Shared Gym | `Y` |
| `amenities.sharedhottub` | string (Y\|N) | Shared Hot tub | `Y` |
| `amenities.sharedtennis` | string (Y\|N) | Tennis Court | `Y` |
| `amenities.supplies` | string | What owner/manager supply text | `` |
| `amenities.kitchentext` | string | Additional text about kitchen amenities | `` |
| `amenities.outdoortext` | string | Additional text about outdoor amenities | `` |
| `amenities.techtext` | string | Additional text about technology amenities | `` |
| `amenities.safetytext` | string | Additional text about safety amenities | `` |
| `suitability` | object |  | `` |
| `suitability.allow_infants` | string (Y\|N) | Are infants allowed? | `Y` |
| `suitability.allow_infants_text` | string | Allow infants text | `` |
| `suitability.children_friendly` | string (Y\|N) | Is your place suitable for small children? Do you have any pack and play cribs/play areas? | `Y` |
| `suitability.children_friendly_text` | string | Children friendly text | `` |
| `suitability.events_allowed` | string (Y\|N) | Are events or parties allowed? | `Y` |
| `suitability.events_allowed_text` | string | Events allowed text | `` |
| `suitability.smoking_allowed` | string (Y\|N) | Is smoking allowed? | `N` |
| `suitability.smoking_allowed_text` | string | Smoking allowed text | `Strictly non-smoking` |
| `suitability.wheelchair_accessible` | string (Y\|N) | Is your place suitable for guests with mobility needs? | `Y` |
| `suitability.wheelchair_accessible_text` | string | Wheelchair accessible text | `` |
| `suitability.parking` | string (Y\|N) | Is parking avilable at your place? | `Y` |
| `suitability.parking_text` | string | Parking text | `` |
| `activities` | object |  | `` |
| `activities.scuba_diving` | string (Y\|N) | Scuba diving or snorkeling | `Y` |
| `activities.fishing_charters` | string (Y\|N) | Fishing Charters | `Y` |
| `activities.surfing` | string (Y\|N) | Surfing | `Y` |
| `activities.kitesurf` | string (Y\|N) | Kitesurf | `Y` |
| `activities.water_skiing` | string (Y\|N) | Water skiing | `Y` |
| `activities.jet_skiing` | string (Y\|N) | Jet skiing | `Y` |
| `activities.rafting` | string (Y\|N) | Rafting | `Y` |
| `activities.beach_volleyball` | string (Y\|N) | Beach Volleyball | `Y` |
| `activities.deep_sea_fishing` | string (Y\|N) | Deepsea fishing | `Y` |
| `activities.pier_fishing` | string (Y\|N) | Pier fishing | `Y` |
| `activities.wind_surfing` | string (Y\|N) | Wind surfing | `Y` |
| `activities.sailing` | string (Y\|N) | Sailing | `Y` |
| `activities.parasailing` | string (Y\|N) | Parasailing | `Y` |
| `activities.water_tubing` | string (Y\|N) | Water tubing | `Y` |
| `activities.kayaking` | string (Y\|N) | Kayaking | `Y` |
| `activities.sup` | string (Y\|N) | Stand up paddle board(SUP) | `Y` |
| `activities.cross_country_skiing` | string (Y\|N) | Cross country skiing | `Y` |
| `activities.snowboarding` | string (Y\|N) | Snowboarding | `Y` |
| `activities.ice_skating` | string (Y\|N) | Ice skating | `Y` |
| `activities.skiing` | string (Y\|N) | Skiing | `Y` |
| `activities.snowmobiling` | string (Y\|N) | Snowmobiling | `Y` |
| `activities.sledding` | string (Y\|N) | Sledding | `Y` |
| `activities.mountain_biking` | string (Y\|N) | Mountain biking | `Y` |
| `activities.mountain_climbing` | string (Y\|N) | Mountain climbing | `Y` |
| `activities.whitewater_rafting` | string (Y\|N) | Whitewater rafting | `Y` |
| `activities.hiking` | string (Y\|N) | Hiking | `Y` |
| `activities.rock_climbing` | string (Y\|N) | Rock climbing | `Y` |
| `activities.paragliding` | string (Y\|N) | Paragliding | `Y` |
| `activities.golf` | string (Y\|N) | Golf | `Y` |
| `activities.racquetball` | string (Y\|N) | Racquet ball | `Y` |
| `activities.cycling` | string (Y\|N) | Cycling | `Y` |
| `activities.fly_fishing` | string (Y\|N) | Fly fishing | `Y` |
| `activities.basketball_court` | string (Y\|N) | Basketball | `Y` |
| `activities.hot_air_ballooning` | string (Y\|N) | Hot air ballooning | `Y` |
| `activities.horseback_riding` | string (Y\|N) | Horseback riding | `Y` |
| `activities.nature_viewing` | string (Y\|N) | Nature Viewing | `Y` |
| `activities.pickleball` | string (Y\|N) | Pickleball | `Y` |
| `activities.volleyball_court` | string (Y\|N) | Volleyball Court | `Y` |
| `activities.miniature_golf` | string (Y\|N) | Miniature Golf | `Y` |
| `activities.tennis` | string (Y\|N) | tennis | `Y` |
| `activities.swimming` | string (Y\|N) | swimming | `Y` |
| `activities.fishing` | string (Y\|N) | fishing | `Y` |
| `activities.hunting` | string (Y\|N) | fishing | `Y` |
| `activities.roller_blading` | string (Y\|N) | Roller blading | `Y` |
| `activities.walking` | string (Y\|N) | Walking | `Y` |
| `activities.bird_watching` | string (Y\|N) | Bird watching | `Y` |
| `activities.ping_pong_table` | string (Y\|N) | Ping Pong Table | `Y` |
| `policies` | object |  | `` |
| `policies.houserules` | string | House rules | `` |
| `policies.minage` | string | Minimum age for the renter | `18` |
| `policies.minagelimit` | string | Additional information about minimum age for the renter | `18` |
| `policies.checkin_from` | string (Flexible\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM\|12AM (midnight)\|1AM(next day)) | Check in time from | `2PM` |
| `policies.checkin_to` | string (Flexible\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM\|12AM (midnight)\|1AM(next day)\|2AM(next day)) | Check in time upto | `Flexible` |
| `policies.checkout` | string (Flexible\|12AM (midnight)\|1AM\|2AM\|3AM\|4AM\|5AM\|6AM\|7AM\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM) | Check out time | `10AM` |
| `policies.checkintext` | string | Additional check-in information | `` |
| `policies.payment_policy` | string | Payment policy text | `` |
| `policies.cancellation_policy` | string | Cancellation policy | `` |
| `policies.notes` | string | Notes | `` |
| `policies.rental_agreement` | object | Rental agreement | `` |
| `policies.rental_agreement.url` | string | Url of the rental agreement | `` |
| `policies.door_lock_code` | string | Door lock code | `1234` |
| `hostinfo` | object |  | `` |
| `hostinfo.user_id` | number | User unique id | `` |
| `hostinfo.first_name` | string | First name | `` |
| `hostinfo.last_name` | string | First name | `` |
| `hostinfo.profile_pic` | string | First name | `` |
| `hostinfo.contact_email` | string | Contact email | `` |
| `hostinfo.languages` | array | List of languages | `` |
| `hostinfo.phone` | object | Phone number | `` |
| `hostinfo.phone.countrycode` | number | country code | `` |
| `hostinfo.phone.phoneno` | number | phone number | `` |
| `booking_cutoff_months` | number | Booking cutoff months from 1 to 24. Pass empty string("") to remove. | `12` |
| `msg` | string | Error message | `Invalid listing id` |

### Create a new listing

**Endpoint:** `POST /listings/create_listing`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `listingData` | object | no | Listing details | `` |
| `listingData.lodgingType` | string (Vacation Rental\|Multi-room Listing) | yes |  | `Vacation Rental` |
| `listingData.roomType` | string (Entire Place\|Private Room\|Shared Room) | no |  | `Entire Place` |
| `listingData.propertyType` | string (Condominium\|Vacation home\|Studio\|Apartment\|Townhouse\|Loft\|Bungalow\|Villa\|Estate/Castle\|Chalet\|Cottage\|Cabin\|Barn/Farmhouse\|Boat/Yacht\|Houseboat\|Camper/RV\|Other\|Hotel\|B&B\|Hostel\|Motel\|Inn\|Condo Hotel\|Resort\|Campground\|Riad) | yes |  | `Condominium` |
| `listingData.listingName` | string | yes | Listing name or title | `Cute cottage` |
| `listingData.headline` | string | yes | Headline or catch line about the listing | `Have you ever stayed in a 100 year old cottage right on main street Breckenridge? BOOK DIRECT on Houfy.com and save on service fees` |
| `listingData.summary` | string | yes | Description about the listing | `` |
| `listingData.guests` | Number | yes | Maximum number of guests | `2` |
| `listingData.bedrooms` | Number | yes | Number of bedrooms | `2` |
| `listingData.bathrooms` | Number | yes | Number of bathrooms | `2` |
| `listingData.area` | Number | no | Area of the listing | `1000` |
| `listingData.areaUnit` | string (Sqft\|Sqmt) | no | Area unit of the listing | `Sqft` |
| `listingData.listed_by` | string (Owner\|Manager) | yes | Listed by | `Owner` |
| `listingData.aboutowner` | string | no | Description of owner/manager | `` |
| `bedrooms` | array | no | Listing bedrooms | `` |
| `bedrooms[].bedroomid` | Number | no | Bedroom id or null to insert new bedroom | `` |
| `bedrooms[].bedroomname` | String | no | Bedroom name | `Master bedroom` |
| `bedrooms[].bedroomcomment` | String | no | Bedroom comment | `Master bedroom` |
| `bedrooms[].beds` | array | no | beds | `` |
| `bedrooms[].beds[].bed_id` | number | no | Bed id or null to insert new bed | `` |
| `bedrooms[].beds[].bedtype` | string (King\|Queen\|Double\|Single/Twin\|Sofa bed\|Bunk bed\|Rollaway bed\|Crib) | no | Bed type | `King` |
| `bedrooms[].beds[].sleeps` | String | no | Number of people sleeps on the bed | `2` |
| `location` | object | no |  | `` |
| `location.latitude` | Double | yes | Latitude | `39.48498306513508` |
| `location.longitude` | Double | yes | Longitude | `-106.04642089999999` |
| `location.ex_location` | string (Y\|N) | yes | Exact location shown | `Y` |
| `location.city` | string | yes | City name for ex. Breckenridge | `Breckenridge, CO, United States` |
| `location.region` | string | no | region or state name for ex.Colorado | `Colorado` |
| `location.country` | string | yes | country name for ex.United States | `United States` |
| `location.address` | string | no | Address | `303 North Main Street` |
| `location.floornr` | string | no | Floor number | `1` |
| `location.unitnr` | string | no | Unit number | `103` |
| `location.gettingaround` | string | no | Getting around | `` |
| `locationViews` | object | no |  | `` |
| `locationViews.beachfront` | string (Y\|N) | no | Beachfront | `Y` |
| `locationViews.viewbeach` | string (Y\|N) | no | Beach view | `Y` |
| `locationViews.oceanfront` | string (Y\|N) | no | Ocean front | `Y` |
| `locationViews.viewocean` | string (Y\|N) | no | Ocean view | `Y` |
| `locationViews.bayfront` | string (Y\|N) | no | Bay front | `Y` |
| `locationViews.bay_view` | string (Y\|N) | no | Bay view | `Y` |
| `locationViews.riverfront` | string (Y\|N) | no | River front | `Y` |
| `locationViews.viewriver` | string (Y\|N) | no | River view | `Y` |
| `locationViews.lakefront` | string (Y\|N) | no | Lake front | `Y` |
| `locationViews.viewlake` | string (Y\|N) | no | Lake view | `Y` |
| `locationViews.waterfront` | string (Y\|N) | no | Water front | `Y` |
| `locationViews.water_view` | string (Y\|N) | no | Water view | `Y` |
| `locationViews.golffront` | string (Y\|N) | no | Golf Course front | `Y` |
| `locationViews.viewgolfcourse` | string (Y\|N) | no | Golf Course | `Y` |
| `locationViews.mountainfront` | string (Y\|N) | no | Mountain | `Y` |
| `locationViews.viewmountain` | string (Y\|N) | no | Mountain view | `Y` |
| `locationViews.viewcity` | string (Y\|N) | no | City | `Y` |
| `locationViews.viewvillage` | string (Y\|N) | no | Village | `Y` |
| `locationViews.viewmonument` | string (Y\|N) | no | Landmark/Monument | `Y` |
| `locationViews.viewpark` | string (Y\|N) | no | Park | `Y` |
| `locationViews.viewwoods` | string (Y\|N) | no | Woods | `Y` |
| `locationViews.view_garden` | string (Y\|N) | no | Garden | `Y` |
| `locationViews.skislopes` | string (Y\|N) | no | Ski Slopes | `Y` |
| `locationViews.skiinout` | string (Y\|N) | no | Ski in/out | `Y` |
| `amenities` | object | no |  | `` |
| `amenities.washing_machine` | string (Y\|N) | no | Washing Machine | `Y` |
| `amenities.cloth_dryer` | string (Y\|N) | no | Cloth Dryer | `Y` |
| `amenities.linens` | string (Y\|N) | no | Linens Provided | `Y` |
| `amenities.heating` | string (Y\|N) | no | Heating | `Y` |
| `amenities.airconditioner` | string (Y\|N) | no | Air Conditioner | `Y` |
| `amenities.doorman` | string (Y\|N) | no | Door Man | `Y` |
| `amenities.intercom` | string (Y\|N) | no | intercom | `Y` |
| `amenities.gameroom` | string (Y\|N) | no | Game room | `Y` |
| `amenities.house_safe` | string (Y\|N) | no | House safe | `Y` |
| `amenities.ironboard` | string (Y\|N) | no | Iron Board | `Y` |
| `amenities.hairdryer` | string (Y\|N) | no | Hair Dryer | `Y` |
| `amenities.towels` | string (Y\|N) | no | Towels Provided | `Y` |
| `amenities.ceilingfan` | string (Y\|N) | no | Ceiling Fan | `Y` |
| `amenities.gasfireplace` | string (Y\|N) | no | Gas Fireplace | `Y` |
| `amenities.elevator` | string (Y\|N) | no | Elevator | `Y` |
| `amenities.fitnessroom` | string (Y\|N) | no | Fitness room | `Y` |
| `amenities.pooltable` | string (Y\|N) | no | Pool Table | `Y` |
| `amenities.ev_charging` | string (Y\|N) | no | Electric Vehicle charging | `Y` |
| `amenities.fullkitchen` | string (Y\|N) | no | Full Kitchen | `Y` |
| `amenities.stove` | string (Y\|N) | no | Stove | `Y` |
| `amenities.fridge` | string (Y\|N) | no | Fridge | `Y` |
| `amenities.dishwasher` | string (Y\|N) | no | Dishwasher | `Y` |
| `amenities.microwave` | string (Y\|N) | no | Microwave | `Y` |
| `amenities.coffeemaker` | string (Y\|N) | no | Coffee maker | `Y` |
| `amenities.kitchenette` | string (Y\|N) | no | Kitchenette | `Y` |
| `amenities.oven` | string (Y\|N) | no | Oven | `Y` |
| `amenities.toaster` | string (Y\|N) | no | Toaster | `Y` |
| `amenities.cookingutensils` | string (Y\|N) | no | Cooking Utensils | `Y` |
| `amenities.icemaker` | string (Y\|N) | no | Ice Maker | `Y` |
| `amenities.waterpurifier` | string (Y\|N) | no | Water Purifier | `Y` |
| `amenities.terrace` | string (Y\|N) | no | Terrace | `Y` |
| `amenities.patio` | string (Y\|N) | no | Patio | `Y` |
| `amenities.gasgrill` | string (Y\|N) | no | Gas grill | `Y` |
| `amenities.privatepool` | string (Y\|N) | no | Private pool | `Y` |
| `amenities.balcony` | string (Y\|N) | no | Balcony | `Y` |
| `amenities.hot_tub` | string (Y\|N) | no | Hot Tub | `Y` |
| `amenities.charcoalgrill` | string (Y\|N) | no | Charcoal grill | `Y` |
| `amenities.private_garden` | string (Y\|N) | no | Private garden | `Y` |
| `amenities.internet` | string (Y\|N) | no | Internet | `Y` |
| `amenities.cabletv` | string (Y\|N) | no | Cable tv | `Y` |
| `amenities.dvdplayer` | string (Y\|N) | no | Dvd player | `Y` |
| `amenities.iphonedock` | string (Y\|N) | no | iphone dock | `Y` |
| `amenities.security_cameras` | string (Y\|N) | no | Security cameras | `Y` |
| `amenities.laptopfriendly` | string (Y\|N) | no | laptop friendly | `Y` |
| `amenities.satelitetv` | string (Y\|N) | no | Satelite tv | `Y` |
| `amenities.gameconsole` | string (Y\|N) | no | Game console | `Y` |
| `amenities.alarm` | string (Y\|N) | no | Alarm | `Y` |
| `amenities.smokedetector` | string (Y\|N) | no | Smoke detector | `Y` |
| `amenities.firstaidkit` | string (Y\|N) | no | First aid kit | `Y` |
| `amenities.codetector` | string (Y\|N) | no | Carbon Monoxide Detector | `Y` |
| `amenities.fireextinguisher` | string (Y\|N) | no | Fire Extinguisher | `Y` |
| `amenities.sharedpool` | string (Y\|N) | no | Shared pool | `Y` |
| `amenities.sharefitnessroom` | string (Y\|N) | no | Shared Gym | `Y` |
| `amenities.sharedhottub` | string (Y\|N) | no | Shared Hot tub | `Y` |
| `amenities.sharedtennis` | string (Y\|N) | no | Tennis Court | `Y` |
| `amenities.supplies` | string | no | What owner/manager supply text | `` |
| `amenities.kitchentext` | string | no | Additional text about kitchen amenities | `` |
| `amenities.outdoortext` | string | no | Additional text about outdoor amenities | `` |
| `amenities.techtext` | string | no | Additional text about technology amenities | `` |
| `amenities.safetytext` | string | no | Additional text about safety amenities | `` |
| `suitability` | object | no |  | `` |
| `suitability.allow_infants` | string (Y\|N) | no | Are infants allowed? | `Y` |
| `suitability.allow_infants_text` | string | no | Allow infants text | `` |
| `suitability.children_friendly` | string (Y\|N) | no | Is your place suitable for small children? Do you have any pack and play cribs/play areas? | `Y` |
| `suitability.children_friendly_text` | string | no | Children friendly text | `` |
| `suitability.events_allowed` | string (Y\|N) | no | Are events or parties allowed? | `Y` |
| `suitability.events_allowed_text` | string | no | Events allowed text | `` |
| `suitability.smoking_allowed` | string (Y\|N) | no | Is smoking allowed? | `N` |
| `suitability.smoking_allowed_text` | string | no | Smoking allowed text | `Strictly non-smoking` |
| `suitability.wheelchair_accessible` | string (Y\|N) | no | Is your place suitable for guests with mobility needs? | `Y` |
| `suitability.wheelchair_accessible_text` | string | no | Wheelchair accessible text | `` |
| `suitability.parking` | string (Y\|N) | no | Is parking avilable at your place? | `Y` |
| `suitability.parking_text` | string | no | Parking text | `` |
| `activities` | object | no |  | `` |
| `activities.scuba_diving` | string (Y\|N) | no | Scuba diving or snorkeling | `Y` |
| `activities.fishing_charters` | string (Y\|N) | no | Fishing Charters | `Y` |
| `activities.surfing` | string (Y\|N) | no | Surfing | `Y` |
| `activities.kitesurf` | string (Y\|N) | no | Kitesurf | `Y` |
| `activities.water_skiing` | string (Y\|N) | no | Water skiing | `Y` |
| `activities.jet_skiing` | string (Y\|N) | no | Jet skiing | `Y` |
| `activities.rafting` | string (Y\|N) | no | Rafting | `Y` |
| `activities.beach_volleyball` | string (Y\|N) | no | Beach Volleyball | `Y` |
| `activities.deep_sea_fishing` | string (Y\|N) | no | Deepsea fishing | `Y` |
| `activities.pier_fishing` | string (Y\|N) | no | Pier fishing | `Y` |
| `activities.wind_surfing` | string (Y\|N) | no | Wind surfing | `Y` |
| `activities.sailing` | string (Y\|N) | no | Sailing | `Y` |
| `activities.parasailing` | string (Y\|N) | no | Parasailing | `Y` |
| `activities.water_tubing` | string (Y\|N) | no | Water tubing | `Y` |
| `activities.kayaking` | string (Y\|N) | no | Kayaking | `Y` |
| `activities.sup` | string (Y\|N) | no | Stand up paddle board(SUP) | `Y` |
| `activities.cross_country_skiing` | string (Y\|N) | no | Cross country skiing | `Y` |
| `activities.snowboarding` | string (Y\|N) | no | Snowboarding | `Y` |
| `activities.ice_skating` | string (Y\|N) | no | Ice skating | `Y` |
| `activities.skiing` | string (Y\|N) | no | Skiing | `Y` |
| `activities.snowmobiling` | string (Y\|N) | no | Snowmobiling | `Y` |
| `activities.sledding` | string (Y\|N) | no | Sledding | `Y` |
| `activities.mountain_biking` | string (Y\|N) | no | Mountain biking | `Y` |
| `activities.mountain_climbing` | string (Y\|N) | no | Mountain climbing | `Y` |
| `activities.whitewater_rafting` | string (Y\|N) | no | Whitewater rafting | `Y` |
| `activities.hiking` | string (Y\|N) | no | Hiking | `Y` |
| `activities.rock_climbing` | string (Y\|N) | no | Rock climbing | `Y` |
| `activities.paragliding` | string (Y\|N) | no | Paragliding | `Y` |
| `activities.golf` | string (Y\|N) | no | Golf | `Y` |
| `activities.racquetball` | string (Y\|N) | no | Racquet ball | `Y` |
| `activities.cycling` | string (Y\|N) | no | Cycling | `Y` |
| `activities.fly_fishing` | string (Y\|N) | no | Fly fishing | `Y` |
| `activities.basketball_court` | string (Y\|N) | no | Basketball | `Y` |
| `activities.hot_air_ballooning` | string (Y\|N) | no | Hot air ballooning | `Y` |
| `activities.horseback_riding` | string (Y\|N) | no | Horseback riding | `Y` |
| `activities.nature_viewing` | string (Y\|N) | no | Nature Viewing | `Y` |
| `activities.pickleball` | string (Y\|N) | no | Pickleball | `Y` |
| `activities.volleyball_court` | string (Y\|N) | no | Volleyball Court | `Y` |
| `activities.miniature_golf` | string (Y\|N) | no | Miniature Golf | `Y` |
| `activities.tennis` | string (Y\|N) | no | tennis | `Y` |
| `activities.swimming` | string (Y\|N) | no | swimming | `Y` |
| `activities.fishing` | string (Y\|N) | no | fishing | `Y` |
| `activities.hunting` | string (Y\|N) | no | fishing | `Y` |
| `activities.roller_blading` | string (Y\|N) | no | Roller blading | `Y` |
| `activities.walking` | string (Y\|N) | no | Walking | `Y` |
| `activities.bird_watching` | string (Y\|N) | no | Bird watching | `Y` |
| `activities.ping_pong_table` | string (Y\|N) | no | Ping Pong Table | `Y` |
| `policies` | object | no |  | `` |
| `policies.houserules` | string | no | House rules | `` |
| `policies.minage` | string | no | Minimum age for the renter | `18` |
| `policies.minagelimit` | string | no | Additional information about minimum age for the renter | `18` |
| `policies.checkin_from` | string (Flexible\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM\|12AM (midnight)\|1AM(next day)) | no | Check in time from | `2PM` |
| `policies.checkin_to` | string (Flexible\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM\|12AM (midnight)\|1AM(next day)\|2AM(next day)) | no | Check in time upto | `Flexible` |
| `policies.checkout` | string (Flexible\|12AM (midnight)\|1AM\|2AM\|3AM\|4AM\|5AM\|6AM\|7AM\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM) | no | Check out time | `10AM` |
| `policies.checkintext` | string | no | Additional check-in information | `` |
| `policies.payment_policy` | string | no | Payment policy text | `` |
| `policies.cancellation_policy` | string | no | Cancellation policy | `` |
| `policies.notes` | string | no | Notes | `` |
| `policies.rental_agreement` | object | no | Rental agreement | `` |
| `policies.rental_agreement.url` | string | no | Url of the rental agreement | `` |
| `policies.door_lock_code` | string | no | Door lock code | `1234` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `listing_id` | number | Listing id of created listing. Use this listing id for updating rates, availability. | `201` |
| `success` | string | wheather operation successful or not | `yes` |
| `msg` | string | empty on success; on validation failure a comma-joined list (e.g. "Invalid lodgingType, Invalid guests") | `` |
| `percentage` | number | Listing completion percentage | `100` |

Example request body:

```json
{
    "listingData": {
        "lodgingType": "Vacation Rental",
        "roomType": "Entire Place",
        "propertyType": "Condominium",
        "listingName": "Cute cottage",
        "headline": "Have you ever stayed in a 100 year old cottage right on main street Breckenridge? BOOK DIRECT on Houfy.com and save on service fees",
        "summary": "string",
        "guests": "2",
        "bedrooms": "2",
        "bathrooms": "2",
        "area": "1000",
        "areaUnit": "Sqft",
        "listed_by": "Owner",
        "aboutowner": "string"
    },
    "bedrooms": [
        {
            "bedroomid": "string",
            "bedroomname": "Master bedroom",
            "bedroomcomment": "Master bedroom",
            "beds": [
                {
                    "bed_id": 0,
                    "bedtype": "King",
                    "sleeps": "2"
                }
            ]
        }
    ],
    "location": {
        "latitude": "39.48498306513508",
        "longitude": "-106.04642089999999",
        "ex_location": "Y",
        "city": "Breckenridge, CO, United States",
        "region": "Colorado",
        "country": "United States",
        "address": "303 North Main Street",
        "floornr": "1",
        "unitnr": "103",
        "gettingaround": ""
    },
    "locationViews": {
        "beachfront": "Y",
        "viewbeach": "Y",
        "oceanfront": "Y",
        "viewocean": "Y",
        "bayfront": "Y",
        "bay_view": "Y",
        "riverfront": "Y",
        "viewriver": "Y",
        "lakefront": "Y",
        "viewlake": "Y",
        "waterfront": "Y",
        "water_view": "Y",
        "golffront": "Y",
        "viewgolfcourse": "Y",
        "mountainfront": "Y",
        "viewmountain": "Y",
        "viewcity": "Y",
        "viewvillage": "Y",
        "viewmonument": "Y",
        "viewpark": "Y",
        "viewwoods": "Y",
        "view_garden": "Y",
        "skislopes": "Y",
        "skiinout": "Y"
    },
    "amenities": {
        "washing_machine": "Y",
        "cloth_dryer": "Y",
        "linens": "Y",
        "heating": "Y",
        "airconditioner": "Y",
        "doorman": "Y",
        "intercom": "Y",
        "gameroom": "Y",
        "house_safe": "Y",
        "ironboard": "Y",
        "hairdryer": "Y",
        "towels": "Y",
        "ceilingfan": "Y",
        "gasfireplace": "Y",
        "elevator": "Y",
        "fitnessroom": "Y",
        "pooltable": "Y",
        "ev_charging": "Y",
        "fullkitchen": "Y",
        "stove": "Y",
        "fridge": "Y",
        "dishwasher": "Y",
        "microwave": "Y",
        "coffeemaker": "Y",
        "kitchenette": "Y",
        "oven": "Y",
        "toaster": "Y",
        "cookingutensils": "Y",
        "icemaker": "Y",
        "waterpurifier": "Y",
        "terrace": "Y",
        "patio": "Y",
        "gasgrill": "Y",
        "privatepool": "Y",
        "balcony": "Y",
        "hot_tub": "Y",
        "charcoalgrill": "Y",
        "private_garden": "Y",
        "internet": "Y",
        "cabletv": "Y",
        "dvdplayer": "Y",
        "iphonedock": "Y",
        "security_cameras": "Y",
        "laptopfriendly": "Y",
        "satelitetv": "Y",
        "gameconsole": "Y",
        "alarm": "Y",
        "smokedetector": "Y",
        "firstaidkit": "Y",
        "codetector": "Y",
        "fireextinguisher": "Y",
        "sharedpool": "Y",
        "sharefitnessroom": "Y",
        "sharedhottub": "Y",
        "sharedtennis": "Y",
        "supplies": "string",
        "kitchentext": "string",
        "outdoortext": "string",
        "techtext": "string",
        "safetytext": "string"
    },
    "suitability": {
        "allow_infants": "Y",
        "allow_infants_text": "",
        "children_friendly": "Y",
        "children_friendly_text": "",
        "events_allowed": "Y",
        "events_allowed_text": "",
        "smoking_allowed": "N",
        "smoking_allowed_text": "Strictly non-smoking",
        "wheelchair_accessible": "Y",
        "wheelchair_accessible_text": "",
        "parking": "Y",
        "parking_text": ""
    },
    "activities": {
        "scuba_diving": "Y",
        "fishing_charters": "Y",
        "surfing": "Y",
        "kitesurf": "Y",
        "water_skiing": "Y",
        "jet_skiing": "Y",
        "rafting": "Y",
        "beach_volleyball": "Y",
        "deep_sea_fishing": "Y",
        "pier_fishing": "Y",
        "wind_surfing": "Y",
        "sailing": "Y",
        "parasailing": "Y",
        "water_tubing": "Y",
        "kayaking": "Y",
        "sup": "Y",
        "cross_country_skiing": "Y",
        "snowboarding": "Y",
        "ice_skating": "Y",
        "skiing": "Y",
        "snowmobiling": "Y",
        "sledding": "Y",
        "mountain_biking": "Y",
        "mountain_climbing": "Y",
        "whitewater_rafting": "Y",
        "hiking": "Y",
        "rock_climbing": "Y",
        "paragliding": "Y",
        "golf": "Y",
        "racquetball": "Y",
        "cycling": "Y",
        "fly_fishing": "Y",
        "basketball_court": "Y",
        "hot_air_ballooning": "Y",
        "horseback_riding": "Y",
        "nature_viewing": "Y",
        "pickleball": "Y",
        "volleyball_court": "Y",
        "miniature_golf": "Y",
        "tennis": "Y",
        "swimming": "Y",
        "fishing": "Y",
        "hunting": "Y",
        "roller_blading": "Y",
        "walking": "Y",
        "bird_watching": "Y",
        "ping_pong_table": "Y"
    },
    "policies": {
        "houserules": "",
        "minage": "18",
        "minagelimit": "18",
        "checkin_from": "2PM",
        "checkin_to": "Flexible",
        "checkout": "10AM",
        "checkintext": "",
        "payment_policy": "",
        "cancellation_policy": "",
        "notes": "",
        "rental_agreement": {
            "url": "string"
        },
        "door_lock_code": "1234"
    }
}
```

### Get listing base pricing data

**Endpoint:** `GET /listings/pricingdetails/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Listing id (required)

#### Responses
- `200` — successful operation

#### Response fields (200)

pricingdetails response — the pricing field groups plus success/msg. Note pricing.perweek and pricing.permonth are always null.

| Field | Type | Description | Example |
|---|---|---|---|
| `pricing` | object |  | `` |
| `pricing.base_price_per_night` | Number | Base price per night | `100` |
| `pricing.currency` | string | Currency ISO code | `USD` |
| `pricing.curr_symbol` | string | Currency symbol | `$` |
| `pricing.perweek` | Number | Base price per week | `700` |
| `pricing.permonth` | Number | Base price per month | `3000` |
| `pricing.minstay` | Number | Min stay | `2` |
| `pricing.weekendprice` | Number | Weekend price | `120` |
| `pricing.weekends` | array | Weekends selection | `` |
| `pricing.additionalguestfee` | object |  | `` |
| `pricing.additionalguestfee.hasaddtionalguestfee` | string (Y\|N) | Is there additional guests fee? | `N` |
| `pricing.additionalguestfee.amount` | number | What is additional guest fee? | `20` |
| `pricing.additionalguestfee.addguestsafter` | number | After how many guests additional guest is charged? | `2` |
| `pricing.checkin_changeover` | array | Check in changeover selection | `` |
| `pricing.checkout_changeover` | array | Check out changeover selection | `` |
| `fees` | array | Listing fees | `` |
| `fees[].id` | Number | Fee id to update or null to insert a new fee | `` |
| `fees[].feename` | String | Fee name | `Cleaning fee` |
| `fees[].fee_type` | string (F\|P) | Type of fee - Fixed or Percentage | `F` |
| `fees[].feeamount` | Number | Fee amount | `69` |
| `fees[].taxable` | string (Y\|N) | Is fee taxable? | `N` |
| `fees[].isperperson` | string (Y\|N) | Is fee per person/guest? | `N` |
| `fees[].is_pernight` | string (Y\|N) | Is fee per night? | `N` |
| `fees[].is_optional` | string (Y\|N) | Is fee per optional? | `N` |
| `taxes` | object |  | `` |
| `taxes.tax_rate` | Number | Tax rate | `10` |
| `taxes.taxidnumber` | String | City Permit/Tax ID Number/Registration ID | `` |
| `taxes.future_tax_change` | Number (Y\|N) | Is there change in tax rate in future | `Y` |
| `taxes.future_tax_rate` | Number | Future tax rate | `` |
| `taxes.future_tax_rate_after` | Date | Date after which tax rate changes in YYYY-MM-DD | `1609459200` |
| `deposite` | object |  | `` |
| `deposite.security_deposit` | Number | Security deposit/Damage deposit amount | `300` |
| `deposite.depositinfo` | String | Additional information about security deposit | `` |
| `deposite.deposit_refund_policy` | string | Damage deposit refund policy | `` |
| `petfee` | object |  | `` |
| `petfee.pets_allowed` | string (Y\|N) | Are pets allowed? | `Y` |
| `petfee.pets_allowed_info` | string | Additional information about pets | `Pets are allowed.` |
| `petfee.max_pets` | string | Maximum number of pets allowed? | `2` |
| `petfee.petfee` | Number | Pet fee | `10` |
| `petfee.petfeetaxable` | string (Y\|N) | Is pet fee taxable? | `Y` |
| `petfee.petfee_perstay` | string (Y\|N) | Is pet fee per stay? | `Y` |
| `petfee.petfee_perpet` | string (Y\|N) | Is pet fee per pet? | `N` |
| `petfee.petfee_pernight` | string (Y\|N) | Is pet fee per night? | `N` |
| `discounts` | object |  | `` |
| `discounts.weekly_discounts` | Number | Weekly discounts in percentage | `10` |
| `discounts.monthly_discounts` | Number | Monthly discounts in percentage | `10` |
| `discounts.discounts_2_nights` | Number | Discounts 2+ nights | `5` |
| `discounts.discounts_3_nights` | Number | Discounts 3+ nights | `5` |
| `discounts.discounts_4_nights` | Number | Discounts 4+ nights | `5` |
| `discounts.discounts_5_nights` | Number | Discounts 5+ nights | `5` |
| `discounts.discounts_6_nights` | Number | Discounts 6+ nights | `5` |
| `discounts.discounts_14_nights` | Number | Discounts 14+ nights | `12` |
| `discounts.discounts_21_nights` | Number | Discounts 21+ nights | `15` |
| `discounts.early_bird_discounts` | Number | Early bird discounts in percentage | `10` |
| `discounts.early_bird_discounts_before_months` | Number | Early bird discounts months before to the get discount | `10` |
| `reservation_deposit` | object |  | `` |
| `reservation_deposit.reservation_deposit_amount` | number | Reservation deposit amount | `50` |
| `reservation_deposit.res_deposit_type` | string (F\|P) | Reservation deposit - Fixed or Percentage | `F` |
| `reservation_deposit.reservation_info` | string | Reservation deposit information | `` |
| `reservation_deposit.fullpayment_due` | number | Full payment due days | `30` |
| `reservation_deposit.fullpayment_dueinfo` | string | Full payment due text | `30` |
| `reservation_deposit.cancellation_days` | number | Cancel before arrival date in days | `30` |
| `success` | string | "yes", or "no" with msg "Invalid listing number" for a missing/inactive listing | `yes` |
| `msg` | string | empty on success | `` |

## Rates

Rates details

### Get rates for a date range

**Endpoint:** `POST /rates/getrates/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Listing id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `dateFrom` | string | yes | Starting Date in YYYY-MM-DD format | `2026-01-01` |
| `dateTo` | string | yes | End Date in YYYY-MM-DD format. Capped server-side at dateFrom + 24 months. | `2026-02-01` |

#### Responses
- `200` — successful operation

#### Response fields (200)

dateTo is capped at dateFrom + 24 months. On invalid input the response is {success: no, msg} only.

| Field | Type | Description | Example |
|---|---|---|---|
| `listing_id` | integer | Listing id | `201` |
| `minstay` | integer | The listing's default minimum stay | `2` |
| `currency` | string | The LISTING'S currency in ISO format — prices in rates are in this currency, no conversion is applied | `USD` |
| `rates` | array | One item per date, sorted ascending | `` |
| `rates[].resdate` | string | Date in YYYY-MM-DD format | `2026-01-01` |
| `rates[].available` | string (Y\|N) | Is the date available to book? Derived from reservations, per-day availability and the listing cutoff date. | `Y` |
| `rates[].price` | string | Price for the date in the listing's own currency, formatted with 2 decimals and thousands separators (e.g. "1,234.00"). The literal "NA" when no price can be resolved. | `350.00` |
| `rates[].minstay` | integer | Minimum stay for the date (per-day value, falling back to the listing default). Omitted on base-priced dates when the listing default is 0. | `2` |
| `rates[].nday` | string | Three-letter day of week for the date | `Mon` |
| `rates[].checkin_allowed` | string (Y\|N) | Only on rows with a stored per-day price | `Y` |
| `rates[].checkout_allowed` | string (Y\|N) | Only on rows with a stored per-day price | `Y` |
| `rates[].weekend` | string (Y\|N) | Only on base-priced rows — whether the listing uses weekend pricing at all (not whether this date is a weekend) | `N` |
| `success` | string (yes\|no) |  | `yes` |
| `msg` | string | Error message when success is no ("Invalid dates supplied"), empty otherwise | `` |

Example request body:

```json
{
    "dateFrom": "2026-01-01",
    "dateTo": "2026-02-01"
}
```

## Availability

Availability API allows to read or update Houfy calendars

### Get listing availability data

**Endpoint:** `POST /availability/getavailability/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Listing id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `dateFrom` | string | yes | Starting Date in YYYY-MM-DD format | `2026-01-01` |
| `dateTo` | string | yes | End Date in YYYY-MM-DD format. Capped server-side at dateFrom + 24 months. | `2026-02-01` |

#### Responses
- `200` — successful operation

#### Response fields (200)

dateTo is capped at dateFrom + 24 months. On invalid input the response is {success: no} with NO msg key.

| Field | Type | Description | Example |
|---|---|---|---|
| `listing_id` | string | Houfy listing id (serialized as a string) | `201` |
| `currency` | string | Always the literal "USD" (historical; NOT the listing currency — this endpoint carries no prices) | `USD` |
| `availability` | array | Overlapping reservations/blocks, one item per reservation (not per date) | `` |
| `availability[].resid` | string | Unique id of reservation | `1acb0e2d96598fceecd6e0960de7f10b` |
| `availability[].listing_id` | string | Houfy listing id (serialized as a string) | `201` |
| `availability[].checkindate` | string | Checkin date | `2026-09-01` |
| `availability[].checkoutdate` | string | Checkout date | `2026-09-07` |
| `availability[].importurlid` | string | Source of the block: the literal "Synced Calendar" for imported ics calendars, otherwise "0"/null for native Houfy bookings and blocks. | `Synced Calendar` |
| `availability[].status` | string (Reserved\|Blocked) | Status of reservation | `Reserved` |
| `success` | string (yes\|no) |  | `yes` |

Example request body:

```json
{
    "dateFrom": "2026-01-01",
    "dateTo": "2026-02-01"
}
```

## ListingUpdate

Update Listing data

### Update listing

**Endpoint:** `POST /listings/update_listingdetails/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — identifier (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `id` | string | no | Listing id | `201` |
| `listingData` | object | no | Listing details | `` |
| `listingData.lodgingType` | string (Vacation Rental\|Multi-room Listing) | no |  | `Vacation Rental` |
| `listingData.propertyType` | string (Condominium\|Vacation home\|Studio\|Apartment\|Townhouse\|Loft\|Bungalow\|Villa\|Estate/Castle\|Chalet\|Cottage\|Cabin\|Barn/Farmhouse\|Boat/Yacht\|Houseboat\|Camper/RV\|Other\|Hotel\|B&B\|Hostel\|Motel\|Inn\|Condo Hotel\|Resort\|Campground\|Riad) | no |  | `Condominium` |
| `listingData.listingName` | string | no | Listing name or title | `Cute cottage` |
| `listingData.headline` | string | no | Headline or catch line about the listing | `Have you ever stayed in a 100 year old cottage right on main street Breckenridge? BOOK DIRECT on Houfy.com and save on service fees` |
| `listingData.summary` | string | no | Description about the listing | `` |
| `listingData.guests` | Number | no | Maximum number of guests | `2` |
| `listingData.bedrooms` | Number | no | Number of bedrooms | `2` |
| `listingData.bathrooms` | Number | no | Number of bathrooms | `2` |
| `listingData.area` | Number | no | Area of the listing | `1000` |
| `listingData.areaUnit` | string (Sqft\|Sqmt) | no | Area unit of the listing | `Sqft` |
| `listingData.listed_by` | string (Owner\|Manager) | no | Listed by | `Owner` |
| `listingData.aboutowner` | string | no | Description of owner/manager | `` |
| `bedrooms` | array | no | Listing bedrooms | `` |
| `bedrooms[].bedroomid` | Number | no | Bedroom id or null to insert new bedroom | `` |
| `bedrooms[].bedroomname` | String | no | Bedroom name | `Master bedroom` |
| `bedrooms[].bedroomcomment` | String | no | Bedroom comment | `Master bedroom` |
| `bedrooms[].beds` | array | no | beds | `` |
| `bedrooms[].beds[].bed_id` | number | no | Bed id or null to insert new bed | `` |
| `bedrooms[].beds[].bedtype` | string (King\|Queen\|Double\|Single/Twin\|Sofa bed\|Bunk bed\|Rollaway bed\|Crib) | no | Bed type | `King` |
| `bedrooms[].beds[].sleeps` | String | no | Number of people sleeps on the bed | `2` |
| `location` | object | no |  | `` |
| `location.latitude` | Double | no | Latitude | `39.48498306513508` |
| `location.longitude` | Double | no | Longitude | `-106.04642089999999` |
| `location.ex_location` | string (Y\|N) | no | Exact location shown | `Y` |
| `location.city` | string | no | City | `Breckenridge, CO, United States` |
| `location.address` | string | no | Address | `303 North Main Street` |
| `location.floornr` | string | no | Floor number | `1` |
| `location.unitnr` | string | no | Unit number | `103` |
| `location.gettingaround` | string | no | Getting around | `` |
| `locationViews` | object | no |  | `` |
| `locationViews.beachfront` | string (Y\|N) | no | Beachfront | `Y` |
| `locationViews.viewbeach` | string (Y\|N) | no | Beach view | `Y` |
| `locationViews.oceanfront` | string (Y\|N) | no | Ocean front | `Y` |
| `locationViews.viewocean` | string (Y\|N) | no | Ocean view | `Y` |
| `locationViews.bayfront` | string (Y\|N) | no | Bay front | `Y` |
| `locationViews.bay_view` | string (Y\|N) | no | Bay view | `Y` |
| `locationViews.riverfront` | string (Y\|N) | no | River front | `Y` |
| `locationViews.viewriver` | string (Y\|N) | no | River view | `Y` |
| `locationViews.lakefront` | string (Y\|N) | no | Lake front | `Y` |
| `locationViews.viewlake` | string (Y\|N) | no | Lake view | `Y` |
| `locationViews.waterfront` | string (Y\|N) | no | Water front | `Y` |
| `locationViews.water_view` | string (Y\|N) | no | Water view | `Y` |
| `locationViews.golffront` | string (Y\|N) | no | Golf Course front | `Y` |
| `locationViews.viewgolfcourse` | string (Y\|N) | no | Golf Course | `Y` |
| `locationViews.mountainfront` | string (Y\|N) | no | Mountain | `Y` |
| `locationViews.viewmountain` | string (Y\|N) | no | Mountain view | `Y` |
| `locationViews.viewcity` | string (Y\|N) | no | City | `Y` |
| `locationViews.viewvillage` | string (Y\|N) | no | Village | `Y` |
| `locationViews.viewmonument` | string (Y\|N) | no | Landmark/Monument | `Y` |
| `locationViews.viewpark` | string (Y\|N) | no | Park | `Y` |
| `locationViews.viewwoods` | string (Y\|N) | no | Woods | `Y` |
| `locationViews.view_garden` | string (Y\|N) | no | Garden | `Y` |
| `locationViews.skislopes` | string (Y\|N) | no | Ski Slopes | `Y` |
| `locationViews.skiinout` | string (Y\|N) | no | Ski in/out | `Y` |
| `images` | array | no | Listing photos | `` |
| `images[].filename` | string | no |  | `50fe40ddcf626770027a13ea23f0b018.jpg` |
| `images[].original_url` | string | no |  | `https://www.houfy.com/assets/images/properties/50fe40ddcf626770027a13ea23f0b018.jpg` |
| `images[].caption` | string | no |  | `Willoughby Cottage in winter` |
| `amenities` | object | no |  | `` |
| `amenities.washing_machine` | string (Y\|N) | no | Washing Machine | `Y` |
| `amenities.cloth_dryer` | string (Y\|N) | no | Cloth Dryer | `Y` |
| `amenities.linens` | string (Y\|N) | no | Linens Provided | `Y` |
| `amenities.heating` | string (Y\|N) | no | Heating | `Y` |
| `amenities.airconditioner` | string (Y\|N) | no | Air Conditioner | `Y` |
| `amenities.doorman` | string (Y\|N) | no | Door Man | `Y` |
| `amenities.intercom` | string (Y\|N) | no | intercom | `Y` |
| `amenities.gameroom` | string (Y\|N) | no | Game room | `Y` |
| `amenities.house_safe` | string (Y\|N) | no | House safe | `Y` |
| `amenities.ironboard` | string (Y\|N) | no | Iron Board | `Y` |
| `amenities.hairdryer` | string (Y\|N) | no | Hair Dryer | `Y` |
| `amenities.towels` | string (Y\|N) | no | Towels Provided | `Y` |
| `amenities.ceilingfan` | string (Y\|N) | no | Ceiling Fan | `Y` |
| `amenities.gasfireplace` | string (Y\|N) | no | Gas Fireplace | `Y` |
| `amenities.elevator` | string (Y\|N) | no | Elevator | `Y` |
| `amenities.fitnessroom` | string (Y\|N) | no | Fitness room | `Y` |
| `amenities.pooltable` | string (Y\|N) | no | Pool Table | `Y` |
| `amenities.ev_charging` | string (Y\|N) | no | Electric Vehicle charging | `Y` |
| `amenities.fullkitchen` | string (Y\|N) | no | Full Kitchen | `Y` |
| `amenities.stove` | string (Y\|N) | no | Stove | `Y` |
| `amenities.fridge` | string (Y\|N) | no | Fridge | `Y` |
| `amenities.dishwasher` | string (Y\|N) | no | Dishwasher | `Y` |
| `amenities.microwave` | string (Y\|N) | no | Microwave | `Y` |
| `amenities.coffeemaker` | string (Y\|N) | no | Coffee maker | `Y` |
| `amenities.kitchenette` | string (Y\|N) | no | Kitchenette | `Y` |
| `amenities.oven` | string (Y\|N) | no | Oven | `Y` |
| `amenities.toaster` | string (Y\|N) | no | Toaster | `Y` |
| `amenities.cookingutensils` | string (Y\|N) | no | Cooking Utensils | `Y` |
| `amenities.icemaker` | string (Y\|N) | no | Ice Maker | `Y` |
| `amenities.waterpurifier` | string (Y\|N) | no | Water Purifier | `Y` |
| `amenities.terrace` | string (Y\|N) | no | Terrace | `Y` |
| `amenities.patio` | string (Y\|N) | no | Patio | `Y` |
| `amenities.gasgrill` | string (Y\|N) | no | Gas grill | `Y` |
| `amenities.privatepool` | string (Y\|N) | no | Private pool | `Y` |
| `amenities.balcony` | string (Y\|N) | no | Balcony | `Y` |
| `amenities.hot_tub` | string (Y\|N) | no | Hot Tub | `Y` |
| `amenities.charcoalgrill` | string (Y\|N) | no | Charcoal grill | `Y` |
| `amenities.private_garden` | string (Y\|N) | no | Private garden | `Y` |
| `amenities.internet` | string (Y\|N) | no | Internet | `Y` |
| `amenities.cabletv` | string (Y\|N) | no | Cable tv | `Y` |
| `amenities.dvdplayer` | string (Y\|N) | no | Dvd player | `Y` |
| `amenities.iphonedock` | string (Y\|N) | no | iphone dock | `Y` |
| `amenities.security_cameras` | string (Y\|N) | no | Security cameras | `Y` |
| `amenities.laptopfriendly` | string (Y\|N) | no | laptop friendly | `Y` |
| `amenities.satelitetv` | string (Y\|N) | no | Satelite tv | `Y` |
| `amenities.gameconsole` | string (Y\|N) | no | Game console | `Y` |
| `amenities.alarm` | string (Y\|N) | no | Alarm | `Y` |
| `amenities.smokedetector` | string (Y\|N) | no | Smoke detector | `Y` |
| `amenities.firstaidkit` | string (Y\|N) | no | First aid kit | `Y` |
| `amenities.codetector` | string (Y\|N) | no | Carbon Monoxide Detector | `Y` |
| `amenities.fireextinguisher` | string (Y\|N) | no | Fire Extinguisher | `Y` |
| `amenities.sharedpool` | string (Y\|N) | no | Shared pool | `Y` |
| `amenities.sharefitnessroom` | string (Y\|N) | no | Shared Gym | `Y` |
| `amenities.sharedhottub` | string (Y\|N) | no | Shared Hot tub | `Y` |
| `amenities.sharedtennis` | string (Y\|N) | no | Tennis Court | `Y` |
| `amenities.supplies` | string | no | What owner/manager supply text | `` |
| `amenities.kitchentext` | string | no | Additional text about kitchen amenities | `` |
| `amenities.outdoortext` | string | no | Additional text about outdoor amenities | `` |
| `amenities.techtext` | string | no | Additional text about technology amenities | `` |
| `amenities.safetytext` | string | no | Additional text about safety amenities | `` |
| `suitability` | object | no |  | `` |
| `suitability.allow_infants` | string (Y\|N) | no | Are infants allowed? | `Y` |
| `suitability.allow_infants_text` | string | no | Allow infants text | `` |
| `suitability.children_friendly` | string (Y\|N) | no | Is your place suitable for small children? Do you have any pack and play cribs/play areas? | `Y` |
| `suitability.children_friendly_text` | string | no | Children friendly text | `` |
| `suitability.events_allowed` | string (Y\|N) | no | Are events or parties allowed? | `Y` |
| `suitability.events_allowed_text` | string | no | Events allowed text | `` |
| `suitability.smoking_allowed` | string (Y\|N) | no | Is smoking allowed? | `N` |
| `suitability.smoking_allowed_text` | string | no | Smoking allowed text | `Strictly non-smoking` |
| `suitability.wheelchair_accessible` | string (Y\|N) | no | Is your place suitable for guests with mobility needs? | `Y` |
| `suitability.wheelchair_accessible_text` | string | no | Wheelchair accessible text | `` |
| `suitability.parking` | string (Y\|N) | no | Is parking avilable at your place? | `Y` |
| `suitability.parking_text` | string | no | Parking text | `` |
| `activities` | object | no |  | `` |
| `activities.scuba_diving` | string (Y\|N) | no | Scuba diving or snorkeling | `Y` |
| `activities.fishing_charters` | string (Y\|N) | no | Fishing Charters | `Y` |
| `activities.surfing` | string (Y\|N) | no | Surfing | `Y` |
| `activities.kitesurf` | string (Y\|N) | no | Kitesurf | `Y` |
| `activities.water_skiing` | string (Y\|N) | no | Water skiing | `Y` |
| `activities.jet_skiing` | string (Y\|N) | no | Jet skiing | `Y` |
| `activities.rafting` | string (Y\|N) | no | Rafting | `Y` |
| `activities.beach_volleyball` | string (Y\|N) | no | Beach Volleyball | `Y` |
| `activities.deep_sea_fishing` | string (Y\|N) | no | Deepsea fishing | `Y` |
| `activities.pier_fishing` | string (Y\|N) | no | Pier fishing | `Y` |
| `activities.wind_surfing` | string (Y\|N) | no | Wind surfing | `Y` |
| `activities.sailing` | string (Y\|N) | no | Sailing | `Y` |
| `activities.parasailing` | string (Y\|N) | no | Parasailing | `Y` |
| `activities.water_tubing` | string (Y\|N) | no | Water tubing | `Y` |
| `activities.kayaking` | string (Y\|N) | no | Kayaking | `Y` |
| `activities.sup` | string (Y\|N) | no | Stand up paddle board(SUP) | `Y` |
| `activities.cross_country_skiing` | string (Y\|N) | no | Cross country skiing | `Y` |
| `activities.snowboarding` | string (Y\|N) | no | Snowboarding | `Y` |
| `activities.ice_skating` | string (Y\|N) | no | Ice skating | `Y` |
| `activities.skiing` | string (Y\|N) | no | Skiing | `Y` |
| `activities.snowmobiling` | string (Y\|N) | no | Snowmobiling | `Y` |
| `activities.sledding` | string (Y\|N) | no | Sledding | `Y` |
| `activities.mountain_biking` | string (Y\|N) | no | Mountain biking | `Y` |
| `activities.mountain_climbing` | string (Y\|N) | no | Mountain climbing | `Y` |
| `activities.whitewater_rafting` | string (Y\|N) | no | Whitewater rafting | `Y` |
| `activities.hiking` | string (Y\|N) | no | Hiking | `Y` |
| `activities.rock_climbing` | string (Y\|N) | no | Rock climbing | `Y` |
| `activities.paragliding` | string (Y\|N) | no | Paragliding | `Y` |
| `activities.golf` | string (Y\|N) | no | Golf | `Y` |
| `activities.racquetball` | string (Y\|N) | no | Racquet ball | `Y` |
| `activities.cycling` | string (Y\|N) | no | Cycling | `Y` |
| `activities.fly_fishing` | string (Y\|N) | no | Fly fishing | `Y` |
| `activities.basketball_court` | string (Y\|N) | no | Basketball | `Y` |
| `activities.hot_air_ballooning` | string (Y\|N) | no | Hot air ballooning | `Y` |
| `activities.horseback_riding` | string (Y\|N) | no | Horseback riding | `Y` |
| `activities.nature_viewing` | string (Y\|N) | no | Nature Viewing | `Y` |
| `activities.pickleball` | string (Y\|N) | no | Pickleball | `Y` |
| `activities.volleyball_court` | string (Y\|N) | no | Volleyball Court | `Y` |
| `activities.miniature_golf` | string (Y\|N) | no | Miniature Golf | `Y` |
| `activities.tennis` | string (Y\|N) | no | tennis | `Y` |
| `activities.swimming` | string (Y\|N) | no | swimming | `Y` |
| `activities.fishing` | string (Y\|N) | no | fishing | `Y` |
| `activities.hunting` | string (Y\|N) | no | fishing | `Y` |
| `activities.roller_blading` | string (Y\|N) | no | Roller blading | `Y` |
| `activities.walking` | string (Y\|N) | no | Walking | `Y` |
| `activities.bird_watching` | string (Y\|N) | no | Bird watching | `Y` |
| `activities.ping_pong_table` | string (Y\|N) | no | Ping Pong Table | `Y` |
| `policies` | object | no |  | `` |
| `policies.houserules` | string | no | House rules | `` |
| `policies.minage` | string | no | Minimum age for the renter | `18` |
| `policies.minagelimit` | string | no | Additional information about minimum age for the renter | `18` |
| `policies.checkin_from` | string (Flexible\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM\|12AM (midnight)\|1AM(next day)) | no | Check in time from | `2PM` |
| `policies.checkin_to` | string (Flexible\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM\|12AM (midnight)\|1AM(next day)\|2AM(next day)) | no | Check in time upto | `Flexible` |
| `policies.checkout` | string (Flexible\|12AM (midnight)\|1AM\|2AM\|3AM\|4AM\|5AM\|6AM\|7AM\|8AM\|9AM\|10AM\|11AM\|12PM (noon)\|1PM\|2PM\|3PM\|4PM\|5PM\|6PM\|7PM\|8PM\|9PM\|10PM\|11PM) | no | Check out time | `10AM` |
| `policies.checkintext` | string | no | Additional check-in information | `` |
| `policies.payment_policy` | string | no | Payment policy text | `` |
| `policies.cancellation_policy` | string | no | Cancellation policy | `` |
| `policies.notes` | string | no | Notes | `` |
| `policies.rental_agreement` | object | no | Rental agreement | `` |
| `policies.rental_agreement.url` | string | no | Url of the rental agreement | `` |
| `policies.door_lock_code` | string | no | Door lock code | `1234` |
| `hostinfo` | object | no |  | `` |
| `hostinfo.user_id` | number | no | User unique id | `` |
| `hostinfo.first_name` | string | no | First name | `` |
| `hostinfo.last_name` | string | no | First name | `` |
| `hostinfo.profile_pic` | string | no | First name | `` |
| `hostinfo.contact_email` | string | no | Contact email | `` |
| `hostinfo.languages` | array | no | List of languages | `` |
| `hostinfo.phone` | object | no | Phone number | `` |
| `hostinfo.phone.countrycode` | number | no | country code | `` |
| `hostinfo.phone.phoneno` | number | no | phone number | `` |
| `booking_cutoff_months` | number | no | Booking cutoff months from 1 to 24. Pass empty string("") to remove. | `12` |
| `msg` | string | no | Error message | `Invalid listing id` |

#### Responses
- `default` — {"success":"yes"|"no","msg":"","percentage":} — success is "no" with msg "Nothing to update" when no recognized field was supplied

Example request body:

```json
{
    "id": "201",
    "listingData": {
        "lodgingType": "Vacation Rental",
        "propertyType": "Condominium",
        "listingName": "Cute cottage",
        "headline": "Have you ever stayed in a 100 year old cottage right on main street Breckenridge? BOOK DIRECT on Houfy.com and save on service fees",
        "summary": "string",
        "guests": "2",
        "bedrooms": "2",
        "bathrooms": "2",
        "area": "1000",
        "areaUnit": "Sqft",
        "listed_by": "Owner",
        "aboutowner": "string"
    },
    "bedrooms": [
        {
            "bedroomid": "string",
            "bedroomname": "Master bedroom",
            "bedroomcomment": "Master bedroom",
            "beds": [
                {
                    "bed_id": 0,
                    "bedtype": "King",
                    "sleeps": "2"
                }
            ]
        }
    ],
    "location": {
        "latitude": "39.48498306513508",
        "longitude": "-106.04642089999999",
        "ex_location": "Y",
        "city": "Breckenridge, CO, United States",
        "address": "303 North Main Street",
        "floornr": "1",
        "unitnr": "103",
        "gettingaround": ""
    },
    "locationViews": {
        "beachfront": "Y",
        "viewbeach": "Y",
        "oceanfront": "Y",
        "viewocean": "Y",
        "bayfront": "Y",
        "bay_view": "Y",
        "riverfront": "Y",
        "viewriver": "Y",
        "lakefront": "Y",
        "viewlake": "Y",
        "waterfront": "Y",
        "water_view": "Y",
        "golffront": "Y",
        "viewgolfcourse": "Y",
        "mountainfront": "Y",
        "viewmountain": "Y",
        "viewcity": "Y",
        "viewvillage": "Y",
        "viewmonument": "Y",
        "viewpark": "Y",
        "viewwoods": "Y",
        "view_garden": "Y",
        "skislopes": "Y",
        "skiinout": "Y"
    },
    "images": [
        {
            "filename": "50fe40ddcf626770027a13ea23f0b018.jpg",
            "original_url": "https://www.houfy.com/assets/images/properties/50fe40ddcf626770027a13ea23f0b018.jpg",
            "caption": "Willoughby Cottage in winter"
        }
    ],
    "amenities": {
        "washing_machine": "Y",
        "cloth_dryer": "Y",
        "linens": "Y",
        "heating": "Y",
        "airconditioner": "Y",
        "doorman": "Y",
        "intercom": "Y",
        "gameroom": "Y",
        "house_safe": "Y",
        "ironboard": "Y",
        "hairdryer": "Y",
        "towels": "Y",
        "ceilingfan": "Y",
        "gasfireplace": "Y",
        "elevator": "Y",
        "fitnessroom": "Y",
        "pooltable": "Y",
        "ev_charging": "Y",
        "fullkitchen": "Y",
        "stove": "Y",
        "fridge": "Y",
        "dishwasher": "Y",
        "microwave": "Y",
        "coffeemaker": "Y",
        "kitchenette": "Y",
        "oven": "Y",
        "toaster": "Y",
        "cookingutensils": "Y",
        "icemaker": "Y",
        "waterpurifier": "Y",
        "terrace": "Y",
        "patio": "Y",
        "gasgrill": "Y",
        "privatepool": "Y",
        "balcony": "Y",
        "hot_tub": "Y",
        "charcoalgrill": "Y",
        "private_garden": "Y",
        "internet": "Y",
        "cabletv": "Y",
        "dvdplayer": "Y",
        "iphonedock": "Y",
        "security_cameras": "Y",
        "laptopfriendly": "Y",
        "satelitetv": "Y",
        "gameconsole": "Y",
        "alarm": "Y",
        "smokedetector": "Y",
        "firstaidkit": "Y",
        "codetector": "Y",
        "fireextinguisher": "Y",
        "sharedpool": "Y",
        "sharefitnessroom": "Y",
        "sharedhottub": "Y",
        "sharedtennis": "Y",
        "supplies": "string",
        "kitchentext": "string",
        "outdoortext": "string",
        "techtext": "string",
        "safetytext": "string"
    },
    "suitability": {
        "allow_infants": "Y",
        "allow_infants_text": "",
        "children_friendly": "Y",
        "children_friendly_text": "",
        "events_allowed": "Y",
        "events_allowed_text": "",
        "smoking_allowed": "N",
        "smoking_allowed_text": "Strictly non-smoking",
        "wheelchair_accessible": "Y",
        "wheelchair_accessible_text": "",
        "parking": "Y",
        "parking_text": ""
    },
    "activities": {
        "scuba_diving": "Y",
        "fishing_charters": "Y",
        "surfing": "Y",
        "kitesurf": "Y",
        "water_skiing": "Y",
        "jet_skiing": "Y",
        "rafting": "Y",
        "beach_volleyball": "Y",
        "deep_sea_fishing": "Y",
        "pier_fishing": "Y",
        "wind_surfing": "Y",
        "sailing": "Y",
        "parasailing": "Y",
        "water_tubing": "Y",
        "kayaking": "Y",
        "sup": "Y",
        "cross_country_skiing": "Y",
        "snowboarding": "Y",
        "ice_skating": "Y",
        "skiing": "Y",
        "snowmobiling": "Y",
        "sledding": "Y",
        "mountain_biking": "Y",
        "mountain_climbing": "Y",
        "whitewater_rafting": "Y",
        "hiking": "Y",
        "rock_climbing": "Y",
        "paragliding": "Y",
        "golf": "Y",
        "racquetball": "Y",
        "cycling": "Y",
        "fly_fishing": "Y",
        "basketball_court": "Y",
        "hot_air_ballooning": "Y",
        "horseback_riding": "Y",
        "nature_viewing": "Y",
        "pickleball": "Y",
        "volleyball_court": "Y",
        "miniature_golf": "Y",
        "tennis": "Y",
        "swimming": "Y",
        "fishing": "Y",
        "hunting": "Y",
        "roller_blading": "Y",
        "walking": "Y",
        "bird_watching": "Y",
        "ping_pong_table": "Y"
    },
    "policies": {
        "houserules": "",
        "minage": "18",
        "minagelimit": "18",
        "checkin_from": "2PM",
        "checkin_to": "Flexible",
        "checkout": "10AM",
        "checkintext": "",
        "payment_policy": "",
        "cancellation_policy": "",
        "notes": "",
        "rental_agreement": {
            "url": "string"
        },
        "door_lock_code": "1234"
    },
    "hostinfo": {
        "user_id": 0,
        "first_name": "",
        "last_name": "",
        "profile_pic": "",
        "contact_email": "",
        "languages": [
            "string"
        ],
        "phone": {
            "countrycode": 0,
            "phoneno": 0
        }
    },
    "booking_cutoff_months": "12",
    "msg": "Invalid listing id"
}
```

### Update listing pricing data

**Endpoint:** `POST /listings/update_pricingdetails/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — identifier (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `pricing` | object | no |  | `` |
| `pricing.base_price_per_night` | Number | no | Base price per night | `100` |
| `pricing.currency` | string | no | Currency ISO code | `USD` |
| `pricing.curr_symbol` | string | no | Currency symbol | `$` |
| `pricing.perweek` | Number | no | Base price per week | `700` |
| `pricing.permonth` | Number | no | Base price per month | `3000` |
| `pricing.minstay` | Number | no | Min stay | `2` |
| `pricing.weekendprice` | Number | no | Weekend price | `120` |
| `pricing.weekends` | array | no | Weekends selection | `` |
| `pricing.additionalguestfee` | object | no |  | `` |
| `pricing.additionalguestfee.hasaddtionalguestfee` | string (Y\|N) | no | Is there additional guests fee? | `N` |
| `pricing.additionalguestfee.amount` | number | no | What is additional guest fee? | `20` |
| `pricing.additionalguestfee.addguestsafter` | number | no | After how many guests additional guest is charged? | `2` |
| `pricing.checkin_changeover` | array | no | Check in changeover selection | `` |
| `pricing.checkout_changeover` | array | no | Check out changeover selection | `` |
| `petfee` | object | no |  | `` |
| `petfee.pets_allowed` | string (Y\|N) | no | Are pets allowed? | `Y` |
| `petfee.pets_allowed_info` | string | no | Additional information about pets | `Pets are allowed.` |
| `petfee.max_pets` | string | no | Maximum number of pets allowed? | `2` |
| `petfee.petfee` | Number | no | Pet fee | `10` |
| `petfee.petfeetaxable` | string (Y\|N) | no | Is pet fee taxable? | `Y` |
| `petfee.petfee_perstay` | string (Y\|N) | no | Is pet fee per stay? | `Y` |
| `petfee.petfee_perpet` | string (Y\|N) | no | Is pet fee per pet? | `N` |
| `petfee.petfee_pernight` | string (Y\|N) | no | Is pet fee per night? | `N` |
| `discounts` | object | no |  | `` |
| `discounts.weekly_discounts` | Number | no | Weekly discounts in percentage | `10` |
| `discounts.monthly_discounts` | Number | no | Monthly discounts in percentage | `10` |
| `discounts.discounts_2_nights` | Number | no | Discounts 2+ nights | `5` |
| `discounts.discounts_3_nights` | Number | no | Discounts 3+ nights | `5` |
| `discounts.discounts_4_nights` | Number | no | Discounts 4+ nights | `5` |
| `discounts.discounts_5_nights` | Number | no | Discounts 5+ nights | `5` |
| `discounts.discounts_6_nights` | Number | no | Discounts 6+ nights | `5` |
| `discounts.discounts_14_nights` | Number | no | Discounts 14+ nights | `12` |
| `discounts.discounts_21_nights` | Number | no | Discounts 21+ nights | `15` |
| `discounts.early_bird_discounts` | Number | no | Early bird discounts in percentage | `10` |
| `discounts.early_bird_discounts_before_months` | Number | no | Early bird discounts months before to the get discount | `10` |
| `taxes` | object | no |  | `` |
| `taxes.tax_rate` | Number | no | Tax rate | `10` |
| `taxes.taxidnumber` | String | no | City Permit/Tax ID Number/Registration ID | `` |
| `taxes.future_tax_change` | Number (Y\|N) | no | Is there change in tax rate in future | `Y` |
| `taxes.future_tax_rate` | Number | no | Future tax rate | `` |
| `taxes.future_tax_rate_after` | Date | no | Date after which tax rate changes in YYYY-MM-DD | `1609459200` |
| `deposite` | object | no |  | `` |
| `deposite.security_deposit` | Number | no | Security deposit/Damage deposit amount | `300` |
| `deposite.depositinfo` | String | no | Additional information about security deposit | `` |
| `deposite.deposit_refund_policy` | string | no | Damage deposit refund policy | `` |
| `reservation_deposit` | object | no |  | `` |
| `reservation_deposit.reservation_deposit_amount` | number | no | Reservation deposit amount | `50` |
| `reservation_deposit.res_deposit_type` | string (F\|P) | no | Reservation deposit - Fixed or Percentage | `F` |
| `reservation_deposit.reservation_info` | string | no | Reservation deposit information | `` |
| `reservation_deposit.fullpayment_due` | number | no | Full payment due days | `30` |
| `reservation_deposit.fullpayment_dueinfo` | string | no | Full payment due text | `30` |
| `reservation_deposit.cancellation_days` | number | no | Cancel before arrival date in days | `30` |
| `fees` | array | no | Listing fees | `` |
| `fees[].id` | Number | no | Fee id to update or null to insert a new fee | `` |
| `fees[].feename` | String | no | Fee name | `Cleaning fee` |
| `fees[].fee_type` | string (F\|P) | no | Type of fee - Fixed or Percentage | `F` |
| `fees[].feeamount` | Number | no | Fee amount | `69` |
| `fees[].taxable` | string (Y\|N) | no | Is fee taxable? | `N` |
| `fees[].isperperson` | string (Y\|N) | no | Is fee per person/guest? | `N` |
| `fees[].is_pernight` | string (Y\|N) | no | Is fee per night? | `N` |
| `fees[].is_optional` | string (Y\|N) | no | Is fee per optional? | `N` |

#### Responses
- `default` — Default response

Example request body:

```json
{
    "pricing": {
        "base_price_per_night": "100",
        "currency": "USD",
        "curr_symbol": "$",
        "perweek": "700",
        "permonth": "3000",
        "minstay": "2",
        "weekendprice": "120",
        "weekends": [
            "Sun"
        ],
        "additionalguestfee": {
            "hasaddtionalguestfee": "N",
            "amount": 20,
            "addguestsafter": 2
        },
        "checkin_changeover": [
            "Sun"
        ],
        "checkout_changeover": [
            "Sun"
        ]
    },
    "petfee": {
        "pets_allowed": "Y",
        "pets_allowed_info": "Pets are allowed.",
        "max_pets": "2",
        "petfee": "10",
        "petfeetaxable": "Y",
        "petfee_perstay": "Y",
        "petfee_perpet": "N",
        "petfee_pernight": "N"
    },
    "discounts": {
        "weekly_discounts": "10",
        "monthly_discounts": "10",
        "discounts_2_nights": "5",
        "discounts_3_nights": "5",
        "discounts_4_nights": "5",
        "discounts_5_nights": "5",
        "discounts_6_nights": "5",
        "discounts_14_nights": "12",
        "discounts_21_nights": "15",
        "early_bird_discounts": "10",
        "early_bird_discounts_before_months": "10"
    },
    "taxes": {
        "tax_rate": "10",
        "taxidnumber": "string",
        "future_tax_change": "Y",
        "future_tax_rate": "string",
        "future_tax_rate_after": 1609459200
    },
    "deposite": {
        "security_deposit": "300",
        "depositinfo": "string",
        "deposit_refund_policy": "string"
    },
    "reservation_deposit": {
        "reservation_deposit_amount": "50",
        "res_deposit_type": "F",
        "reservation_info": "",
        "fullpayment_due": "30",
        "fullpayment_dueinfo": "30",
        "cancellation_days": "30"
    },
    "fees": [
        {
            "id": "string",
            "feename": "Cleaning fee",
            "fee_type": "F",
            "feeamount": "69",
            "taxable": "N",
            "isperperson": "N",
            "is_pernight": "N",
            "is_optional": "N"
        }
    ]
}
```

### Push listing photo(s)

Photos are processed asynchronously: each valid https URL is queued and downloaded by the import pipeline, appearing on the listing within about a minute. The returned filename is the queued external filename (derived from the URL); the stored filename is assigned during processing and is returned by getlistingdetails.

**Endpoint:** `POST /listings/push_photo/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Listing id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `files` | array | no | Files array | `` |
| `files[].file` | string | no |  | `50fe40ddcf626770027a13ea23f0b018.jpg` |
| `files[].success` | string | no |  | `yes` |

#### Responses
- `default` — Default response

Example request body:

```json
{
    "files": [
        {
            "file": "50fe40ddcf626770027a13ea23f0b018.jpg",
            "success": "yes"
        }
    ]
}
```

### Delete listing photo(s)

Pass the filename values returned by getlistingdetails. Deletions are processed asynchronously by the import pipeline (S3 object and photo record), completing within about a minute.

**Endpoint:** `POST /listings/delete_photo/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Listing id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `files` | array | no | Files array | `` |

#### Responses
- `default` — Default response

Example request body:

```json
{
    "files": [
        "50fe40ddcf626770027a13ea23f0b018.jpg"
    ]
}
```

## RatesUpdate

Update Rates data

### Update listing rates or block the calendar with input as array of json objects

**Endpoint:** `POST /rates/updateratesarray/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Listing id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `[].date` | string | no | Date in YYYY-MM-DD format(keep date null if you want to send dateFrom and dateTo) | `2021-01-01` |
| `[].dateFrom` | string | no | Date in YYYY-MM-DD format | `2021-02-01` |
| `[].dateTo` | string | no | Date in YYYY-MM-DD format | `2021-02-02` |
| `[].available` | string (Y\|N) | no | Available or not available | `Y` |
| `[].pricepernight` | number | no | Price per night | `200` |
| `[].minstay` | number | no | Min stay specific to date if any | `2` |
| `[].perweek` | number | no | Per week price | `700` |
| `[].permonth` | number | no | Per month price(30 days) | `3000` |
| `[].checkin_allowed` | string (Y\|N) | no | If check-in is not allowed, pass "N" | `Y` |
| `[].checkout_allowed` | string (Y\|N) | no | If check-out is not allowed, pass "N" | `Y` |
| `[].allowed_checkins` | string | no | Comma separated values of allowed days(3 letter representation of days) for check-in. Pass null value to remove or don't pass the key for no change. Sat,Sun,Mon,Tue,Wed,Thu,Fri | `Sat,Sun` |
| `[].allowed_checkouts` | string | no | Comma separated values of allowed days(3 letter representation of days) for check-out. Pass null value to remove or don't pass the key for no change. Sat,Sun,Mon,Tue,Wed,Thu,Fri | `Sat,Sun` |
| `[].last_minute_discounts` | number | no | Discounts for the date if any | `10` |
| `[].keep_availability` | string (Y) | no | Generally keep this value blank. To indicate not to change availability, it will keep existing blocked dates. Passing "Y" will not make dates available. | `Y` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `response` | array | Response object | `` |
| `response[].success` | string (yes\|no) | Indicates wheather operation is successful or not | `yes` |
| `response[].msg` | string | Success message | `` |
| `response[].date` | string | Input date | `` |
| `response[].dateFrom` | string | Input dateFrom | `` |
| `response[].dateTo` | string | Input dateTo | `` |

Example request body:

```json
[
    {
        "date": "2021-01-01",
        "dateFrom": "2021-02-01",
        "dateTo": "2021-02-02",
        "available": "Y",
        "pricepernight": 200,
        "minstay": 2,
        "perweek": 700,
        "permonth": 3000,
        "checkin_allowed": "Y",
        "checkout_allowed": "Y",
        "allowed_checkins": "Sat,Sun",
        "allowed_checkouts": "Sat,Sun",
        "last_minute_discounts": 10,
        "keep_availability": "Y"
    }
]
```

## Reservations

Reservations API allows to read or update Houfy Reservations

### Get reservation details by id

**Endpoint:** `GET /resdetails/get_reservationdetails/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Reservation id (required)

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `id` | string | reservation id | `ZYHHGTD969` |
| `listing_id` | number | Houfy listing number | `201` |
| `status` | string (Inquired\|Waiting for Acceptance\|Confirmed\|Marked as Confirmed\|Declined\|Cancelled) | Booking status | `Confirmed` |
| `checkin_date` | string | Checkin date | `2021-01-01` |
| `checkout_date` | string | Checkout date | `2021-01-03` |
| `guests` | number | Total number of guests | `2` |
| `pernighttotal` | number | Per night total | `100` |
| `taxes` | number | Total taxes | `100` |
| `totalamt` | number | Total amount | `100` |
| `fees` | array | Reservation fees | `` |
| `fees[].id` | Number | Fee id | `` |
| `fees[].feename` | string | Fee name | `Cleaning` |
| `fees[].feeamount` | Number | Fee amount | `69` |
| `messages` | array | Reservation messages | `` |
| `messages[].id` | Number | Message id | `50057` |
| `messages[].msgtext` | string | Message text | `Test message` |
| `messages[].message_html` | string | Message embeded html for ex link | `` |
| `messages[].msgtime` | string | Unix timestamp | `1601451728` |
| `messages[].from_host` | boolean | Indicate message sender, true meaning message from host to guest. | `1` |
| `review` | object | Review for the reservation | `` |
| `review.id` | number | unique identifier | `` |
| `review.reservation_id` | string | reservation id | `` |
| `review.review_title` | string | Review headline or title | `` |
| `review.review_desc` | string | Review description | `` |
| `review.website` | string | Review website | `Houfy` |
| `review.stay_checkin` | string | Check in date of the stay | `` |
| `review.stay_checkout` | string | Check out date of the stay | `` |
| `review.published_time` | string | Review published time | `` |
| `review.owner_response` | string | Indicator to write only owner response to review | `` |
| `guestinfo` | object |  | `` |
| `guestinfo.user_id` | number | User unique id | `` |
| `guestinfo.houfy_profile` | string | Guest's Houfy profile | `` |
| `guestinfo.first_name` | string | Guest's first name | `` |
| `guestinfo.last_name` | string | Guest's last name | `` |
| `guestinfo.email` | string | Guest's Houfy email address | `` |
| `guestinfo.profile_pic` | string | Guest's profile picture | `` |
| `guestinfo.languages` | array | List of languages | `` |
| `guestinfo.phone` | object | Phone number | `` |
| `guestinfo.phone.countrycode` | number | Will return XX | `` |
| `guestinfo.phone.phoneno` | number | Will return hidden | `` |
| `inquiry_sent` | number | Inquiry sent timestamp(unix timestamp) | `1610566655` |
| `acceptance_time` | number | Inquiry accepted timestamp(unix timestamp) | `1610566688` |
| `decline_time` | number | Inquiry declined timestamp(unix timestamp) | `` |
| `cancel_time` | number | Inquiry cancelled timestamp(unix timestamp) | `` |
| `door_lock_code` | string | Door lock code | `1234` |
| `check_in_time_from` | string | Check in window from | `12PM` |
| `check_in_time_to` | string | Check in window to | `6PM` |
| `check_out_time` | string | Check out time | `11AM` |

### Update reservation details

Sets the door lock code on the host's reservation. Responds {"success", "door_lock_code"} where door_lock_code echoes the value that was saved (null when nothing was updated). Note this endpoint answers HTTP 200 with success "no" (never 401) when the reservation is not found for the caller.

**Endpoint:** `POST /resdetails/update_reservationdetails/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Reservation id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `success` | string | no | operation response success yes or no | `yes` |
| `door_lock_code` | string | no | Door lock code | `1234` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `success` | string | operation response success yes or no | `yes` |
| `door_lock_code` | string | Door lock code | `1234` |

Example request body:

```json
{
    "success": "yes",
    "door_lock_code": "1234"
}
```

### Post review for the reservation

A guest posts a review for their reservation, or the host answers one (pass write_owner_response: "yes" with owner_response). Responds {"success","msg"}. Requires rating_avg between 0 and 5 and a non-empty review_desc. Fixed 2026-09: a successful post previously returned an HTML error page even though the review was saved.

**Endpoint:** `POST /resdetails/postreview/{id}`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Reservation id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `rating_avg` | Number | no | Star rating out of 5 | `5` |
| `review_title` | string | no | Review headline or title | `` |
| `review_desc` | string | no | Review description | `` |
| `owner_response` | string | no | Owner response to review (pass write_owner_response as "yes" to write owner response to the review) | `` |
| `write_owner_response` | string (yes\|) | no | Owner response to review | `` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `success` | string | operation response success yes or no | `yes` |
| `msg` | string | response description | `` |

Example request body:

```json
{
    "rating_avg": "5",
    "review_title": "",
    "review_desc": "",
    "owner_response": "",
    "write_owner_response": ""
}
```

### Get messages list

**Endpoint:** `POST /resdetails/list`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `offset` | number | no | it will return max 100 records count with the offset specified | `0` |
| `year` | number | no | YYYY format it will filter out per year as per check in date | `2021` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `reccount` | string | Total matching reservations/inquiries (returned as a string), independent of paging | `181` |
| `messages` | array | inquiries/reservations array (max 100 per call, newest first — page with offset) | `` |
| `messages[].id` | string | reservation code | `FFCVFFZ497` |
| `messages[].status` | string (Inquired\|Waiting for Acceptance\|Confirmed\|Marked as Confirmed\|Declined\|Cancelled\|) | request status (empty string for states without a label) | `Inquired` |
| `messages[].checkin_date` | string | check-in date (YYYY-MM-DD, can be null) | `` |
| `messages[].checkout_date` | string | check-out date (YYYY-MM-DD, can be null) | `` |
| `messages[].listing_id` | string | listing id (returned as a string) | `96` |
| `messages[].listing_title` | string | listing title | `` |
| `messages[].sender_uid` | string | guest (sender) user id (returned as a string) | `` |
| `messages[].owner_uid` | string | host (owner) user id (returned as a string) | `` |

Example request body:

```json
{
    "offset": 0,
    "year": 2021
}
```

### Get all reservations list(including imported and Houfy reservations). It will return only future events

**Endpoint:** `POST /resdetails/allevents`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `offset` | number | no | (optional) It will return max 100 records count with the offset specified | `0` |
| `dateFrom` | string | no | (optional) Starting Date in YYYY-MM-DD format | `2021-01-01` |
| `dateTo` | string | no | (optional) End Date in YYYY-MM-DD format | `2021-02-01` |
| `listing_id` | string | no | (optional) Listing id | `` |
| `source` | string (Houfy\|) | no | (optional) source | `` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `q` | string | The exact SQL query the events were selected with (legacy diagnostic field, kept for compatibility) | `` |
| `count` | string | Total matching events (returned as a string), independent of paging | `24` |
| `reservations` | array | events array (max 100 per call, ordered by check-in date — page with offset) | `` |
| `reservations[].id` | string | reservation/event id | `` |
| `reservations[].listing_id` | string | listing id (returned as a string) | `` |
| `reservations[].checkin_date` | string | check-in date (YYYY-MM-DD) | `` |
| `reservations[].checkout_date` | string | check-out date (YYYY-MM-DD) | `` |
| `reservations[].listing_title` | string | listing title | `` |
| `reservations[].importurlid` | string | source of the event ("Houfy", "internal", or an import-feed id) | `` |
| `reservations[].synced_from` | string | source calendar name ("Houfy"/"internal" for native events) | `` |
| `reservations[].status` | string | raw event status (e.g. reserved, blocked; can be null for imported events) | `` |
| `reservations[].summary` | string (Reserved\|Blocked) | Reserved or Blocked | `Reserved` |
| `offset` | number | echoes the request offset (0 when not supplied) | `0` |
| `startdate` | string | echoes the request dateFrom (null when not supplied) | `` |
| `enddate` | string | echoes the request dateTo (null when not supplied) | `` |
| `success` | string | "yes", or "no" when the dates are invalid or out of order | `yes` |
| `msg` | string | null on success; "dateTo is less than dateFrom" or "Invalid dates supplied" on date errors | `` |

Example request body:

```json
{
    "offset": 0,
    "dateFrom": "2021-01-01",
    "dateTo": "2021-02-01",
    "listing_id": "",
    "source": ""
}
```

### Send message for the reservation

⚠️ DIFFERENT BASE URL: this endpoint is served from https://www.houfy.com/apiv1 — NOT the default api.houfy.com. Calling it on api.houfy.com will fail. The generated code samples already use the correct host.

**Endpoint:** `POST /resdetails/sendmessage/{id}`

**⚠ Server override:** this operation is served from `https://www.houfy.com/apiv1` — NOT the default base URL.

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

**Path parameter:** `id` — Reservation id (required)

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `message` | string | no | Message text | `test` |
| `photos` | array | no | Photos or files | `` |
| `photos[].url` | string | no | Photo url | `` |
| `photos[].filetype` | string (image\|other) | no | File type | `image` |
| `metadata` | object | no | Metadata object | `` |
| `metadata.type` | string | no | Type | `guide` |
| `metadata.url` | string | no | URL | `https://www.example.com` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `success` | string | operation response success yes or no | `yes` |

Example request body:

```json
{
    "message": "test",
    "photos": [
        {
            "url": "string",
            "filetype": "image"
        }
    ],
    "metadata": {
        "type": "guide",
        "url": "https://www.example.com"
    }
}
```

### Accept/Decline the booking

**Endpoint:** `POST /resactions/respondtobooking`

**⚠ Server override:** this operation is served from `https://www.houfy.com/apiv1` — NOT the default base URL.

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `reservation_code` | string | no | Reservation code | `abcd` |
| `status` | string | no | Status 'accept' or 'decline' | `accept` |

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `success` | string | operation response success yes or no | `yes` |

Example request body:

```json
{
    "reservation_code": "abcd",
    "status": "accept"
}
```

## Users

User related operations

### Get user's listings, it will return only 100% completed listings.

Listings with verified 'N' are not shown on the Houfy marketplace. To verify you need to send a recent utility bill to info@houfy.com

**Endpoint:** `GET /users/listings`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `listings` | array | listings array | `` |
| `listings[].id` | string | Listing id (serialized as a string) | `77555` |
| `listings[].listingName` | string | Listing name | `Cute cottage` |
| `listings[].user_id` | string | The OWNER's user id (serialized as a string) — for cohosted rows this is the owner, not the caller | `51637` |
| `listings[].listing_photo` | string | Listing main photo URL. When the listing has no photo the URL ends at .../properties/ with no filename. | `https://www.assets.houfy.com/assets/images/properties/50fe40ddcf626770027a13ea23f0b018.jpg` |
| `listings[].active` | string (Y\|N) | Whether the listing is active or hidden | `Y` |
| `listings[].verified` | string (Y\|N) | Whether the listing is verified (unverified listings do not appear in Houfy search) | `Y` |
| `listings[].percentage` | string | Listing completion percentage (always "100" on this endpoint; serialized as a string) | `100` |
| `listings[].co_host` | string (Y\|N) | N for listings the caller owns, Y for listings they cohost | `Y` |

### Get user's incomplete listings.

Get incomplete listings of the user's account. Complete the listing to get it verified. To verify you need to send a recent utility bill to info@houfy.com

**Endpoint:** `GET /users/incompletelistings`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `listings` | array | listings array | `` |
| `listings[].id` | string | Listing id (serialized as a string) | `77555` |
| `listings[].listingName` | string | Listing name | `Cute cottage` |
| `listings[].user_id` | string | User id (serialized as a string) | `51637` |
| `listings[].listing_photo` | string | Listing main photo URL. When the listing has no photo the URL ends at .../properties/ with no filename. | `https://www.assets.houfy.com/assets/images/properties/50fe40ddcf626770027a13ea23f0b018.jpg` |
| `listings[].active` | string (Y\|N) | Whether the listing is active or hidden | `Y` |
| `listings[].verified` | string (Y\|N) | Whether the listing is verified | `Y` |
| `listings[].percentage` | string | Listing completion percentage, below 100 here (serialized as a string) | `60` |

### Get user details

**Endpoint:** `GET /users/profileinfo`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Responses
- `200` — successful operation

#### Response fields (200)

| Field | Type | Description | Example |
|---|---|---|---|
| `user_id` | string | User unique id (serialized as a string) | `51637` |
| `first_name` | string | First name (from the default login method) | `Tomas` |
| `last_name` | string | Last name | `Krones` |
| `profile_pic` | string | Profile picture URL | `https://www.assets.houfy.com/assets/images/profilepics/abc.jpg` |
| `contact_email` | string | Primary contact email | `host@example.com` |
| `phone` | object | First phone number on the account; both fields null when no phone is stored | `` |
| `phone.countrycode` | string | Country dial code (serialized as a string) | `1` |
| `phone.phoneno` | string | Phone number as stored (may include formatting) | `7074806362` |
| `languages` | array | One element per entry stored on the profile. In practice each element is null (the stored values do not resolve to language names); consumers should rely on the element count only. | `` |
| `success` | string (yes\|no) |  | `yes` |

### Update user details

Registers a callback URL for webhook delivery (max 4 per account; the URL must contain https://). Re-registering an existing URL is a no-op success. The response is always just {"success": "yes"|"no"}.

**Endpoint:** `POST /users/updateuser`

**Auth:** both headers are required on every call — `Authtoken` (self-serve, Settings & Privacy) and `Authkey` (issued privately by Houfy). Unauthorized calls receive `401`.

#### Body fields

| Field | Type | Required | Description | Example |
|---|---|---|---|---|
| `callback_url` | string | no | callback url | `` |

#### Responses
- `default` — Default response

Example request body:

```json
{
    "callback_url": ""
}
```

---
Generated from json/swagger3.yaml by `php artisan openapi:generate-postman` — do not edit by hand.
