Teaser as exposed on the public API. The shape is the same regardless of
parent context (project / property pre-market / room) — the parent
determines authorship, authorization, and lifecycle, not the field shape.
createdUtc
Type: stringFormat: date-time
required
Creation timestamp (UTC).
etag
Type: string
required
ETag for concurrency control. Send back in If-Match on PATCH.
id
Type: string
required
Teaser ID. Opaque string. Stable across reads — clients should treat
the value as opaque (do not parse).
updatedUtc
Type: stringFormat: date-time
required
Last update timestamp (UTC).
changeOrigin
Type: null | string
Origin of the change: api, mcp, ui, or system.
Returned only on write responses; null on GET.
changeType
Type: null | string
Type of change that produced this version: create, update, or delete.
Returned only on write responses; null on GET.
communicatedUtc
Type: null | stringFormat: date-time
When the teaser was first communicated to prospects (UTC). Null if
not yet communicated.
exclusivity
Type: null | string
Project sales exclusivity: exclusive, non_exclusive, or
other. Mirrored from the parent project (null on property /
room contexts). Aligned with the project resource's exclusivity
field.
isPreMarket
Type: null | boolean
True when the teaser is pre-market (investor-initiated portfolio
teaser, before a project exists).
navigateUri
Type: null | string
Propstreet app deeplink in the propstreet:// URI scheme.
Opaque to integrators; used by first-party clients (Propstreet app,
Propstreet agent) for in-app navigation.
nudge
Type: object · TeaserNudge nullable
Optional steerable hint when a prerequisite is missing or the current
state blocks the obvious next move. Carries a stable code
alongside the human-readable message — branch on the code.
Human-readable message to surface to the calling user.
navigateUri
Type: null | string
Propstreet app deeplink in the propstreet:// URI scheme.
Opaque to integrators; used by first-party clients for in-app
navigation. Omitted when no caller-side action applies.
options
Type: object · TeaserOptions nullable
Author-curated visibility matrix for each teaser field. The author
is whoever owns the parent — broker on project / room, investor on
property pre-market. Drives what third-party investors see in the
projection.
avgContractLength
Type: object · TeaserDisplay nullable
Average remaining contract length (years).
categories
Type: object · TeaserDisplay nullable
Asset-category mix.
conversions
Type: object · TeaserDisplay nullable
Suggested alternative-use categories.
country
Type: object · TeaserDisplay nullable
ISO 3166-1 alpha-2 country code.
investmentSize
Type: object · TeaserDisplay nullable
Total investment size (ticket size).
leasableUnits
Type: object · TeaserDisplay nullable
Leasable area in sqm.
locality
Type: object · TeaserDisplay nullable
City / municipality.
locationClasses
Type: object · TeaserDisplay nullable
Per-category location class (A/B/C).
noi
Type: object · TeaserDisplay nullable
Net operating income.
parcelArea
Type: object · TeaserDisplay nullable
Parcel area in sqm.
propertyCount
Type: object · TeaserDisplay nullable
Number of properties in the portfolio.
rentalIncome
Type: object · TeaserDisplay nullable
Annualised rental income.
rentedPercent
Type: object · TeaserDisplay nullable
Occupied-space percentage.
tenure
Type: object · TeaserDisplay nullable
Property tenure: freehold or leasehold.
totalCosts
Type: object · TeaserDisplay nullable
Total operating costs.
yearBuilt
Type: object · TeaserDisplay nullable
Year built.
yield
Type: object · TeaserDisplay nullable
Gross yield.
zoningCategory
Type: object · TeaserDisplay nullable
Zoning category.
zoningGfa
Type: object · TeaserDisplay nullable
Zoning permitted gross floor area (sqm).
projection
Type: object · TeaserProjection nullable
Third-party investor projection — what investors actually see in
the prospect feed and shortlist views, rendered from the stored fields
after applying the author's visibility matrix. Hidden fields are
absent (not null) so the JSON shape mirrors the investor view.
When the teaser was published (UTC). Null if not yet published.
stage
Type: null | string
Teaser workflow stage: property_added, drafting,
published, verified, communicated. Null if the
teaser workflow has not started.
tags
Type: array string[] | null
Snapshot of tags visible on this teaser — the exact set the author
chose to disclose to investors at write time. Stored verbatim and
rendered verbatim; never resolved against the property's current
pool. Subsequent property-tag edits do not change what investors
see on this teaser; the author writes a new teaser to pick them up.
Omitted on thin steerable envelopes (e.g., when nudge.code
is no_property_attached, no_pre_market_yet, or
transferred_to_other_broker).
template
Type: object · TeaserTemplate nullable
What the author is allowed to choose for each option, given the
active billing plan, the underlying property data, and the parent
context (project / property pre-market / room).
avgContractLength
Type: object · TeaserOptionTemplate nullable
Average remaining contract length (years).
categories
Type: object · TeaserOptionTemplate nullable
Asset-category mix.
conversions
Type: object · TeaserOptionTemplate nullable
Suggested alternative-use categories.
country
Type: object · TeaserOptionTemplate nullable
ISO 3166-1 alpha-2 country code.
investmentSize
Type: object · TeaserOptionTemplate nullable
Total investment size (ticket size).
leasableUnits
Type: object · TeaserOptionTemplate nullable
Leasable area in sqm.
locality
Type: object · TeaserOptionTemplate nullable
City / municipality.
locationClasses
Type: object · TeaserOptionTemplate nullable
Per-category location class (A/B/C).
noi
Type: object · TeaserOptionTemplate nullable
Net operating income.
parcelArea
Type: object · TeaserOptionTemplate nullable
Parcel area in sqm.
propertyCount
Type: object · TeaserOptionTemplate nullable
Number of properties in the portfolio.
rentalIncome
Type: object · TeaserOptionTemplate nullable
Annualised rental income.
rentedPercent
Type: object · TeaserOptionTemplate nullable
Occupied-space percentage.
tags
Type: array string[]
The property's full tag pool. The author picks a subset of these for
the teaser's tags snapshot. Empty array when the property has
no tags or the active plan does not expose tags.
tenure
Type: object · TeaserOptionTemplate nullable
Property tenure: freehold or leasehold.
totalCosts
Type: object · TeaserOptionTemplate nullable
Total operating costs.
yearBuilt
Type: object · TeaserOptionTemplate nullable
Year built.
yield
Type: object · TeaserOptionTemplate nullable
Gross yield.
zoningCategory
Type: object · TeaserOptionTemplate nullable
Zoning category.
zoningGfa
Type: object · TeaserOptionTemplate nullable
Zoning permitted gross floor area (sqm).
title
Type: null | string
Author-side display title (the teaser title as seen by whoever owns
the parent — broker on project / room, investor on property pre-
market). Composed from categories and locality at read time; never
stored. Null when both categories and locality are unknown.
uri
Type: null | string
Opaque canonical Propstreet entity URI for deep linking.
verifiedUtc
Type: null | stringFormat: date-time
When the teaser was verified (UTC). Null if not yet verified.