There are 3 versions of Hostfully APIs:
- v1: to be removed shortly after version 3 is released to production
- v2: to be deprecated. It's still working, but no longer receive bug fixes and added features
- v3: to be the active supported version.
A - For Hostfully Integration Partners, the main difference, is the permission service.
- For v1, Property Managers (PMs) active once on agency level, and it will be applied for all of their properties.
- For v3, PMs need to take an extra step, to explicitly activate the integration on the property level. Only the property toggle ON will be accessible to integration / channel partners.
Also for Hostfully Integration Partners, the difference is with OAuth 2.0 Authorization Code Flow, which is how Hostfully Customers authorize Partners to access their data..
If you are on v1, and need help migrating v3, (to prepare UI for property-level activation), please reach out to [email protected] for further support.
B - For Hostfully Premium accounts, the authentication is going to continue to be served by the api keys, just like it was in V1 and V2 versions of our API key.
To make calls to v3, update your requests to use the new v3 endpoints. Some endpoints take different parameters or return different data; make sure you check out the API documentation here: https://dev.hostfully.com/v3.0/reference/getting-started
If you have any question or suggestion on the Hostfully APIs, please reach out to our API Support team at [email protected].
Difference in endpoints between v1.5 & v3
New Endpoints:
| Endpoints | Descriptions |
|---|---|
| Available Amenities | Return all available amenities that can be interacted with |
| Available Property Rules | Return all property rules that can be interacted with |
| Employees | Retrieve and update team member(s)'s info |
| Extra Guests | Retrieve info of extra guest by leadUid |
| GraphQL | All graphQL endpoints like propertiesql, and leadsql |
| iCals | Return property’s iCal configuration |
| Messages | Retrieve and send message by leadUid |
| Property Calendars | Retrieve property's availability and pricing settings |
| Property Channel Links | Update channel links for a property for supported channels: HomeToGo, Golightly, VacayMyWay, Homads |
| Property Ownership | Manage property's ownership setting |
| Property Pricing Rules | Retrieve pricing rules for a given property |
| Owner Adjustments | Retrieve info and manage property's owner adjustments |
| Rate Multipliers | Retrieve and update channel(s)' rate multiplier setting |
| Reviews Bulk | Add reviews in bulk |
| Rooms Bulk | Add new or update existing property' rooms |
| Sub Units | Returns information about master-sub units relation, and whether the master unit is bookable. |
Updates on existing endpoints
Agencies
- Path: /v1/agencies -> /api/v3/agencies
- Response:
- Added
currencyCode - Added
currency - Added
rentalCondition
- Added
Amenities
- Path: v1/amenities → /api/v3/amenities
- Method:
- Added: GET/{uid}, POST, DELETE
- Updated: PUT can update amenity's description only
- Response: key-value pair in v1 becomes amenity object in v3
Bedtypes
- Path: v1/bedtypes → /api/v3/rooms
- Method:
- Added: GET/{uid}, POST, PUT, DELETE
- Updated fields: Bed count values on new v3 is wrapped in an object “bedCounts", instead of being on root of the object in v1
| Method | Request | Response |
|---|---|---|
| GET | Renamed propertyUid > objectUid . Added objectType | new bedCounts objects |
| POST | new bedCount objects, roomType, roomNumber | new bedCounts objects |
| PUT | new bedCount objects, roomType | new bedCounts objects |
Custom Amenities
- Path: v1/customamenities → /api/v3/custom-amenities
- Method:
- Removed: PUT
- Updated fields:
| Method | Renamed | New |
|---|---|---|
| GET | Request: Rename propertyUid > objectUidAdded objectType | Response: Added objectUid and objectType. Replaced id > uid |
| POST | Same as GET | Same as GET |
Custom Data
- Path: v1/customdata → api/v3/custom-data
- Method:
- Added: DELETE.
- Delete custom data of a property or lead. The custom data is identified by '
customDataFieldUid' and one of 'propertyUid' or 'leadUid'
- Delete custom data of a property or lead. The custom data is identified by '
- Added: DELETE.
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Query by leadUid or propertyUid | Added customDataField object |
| POST | Added leadUid in body param | Same as GET |
Custom Data Fields
- Path: v1/customdatafields → api/v3/custom-data-fields
- Method:
- Added GET/{uid}, POST, DELETE
- Updated fields:
| Method | Request | Response |
|---|---|---|
| POST | Added variable, index | Added agencyUid, variable, indexReplaced id > uid |
Custom Fees
- Path: v1/customfees → /api/v3/fees
- Method:
- Added GET/{uid}, PUT, DELETE
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | - | Replace id > uidRenamed isOptional > optional.Added airbnbType, bookingDotComType, vrboType, hostfullyType, hvmiType, attestation, propertyUid, taxationRate, type, longTermStayExemption |
| POST | Rename isOptional > optionalAdded airbnbType, bookingDotComType, vrboType, hostfullyType, hvmiType, attestation, propertyUid, taxationRate, type, longTermStayExemption | same as GET |
Guest
- Path: v1/guests → /api/v3/guests
- Method:
- Removed: GET/{uid}, POST, PUT, DELETE
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Renamed createdDate (Date) to created (LocalDateTime) . Added address2. Removed airbnbID, agencyUid, id, lastLogin, registrationToken |
Jobs
- Path: v1/jobs → /api/v3/jobs
| Method | Request | Response |
|---|---|---|
| GET | Added new query params from & to. Added ability to query jobs from multiple propertyUids | Added startLocalDateTime, startZonedDateTime, endLocalDateTime, endZonedDateTime, leadUid, propertyUidRemoved jobDate, startTime, endTime |
| GET/{uid} | - | same as GET |
| POST | Removed jobDate, startTime, endTimeAdded startLocalDateTime object, endLocalDateTime object, leadUid | same as GET |
| PUT | Removed jobDate, startTime, endTimeAdded startLocalDateTime object, endLocalDateTime object, serviceUid | same as GET |
Leads
- Path: v1/leads → /api/v3/leads
- Method:
- Removed PUT
- Added PATCH
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Replacedmodified > updatedSincecheckin_to > checkInTocheckin_from > checkInFromcheckout_to > checkOutTocheckout_from > checkOutFromAdded ability to query by list of leadUidsAdded _cursor paramRemoved offset, status param | Replacedproperty.uid > propertyUidcheckInDateTime > checkInZonedDateTimecheckOutDateTime > checkOutZonedDateTimecreated > metadata. createdUtcDateTimepreferredLocale > guestInformation.preferredLocaleobjectdateBooked > bookedUtcDateTimeaddress details from property > lead Added agencyUidassignee object (uid & type)metadata objectguestInformation objectguestInformation.passportIdguestInformation.passportCountryCodeexternalBookingIdtypearrivalLocalDateTimedepartureLocalDateTimeRemoved agency objectproperty objectstayDetails object (kept extraNotes)checkInLocalDatecheckOutLocalDatecheckInDatecheckOutDateipaddressuserAgentquoteAmount |
| GET/{uid} | - | Same as GET |
| POST | Please refer to https://dev.hostfully.com/v3.0/reference/leads-flow for more details | Same as GET |
Local Spots
- Path: v1/localspots → /api/v3/local-spots
- Method: added /GET/{uid}
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Replaced id > uidRenamed note > shortNote | |
| POST / PUT | Renamed `note > shortNote | Same as GET |
Orders
- Path: v1/orders → /api/v3/orders
- Method:
- Removed GET/{uid}
- GET now supports query by
guestUid, besides existingpropertyUid&leadUid
- Updated fields (removed
balance,transactionsobject in the response)
| Renamed | New fields |
|---|---|
baseAmount > rent.rentNetPriceextraGuestFeeAmount > rent.extraGuestsNetPricesubTotal > rent.grossPricesecurityDepositAmount > securityDepositcleaningFeeAmount > fees.cleaningFee.grossPricecleaningFeeTaxAmount > fees.cleaningFee.taxAmountorderFees array > otherFees arraytotal > totalAmountchannelCommission > channelCommission.amount | creationUtcDateTimerent.listPrice = rentNetPrice + extraGuestsNetPricediscount objectrent.netPrice = rent.listPrice - rent.discount.discountAmounttaxationRategrossPrice = netPrice + taxAmountfees object (cleaningFee + otherFees)cleaningFee objectotherFees objectservices objectadjustments arrayadjustmentItems arrayrateMultipliertotalTaxAmount" |
Owners
- Path: v1/owners → /api/v3/owners
- Method:
- Removed: POST & PUT
- Added: PATCH
- GET query by
agencyUidandownerUidonly. (removedpropertyUid) - DELETE: with v3, delete the owner for good. While with v1, remove the owner from the property
- Updated fields
| New fields |
|---|
Added uid, airbnbUserId, businessName, country, externalCalendarUrl, permissionTypes , phoneNumberAreaCode, pictureUrl, preferredLocale, website, ccEmails |
Photos
- Path: v1/photos → /api/v3/photos
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Added airbnbRoomId, propertyUid, originalImageUrl, largeScaleImageUrl, mediumScaleImageUrl, largeThumbnailScaleImageUrl. Removed url | |
| POST | AddedairbnbRoomId, description, displayOrder | same as GET |
| PUT | Added airbnbRoomId | same as GET |
Pincodes
- Path: v1/pincodes → /api/v3/pin-codes
- Method: added PUT
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Removed lockTypeAdded leadUid | Renamed type > lockTypeAdded uid, startDateTimeUTC, endDateTimeUTC, pincodeUrlRemoved startDateTime, endDateTime, propertyUid, id, userEmail |
| POST | Added pincodeUrl, startDateTimeUTC, endDateTimeUTC | same as GET |
Pricing Periods
- Path: v1/pricingperiods →/api/v3/pricing-periods
- Method:
- GET: new query param
from - POST: new
operationtoREMOVE, besideSET
- GET: new query param
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | - | Renamed amount → priceisCheckinAllowed → availableForCheckInisCheckoutAllowed → availableForCheckOutuid > propertyUidAdded nameRemoved from, to |
| POST | Addedoperation methodBody request fields are similar to GET response | Same as GET |
Pricing Periods Bulk
- Path: v1/pricingperiodsbulk → /api/v3/pricing-periods/bulk
- Method:
- Added GET
Properties
- Path: v1/properties → /api/v3/properties
- Method:
- GET: added new query filter:
_offset,_limit,updatedSince
- GET: added new query filter:
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | added new query filter: _offset, _limit, updatedSince | Added agencyUid,address object for all address settingsavailability object for all availability settingspricing object for all pricing settingschannel-related objects: airbnbData, bookingDotComData, hvmiData, vrboDataguideBookRecsOnlyUrlaccountingIdshowPropertyExactLocationagentUidbookingNotesextraNotesownerNotescancellationPolicyuseMinimumPriceRuleupdatedUtcDateTime |
| GET | Renamed bedCount > beds,type > propertyTypemaximumGuests > availability.maxGuestsareaSize > area.sizeareaSizeUnit > area.unitTypedefaultCheckinTime > availability.checkInTimeStartdefaultCheckoutTime > availability.checkOutTimepicture > pictureLinkaddress1 > address.addresspostalCode > address.zipCodebaseDailyRate > pricing.dailyRateweekEndRatePercentAdjustment > pricing.weekendAdjustmentRatetaxationRate > pricing.taxRatesecurityDepositAmount > pricing.securityDepositcleaningFeeAmount > pricing.cleaningFeefloor > numberOfFloorsairBnBID > airbnbData.airBnBId | |
| GET | Removed pricingRule > v3/property-pricing-rules endpointbedType > v3/rooms endpointrules > v3/pricing-rulesendpointdescriptions and shortDescription moved to v3/propertydescriptions endpointlistingType,roomType,businessType,bookingWindowAfterCheckout,availabilityCalendarUrl,reviewscreatedDatelistingLinks object > v3/property-channel-links endpointpropertyURLcurrencySymbolhostfullyBookingStrategyairbnbBookingStrategyvrboBookingStrategyflipkeyIDhomeAwayID | |
| POST & PUT | same as GET's response | |same as GET's response |
Property Descriptions
- Path: v1/propertydescriptions → /api/v3/property-descriptions
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Added propertyUid, houseManual | |
| PUT | Added propertyUid, houseManual | Added propertyUid, houseManual |
Property Rules
- Path: v1/propertyrules → /api/v3/property-rules
- In v1, this endpoint works with property's House Rules in property's Fees & Policies tab
- In v3, this endpoint works with property's Rules section in property's Amenities tabz
- Method:
- Added GET/{uid}, DELETE, PATCH (with an option to provide fieldsToClear collection for resetting values to null - only descripition field is nullable)
- PUT: for v3 updates entire entity, before in v1 it used to update only the description field
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Added uid, rule, propertyUidRemoved locale | |
| POST | Added rule | Same as GET response |
Quotes
- Path: v1/quote → /api/v3/quotes
- Method:
- Removed GET
- Added POST
- Add query by leadUid
- Updated fields
| Update category | Request | Response |
|---|---|---|
| Renamed | guestCount > guests | extraGuestFeeAmount > rent.extraGuestsNetPriceamount > rent.grossPricesecurityDepositAmount > securityDepositcleaningFeeAmount > fees.cleaningFee.grossPricecustomFees array > otherFees array` |
| Added | agencyUidleadUidoverrides object | rent.listPrice = rentNetPrice + extraGuestsNetPricerent.discount object {}rent.netPrice = rent.listPrice - rent.discount.discountAmountrent.taxationRaterent.grossPrice = rent.netPrice + rent.taxAmountfees object (cleaningFee & otherFees objects)services objectadjustments arrayadjustmentItems arrayoverrides objecttotalPrice = totalAmount + overridesforce100PercentPaymentAtReservationcurrencySymbol |
| Removed | property objecttotalWithoutTaxestotalWithTaxestotalWithTaxesAndSecDeposit |
Reviews
- Path: v1/reviews → /api/v3/reviews
- Method:
- Added GET/{uid}, PUT, DELETE
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Added query paramupdateSinceleadUid | Added uidpropertyUidleadUidsourceprivateFeedbackreviewResponse objectratingCategories objectcommentupdatedUtcDateTime |
| POST | Removed agencyUidAdded leadUidsourceprivateFeedbackreviewResponses objectratingCategories object | same as GET response |
Services
- Path: v1/services → /api/v3/services
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Add query params agencyUid & cateredTo | Renamed cateredToType → cateredToRemoved serviceProviderUID |
| POST | - | Same as GET |
| PUT | Added body param serviceProviderUID | Same as GET |
Service Providers
- Path: v1/serviceproviders → /api/v3/service-providers
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Removed query param propertyUid | - |
| PUT | Added body param agencyUid |
Transactions
- Path: v1/transactions → /api/v3/transactions
- Method:
- Added POST method
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Added query param createdSince | Renamed:transactionID → transactionIdcreated → createdZonedDateTime,isManual → manualAdded: uidorderUidtransactionIdreferenceTransactionIDerrorMessagestatustransactionFees objectRemoved: idagencyIDorder object |
| GET/{uid} | Removed id query paramAdded uid query param | Same as GET |
Webhooks
- Path: v1/webhooks → /api/v3/webhooks
- Method:
- Added GET/{uid}
| Method | Request | Response |
|---|---|---|
| GET | Added query param integrationWebhooks (boolean) | Removed idAdded uidagencyUidwebhookTypecreatorIdentifier |
| POST | Added many new eventTypeAdded agencyUidwebhookTypecreatorIdentifier | Same as GET |
