Overview
A portal is the page that a guest opens before a stay. Its content comes from workspace configuration that you manage through API methods:Verification rules
What has to be collected or signed before check-in. Deposits, agreements, arrival details, questions.
Offers
The things that can be bought or requested. Late checkout, mid-stay clean, airport pickup.
Templates
The page itself: branding, layout blocks, and which offers appear where.
Guides
Published guest information that can appear in matching portals.
Brand kit
Workspace branding defaults for future portal sessions.
Before you start
All timestamps are epoch milliseconds. All money is whole cents (
25000 is $250.00) paired with a lowercase currency code.Verification rules
A verification rule says “for stays that look like this, collect this before check-in.” Each rule has a step type (what to collect), a config (how to present it), and optional targeting (which stays it applies to).Step types
The rule that governs everything: one rule per slot
Rules are evaluated inorder. For each slot, the first enabled rule whose targeting matches the stay wins, and every later rule for that slot is skipped.
This is what makes ordering meaningful. A specific rule has to sit above the general one, or it never fires:
damage_waiver and agreement do not, they sit in different slots and both apply.
Creating a rule
Call Create Verification Rule to add arrival details to every stay. Omittargeting to match every stay:
requiredFields must be a subset of what you collect. Requiring eta while collectEta is false is rejected.
Now a targeted, priced one. This is where the ordering rule starts to matter:
The other five step types
The other five step types
Agreement. A document to sign, with no charge attached. Pricing an agreement is rejected; use Damage waiver. A signature that can carry a price. Mandatory fee. Same shape as a deposit but non-refundable, so no Additional questions. Question Other guests. Details for everyone else on the booking. Set ID check. Collects an identity document. Takes
damage_waiver instead.model is flat or per_night; capInCents bounds a per-night total and must be at least amountInCents.releaseDelayDays.ids must be unique within the rule. single_select and multi_select need at least two options; text, long_text, and checkbox take none.minGuests, maxGuests, or both. maxGuests caps at 50 and fields caps at 20 entries, each with a unique id.title and instructions, plus optional requireContactPhoto and autoApprove.Targeting
Every criterion you set is ANDed. An empty or omittedtargeting matches every stay.
exclude_returning_guests sits alongside targeting and drops the rule for anyone who has stayed before. Useful for ID checks you only want to run once per person.
Reordering
Reorder Verification Rules takes every rule in the workspace. Put the rules in the required order and include eachexpected_updated_at value. The API rejects partial lists:
Editing and deleting
Update Verification Rule cannot changestep_type. The supplied config must match the existing step type. Edit uploaded agreement and waiver documents in the app.
Delete Verification Rule is permanent. Existing stays keep collected data, but new stays do not receive the step.
Priced rules (
security_deposit, mandatory_fee, and damage_waiver with a non-zero price) need Stripe connected before they can be enabled, but only once the workspace has an active template. Until then you can build them freely.Portal offers
An offer is one purchasable or requestable thing. Offers are workspace-level and reusable: create one, reference it from as many template layouts as you like.kind controls the behavior. purchase takes payment, request does not charge, and ad opens link_url.
Flat pricing
Call Create Portal Offer to create a purchasable or requestable offer:Priced by option
When one offer has variants, useby_option pricing. fieldLabel is what the chooser is called, and each option carries its own price:
by_option requires both fieldLabel and options. Omitting either is rejected.
Pricing off the booking total
percent_price charges a percentage of a booking figure instead of a fixed amount:
of accepts totalPrice, grossRent, netRent, subtotal, totalFees, or totalTaxes.
Targeting and availability
Offertargeting takes listingIds, listingGroupIds, inboxTypeIds (with inboxMode), night bounds, vacancy windows (minVacantNightsBeforeArrival, minVacantNightsAfterDeparture), and customAttributeConditions combined with all or any. Early checkin, for instance, only makes sense when the night before is free:
availability bounds when the offer is visible and bookable using visibleFrom, visibleUntil, bookableFrom, and bookableUntil.
Archiving
Archive Portal Offer deactivates an offer. It also removes the offer from each template layout. Restore Portal Offer reactivates the offer. It does not restore the removed layout blocks.Portal templates
A template defines the portal page. It contains branding, a header, an orderedlayout, and checkout behavior.
Status and versioning
Templates aredraft, active, or paused (plus archived). A new template starts as draft unless you say otherwise. Templates use expected_version, an integer, rather than a timestamp.
Layout blocks
layout is an ordered array. Every block needs a unique id you choose.
trustStrip items are secure_checkout, free_cancellation, verified_business, and powered_by_stripe.
Every offerId and offerIds entry has to be a real offer, so create offers first.
Building one
Call Create Portal Template with the portal configuration:#.
The rest of the config
listing_data controls property data on the page. Each field has a Boolean value, and enabled controls all fields.
after_payment controls the post-purchase state. confirmation_message controls the follow-up message. smart_lock enables the lock integration.
Duplicating, archiving, deleting
Duplicate Portal Template creates a new draft. Archive Portal Template and Restore Portal Template are reversible. Delete Portal Template is permanent. It requires an exactconfirm_name and a template with no recorded sales.
Portal guides
Portal guides provide guest information in published portal sessions. Published guide changes reach matching customer portals immediately. Use the portal guide methods to create, publish, duplicate, archive, restore, and reorder guides.Brand kit
The portal brand kit supplies the workspace defaults for new portal sessions. Existing sessions keep their saved branding snapshot. Use Get Portal Brand Kit and Update Portal Brand Kit to manage these defaults.End to end
Building a working portal with a deposit on long stays:1
Create the offers
Use Create Portal Offer for each item. Keep each returned
id.2
Create the verification rules
Use Create Verification Rule for the deposit and arrival details. New rules are enabled and appended.
3
Fix the order
Use Reorder Verification Rules. Put specific rules above general rules.
4
Build the template
Use Create Portal Template. Reference the offer IDs from step 1 in
layout.5
Activate
Use Update Portal Template with
status: "active" and the current expected_version.API methods
Errors
Read the current value before you retry a
409 response. A retry with the same lock value fails again.