Teaser

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.

    • code
      Type: string
      required

      Stable machine-actionable code clients branch on. Examples (non-exhaustive): no_property_attached, transferred_to_other_broker, teaser_locked_unpublish_first, room_teaser_not_designed.

    • message
      Type: string
      required

      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.

    • avgContractLength
      Type: object · YearsOrRange nullable

      Average remaining contract length (years).

    • categories
      Type: array object[] | null · InvestorTeaserCategory[]

      Asset-category mix.

      A single entry in the teaser's category mix.

    • conversions
      Type: array string[] | null

      Suggested alternative-use categories.

    • country
      Type: null | string

      ISO 3166-1 alpha-2 country code.

    • investmentSize
      Type: object · PriceOrRange nullable

      Total investment size (ticket size).

    • leasableUnits
      Type: object · AreaOrRange nullable

      Leasable area in sqm.

    • locality
      Type: null | string

      Locality (city / municipality).

    • noi
      Type: object · PriceOrRange nullable

      Net operating income.

    • parcelArea
      Type: object · AreaOrRange nullable

      Parcel area in sqm.

    • propertyCount
      Type: object · UnitOrRange nullable

      Number of properties in the portfolio.

    • rentalIncome
      Type: object · PriceOrRange nullable

      Annualised rental income.

    • rentedPercent
      Type: object · PercentOrRange nullable

      Occupied-space percentage.

    • tenure
      Type: null | string

      Property tenure: freehold or leasehold.

    • totalCosts
      Type: object · PriceOrRange nullable

      Total operating costs.

    • yearBuilt
      Type: object · YearOrRange nullable

      Year built.

    • yield
      Type: object · PercentOrRange nullable

      Gross yield (percentage form).

    • zoningCategories
      Type: array string[] | null

      Zoning categories (permitted uses).

    • zoningGfa
      Type: object · AreaOrRange nullable

      Permitted gross floor area in sqm.

  • publishedUtc
    Type: null | stringFormat: date-time

    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.