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
When the current teaser version was saved (UTC); each save creates a new version, so this
matches updatedUtc. Before the teaser is first saved (when id is "0": the
default teaser is shown) it is the creation time of the project, Case Room or property the
teaser belongs to, so it never moves between reads.
etag
Type: string
required
ETag for concurrency control. Send back in If-Match on PATCH.
id
Type: string
required
Teaser ID. Opaque string — clients should treat the value as opaque
(do not parse). "0" while the teaser has never been saved.
updatedUtc
Type: stringFormat: date-time
required
When the teaser was last saved (UTC). Before the first save (when id is "0") it is the
creation time of the project, Case Room or property the teaser belongs to.
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: nullable{ code, message, navigateUri }
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.
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.
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.
Properties: 18
publishedUtc
Type: null|stringFormat: date-time
When the teaser was published — submitted to Propstreet for review (UTC).
Null if not yet published.
stage
Type: null|string
Teaser workflow stage. Values, in order:
property_added — a property is linked but no teaser draft exists yet;
drafting — a draft exists and is still editable; investors cannot see it;
published — the author has submitted the teaser to Propstreet for review
and it is locked from edits until unpublished; investors still cannot see it;
verified — Propstreet has reviewed and approved the teaser, so the author
may now communicate it;
communicated — the teaser has been sent to prospects.
Null if the teaser workflow has not started.
tags
Type: null|array ofstring
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).
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).
Properties: 20
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 Propstreet reviewed and approved the teaser (UTC). Null if not yet
verified.