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.
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..
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 v2 & 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 |
| Messages | Retrieve and send message by leadUid |
| Owner Adjustments | Retrieve info and manage property's owner adjustments |
| Rate Multipliers | Retrieve and update channel(s)' rate multiplier setting |
| Rooms Bulk | Add new or update existing property' rooms |
Updates on existing endpoints
Agencies
- Path: /v2/agencies -> /api/v3/agencies
- Response:
- Added currencyCode
Amenities
- Path: v2/amenities → /api/v3/amenities
- Method:
- Added: GET/{uid}, POST, DELETE
- Updated: PUT can update amenity's description only
- Response: key-value pair in v2 becomes amenity object in v3
Bedtypes
- Path: v2/bedtypes → /api/v3/rooms
- Method:
- Added: GET/{uid}
- Updated fields: Bed count values on new v3 is wrapped in an object “bedCounts", instead of being on root of the object in v2
| Method | Request | Response |
|---|---|---|
| GET | new bedCounts objects | |
| POST | new bedCount objects, roomType, roomNumber | new bedCounts objects |
| PUT | new bedCount objects, roomType | new bedCounts objects |
Custom Amenities
- Path: v2/customamenities → /api/v3/custom-amenities
- Method:
- Removed: PUT
- Updated fields:
| Method | Renamed | New |
|---|---|---|
| GET | Request: query param: propertyUid becomes objectUid | Response: Added objectUid and objectType |
| POST | Request: body param: propertyUid becomes objectUid, added objectType | Response: Added objectUid, objectType, uid |
Custom Data
- Path: v2/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 propertyUid, leadUid, index |
| POST | Added leadUid in body param | Added propertyUid, leadUid, index |
Custom Data Fields
- Path: v2/customdatafields → api/v3/custom-data-fields
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Added index | |
| POST | Added variable, index | Added index |
Custom Fees
- Path: v2/customfees → /api/v3/fees
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Renamed bookingcomType > bookingDotComType. Added attestation, propertyUid, hvmiType, longTermStayExemption | |
| POST / PUT | Rename isOptional > optional, bookingcomType > bookingDotComType | Added attestation, propertyUid, hvmiType, longTermStayExemption |
External Calendars
- Path: v2/externalcalendars → /api/v3/icals
Guest
- Path: v2/guests → /api/v3/guests
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Renamed createdDate (Date) to created (LocalDateTime) . Added address2. Removed airbnbID, agencyUid |
Jobs
- Path: v2/jobs → /api/v3/jobs
| Method | Request | Response |
|---|---|---|
| GET | Added new query params from & to. Added ability to query jobs from multiple propertyUids | Added startLocalDateTime, startZonedDateTimeendLocalDateTime, endZonedDateTime. Removed jobDatestartHour, startMinuteendHour, endMinute |
| GET/{uid} | - | same as GET |
| POST | - | same as GET |
| PUT | - | same as GET |
Leads
- Path: v2/leads → /api/v3/leads
- Method:
- Removed PUT
- Added PATCH
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | ReplacedmodifiedSince > updatedSincecheckin_to > checkInTocheckin_from > checkInFromcheckout_to > checkOutTocheckout_from > checkOutFromAdded ability to query by list of leadUidsAdded _cursor paramRemoved offset param | ReplacedleadType > typecheckInDateTime > checkInZonedDateTimecheckOutDateTime > checkOutZonedDateTimeexternalBookingID > externalBookingIdaddress > address1created > metadata. createdUtcDateTimemodified > metadata.updatedUtcDateTimecreationMetaData > metadata.creationCircumstancespreferredLocale > guestInformation.preferredLocaleobjectbooked > bookedUtcDateTimeAdded assignee object (uid & type)metadata objectguestInformation objectguestInformation.passportIdguestInformation.passportCountryCodeRemoved checkInLocalDatecheckOutLocalDatecheckInDatecheckOutDatehasCompletedPreArrivalFormassigneeUidrentalAgreementURL |
| 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: v2/localspots → /api/v3/local-spots
Orders
- Path: v2/orders → /api/v3/orders
- Method:
- Removed GET/{uid}
- GET now supports query by
guestUid, besides existingpropertyUid&leadUid
- Updated fields (removed
balancein 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: v2/owners → /api/v3/owners
- Method:
- Removed: POST & PUT
- Added: PATCH
- GET query by
agencyUidonly. (removedpropertyUid) - DELETE: with v3, delete the owner for good. While with v2, remove the owner from the property
- Updated fields
| Renamed / Removed | New fields |
|---|---|
ccs [array] becomes ccEmails "string". Removed commissionRate | Added airbnbUserId, businessName, country, externalCalendarUrl, permissionTypes , phoneNumberAreaCode, pictureUrl, preferredLocale, website |
Photos
- Path: v2/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: v2/pincodes → /api/v3/pin-codes
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Added startDateTimeUTC, endDateTimeUTC. Removed startDateTime, endDateTime | |
| POST | Added propertyUid | same as GET |
| PUT | AddedpropertyUid, leadUid, lockType, startDateTimeUTC, endDateTimeUTC | same as GET |
Pricing Periods
- Path: v2/pricingperiods →/api/v3/pricing-periods
- Method:
- GET: new query param
to - POST: new
operationtoREMOVE, besideSET
- GET: new query param
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | - | Renamed amount → price, isCheckinAllowed → availableForCheckIn, isCheckoutAllowed → availableForCheckOut. Added name. Removedfrom, to |
| POST | Addedoperation | Same as GET |
Pricing Periods Bulk
- Path: v2/pricingperiodsbulk → /api/v3/pricing-periods/bulk
- Updated fields:
| Method | Request | Response |
|---|---|---|
| POST | Renamed amount → price, isCheckinAllowed → availableForCheckIn, isCheckoutAllowed → availableForCheckOut | |
| GET | Added new query filter: _offset, _limit, updatedSince |
Properties
- Path: v2/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, availability objectavailability.allowBookingRequestsAboveMaximumStayavailability.allowBookingRequestWhenOutOfLeadTimeavailability.checkInTimeEnd,availability.checkInTimeEndFlexible,availability.daysOfTheWeekToCheckInOnaddress objectpricing objectpricing.ignoreTaxRateChargeOverXDayspricing.daysOverWhichTaxRateChargeShouldBeIgnoredpricing.cleaningFeeTaxRatechannel-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 endpointlistingType,roomType,businessType,bookingWindowAfterCheckoutrentalConditionavailabilityCalendarUrl,reviewscreatedDatelistingLinks object > v3/property-channel-links endpointpropertyURLcurrencySymbolacceptInstantBookacceptBookingRequestflipkeyIDhomeAwayID | |
| POST & PUT | same as GET's response | same as GET's response |
Property Channel Links
- Path: v2/property-channel-links → /api/v3/property-channel-links
- Method:
- PUT: removed
channelin Request
- PUT: removed
Property Descriptions
- Path: v2/propertydescriptions → /api/v3/property-descriptions
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Added propertyUid, houseManual | |
| PUT | Added propertyUid, `houseManual | Added propertyUid, `houseManual |
Property Ownership
- Path: v2/propertyownership → /api/v3/property-ownership
- Method:
- Removed POST
- Added PATCH
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Renamed ownerUid > owner.uid.Added email,firstNamelastNamephoneNumberAreaCodephoneNumberbusinessNamepictureUrlpreferredLocaleccEmailsagencyCommissionRatepermissionTypescopyOwnerWhenBookingConfirmedcollectAndRemitTaxes | |
| PATCH | same as GET response | same as GET response |
Property Pricing Rules
- Path: v2/pricingrules → /api/v3/property-pricing-rules
- Method:
- Added PUT
- Updated fields
| Method | Request | Response |
|---|---|---|
| GET | Renamed priceRuleType > ruleTypeAdded increaseRateincreaseRateLowerBounddecreaseRatedecreaseRateHigherBounddecreaseRateMonthlydecreaseRateHigherBoundMonthlyenabledForAirbnb | |
| PUT | same as GET response | same as GET response |
Property Rules
- Path: v2/propertyrules → /api/v3/property-rules
- In v2, 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 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 v2 it used to update only the description field
- Updated fields:
| Method | Request | Response |
|---|---|---|
Added rule, propertyUidRemoved locale | ||
| POST | Added ruleRemoved locale | Same as GET response |
| PUT | Added propertyUid, rule | Same as GET response |
Property Calendar
- Path: v2/propertycalendar → /api/v3/property-calendar
- The price values returned by the API (calendarEntry.pricing.value) are now serialised to number instead of string (eg "value": 100.00 instead of "value": "100.00")
- Method:
- Added GET for multiple propertyUids
- Updated fields
| Update details | Request | Response |
|---|---|---|
| GET (new) | notes becomes availabilityComments | - |
| GET/{propertyUid} (existing) | notes becomes availabilityComments | - |
Quotes
- Path: v2/quote → /api/v3/quotes
- Method:
- Removed GET
- Added POST
- Updated fields
| Update category | Request | Response |
|---|---|---|
| Renamed | guestNumber > guests | rent > rent.rentNetPriceextraGuestFeeAmount > rent.extraGuestsNetPriceamount > rent.grossPricesecurityDepositAmount > securityDepositdiscount > rent.discount objectcleaningFeeAmount > fees.cleaningFee.grossPricecleaningFeeTaxAmount > fees.cleaningFee.taxAmountcustomFees array > otherFees arrayamountToPay > totalAmountchannelCommission > channelCommission.amount |
| Added | agencyUidoverrides 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 | totalPrice | extraGuestFeeTaxes property objecttotalWithoutTaxestotalWithTaxestotalWithTaxesAndSecDeposit |
Reviews
- Path: v2/reviews → /api/v3/reviews
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | new query updateSince | Added propertyUidleadUidcommentresponseDateTimeUTCupdatedUtcDateTime |
| POST / PUT | Added reviewResponses object | same as GET response |
Reviews Bulk
- Path: v2/reviewsbulk → /api/v3/reviews-bulk
- Response same as /api/v3/reviews GET
Services
- Path: v2/services → /api/v3/services
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | Add query params agencyUid & cateredTo | RenamedcateredToType → cateredToRemoved serviceProviderUID |
| POST | - | same as GET |
| PUT | Added body param serviceProviderUID | same as GET |
Service Providers
- Path: v2/serviceproviders → /api/v3/service-providers
- Updated fields:
| Method | Request | Response |
|---|---|---|
| PUT | Added body param agencyUid | - |
Transactions
- Path: v2/transactions → /api/v3/transactions
- Updated fields:
| Method | Request | Response |
|---|---|---|
| GET | RenamedreferenceTransactionID → referenceTransactionId,created → createdZonedDateTime,isManual → manualAdded query param createdSince | Renamed:referenceTransactionID → referenceTransactionId,created → createdZonedDateTime,isManual → manualAdded: orderUidtransactionIdRemoved: order object |
| POST | RenamedreferenceTransactionID → referenceTransactionId,created → createdZonedDateTime,isManual → manualAdded transactionIdfullPaymenterrorMessage | Same as GET |
Units
- Path: v2/units → /api/v3/units
Webhooks
- Path: v2/webhooks → /api/v3/webhooks
| Method | Request | Response |
|---|---|---|
| GET | Added creatorIdentifier | |
| POST | Added new eventType- NEW_BOOKING_REQUEST- NEW_HOLDAdded creatorIdentifier | Added creatorIdentifier |
