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: string Format: 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: string Format: 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 | string Format: 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 · TeaserNudgenullable
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 · TeaserOptionsnullable
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 · TeaserDisplaynullable
Average remaining contract length (years).
categories
Type: object · TeaserDisplaynullable
Asset-category mix.
conversions
Type: object · TeaserDisplaynullable
Suggested alternative-use categories.
country
Type: object · TeaserDisplaynullable
ISO 3166-1 alpha-2 country code.
investmentSize
Type: object · TeaserDisplaynullable
Total investment size (ticket size).
leasableUnits
Type: object · TeaserDisplaynullable
Leasable area in sqm.
locality
Type: object · TeaserDisplaynullable
City / municipality.
locationClasses
Type: object · TeaserDisplaynullable
Per-category location class (A/B/C).
noi
Type: object · TeaserDisplaynullable
Net operating income.
parcelArea
Type: object · TeaserDisplaynullable
Parcel area in sqm.
propertyCount
Type: object · TeaserDisplaynullable
Number of properties in the portfolio.
rentalIncome
Type: object · TeaserDisplaynullable
Annualised rental income.
rentedPercent
Type: object · TeaserDisplaynullable
Occupied-space percentage.
tenure
Type: object · TeaserDisplaynullable
Property tenure: freehold or leasehold.
totalCosts
Type: object · TeaserDisplaynullable
Total operating costs.
yearBuilt
Type: object · TeaserDisplaynullable
Year built.
yield
Type: object · TeaserDisplaynullable
Gross yield.
zoningCategory
Type: object · TeaserDisplaynullable
Zoning category.
zoningGfa
Type: object · TeaserDisplaynullable
Zoning permitted gross floor area (sqm).
projection
Type: object · TeaserProjectionnullable
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 · TeaserTemplatenullable
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 · TeaserOptionTemplatenullable
Average remaining contract length (years).
categories
Type: object · TeaserOptionTemplatenullable
Asset-category mix.
conversions
Type: object · TeaserOptionTemplatenullable
Suggested alternative-use categories.
country
Type: object · TeaserOptionTemplatenullable
ISO 3166-1 alpha-2 country code.
investmentSize
Type: object · TeaserOptionTemplatenullable
Total investment size (ticket size).
leasableUnits
Type: object · TeaserOptionTemplatenullable
Leasable area in sqm.
locality
Type: object · TeaserOptionTemplatenullable
City / municipality.
locationClasses
Type: object · TeaserOptionTemplatenullable
Per-category location class (A/B/C).
noi
Type: object · TeaserOptionTemplatenullable
Net operating income.
parcelArea
Type: object · TeaserOptionTemplatenullable
Parcel area in sqm.
propertyCount
Type: object · TeaserOptionTemplatenullable
Number of properties in the portfolio.
rentalIncome
Type: object · TeaserOptionTemplatenullable
Annualised rental income.
rentedPercent
Type: object · TeaserOptionTemplatenullable
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 · TeaserOptionTemplatenullable
Property tenure: freehold or leasehold.
totalCosts
Type: object · TeaserOptionTemplatenullable
Total operating costs.
yearBuilt
Type: object · TeaserOptionTemplatenullable
Year built.
yield
Type: object · TeaserOptionTemplatenullable
Gross yield.
zoningCategory
Type: object · TeaserOptionTemplatenullable
Zoning category.
zoningGfa
Type: object · TeaserOptionTemplatenullable
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 | string Format: date-time
When the teaser was verified (UTC). Null if not yet verified.