Updates the room teaser (post-NDA disclosure surface) (PATCH — only specified fields are changed). Auto-creates the room teaser on the first PATCH if one does not yet exist.

Send If-Match with the ETag from the most recent GET. The server returns 412 Precondition Failed if the teaser has been modified by another writer since.

See PATCH /api/v1/projects/{id}/teaser for full patch and validation semantics. Unlike the project surface, room PATCH is allowed even after the parent project is published — the disclosure surface keeps moving across the prospect lifecycle.

Path Parameters
  • id
    Type: string
    required

    Project ID

  • roomId
    Type: string
    required

    Room ID

Headers
  • If-Match
    Type: string

    ETag for optimistic concurrency

Body·
required

Fields to update

Request body for PATCH on the V1 teaser routes (PATCH /api/v1/projects/{id}/teaser, PATCH /api/v1/properties/{id}/teaser, PATCH /api/v1/projects/{id}/rooms/{roomId}/teaser). Each property is independently optional — present means "write this", absent means "no change".

  • options
    Type: object · nullable

    Sparse partial update of the per-field display map. Each property is independently optional — present means "write this display", absent means "no change to this field's display".

  • tags
    Type: array string[] | null

    Tag snapshot for the teaser. Three forms: omitted = no change; a list = write this exact snapshot (subset of template.tags); null = reset to the property's current template pool, snapshotted server-side at write time.

Responses
  • application/json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
  • application/problem+json
Request Example for patch/api/v1/projects/{id}/rooms/{roomId}/teaser
curl 'https://app.propstreet.com/api/v1/projects/{id}/rooms/{roomId}/teaser' \
  --request PATCH \
  --header 'If-Match: ' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "options": {
    "locality": {
      "display": "actual"
    },
    "country": {
      "display": "actual"
    },
    "tenure": {
      "display": "actual"
    },
    "categories": {
      "display": "actual"
    },
    "parcelArea": {
      "display": "actual"
    },
    "avgContractLength": {
      "display": "actual"
    },
    "leasableUnits": {
      "display": "actual"
    },
    "zoningCategory": {
      "display": "actual"
    },
    "zoningGfa": {
      "display": "actual"
    },
    "rentalIncome": {
      "display": "actual"
    },
    "investmentSize": {
      "display": "actual"
    },
    "rentedPercent": {
      "display": "actual"
    },
    "totalCosts": {
      "display": "actual"
    },
    "noi": {
      "display": "actual"
    },
    "yield": {
      "display": "actual"
    },
    "propertyCount": {
      "display": "actual"
    },
    "conversions": {
      "display": "actual"
    },
    "yearBuilt": {
      "display": "actual"
    },
    "locationClasses": {
      "display": "actual"
    }
  },
  "tags": [
    ""
  ]
}'
{
  "id": "string",
  "uri": null,
  "createdUtc": "2026-06-18T07:20:59.256Z",
  "updatedUtc": "2026-06-18T07:20:59.256Z",
  "etag": "string",
  "changeType": null,
  "changeOrigin": null,
  "stage": null,
  "publishedUtc": null,
  "verifiedUtc": null,
  "communicatedUtc": null,
  "isPreMarket": null,
  "exclusivity": null,
  "title": null,
  "tags": [
    "string"
  ],
  "options": {
    "locality": {
      "display": "actual"
    },
    "country": {
      "display": "actual"
    },
    "tenure": {
      "display": "actual"
    },
    "categories": {
      "display": "actual"
    },
    "parcelArea": {
      "display": "actual"
    },
    "avgContractLength": {
      "display": "actual"
    },
    "leasableUnits": {
      "display": "actual"
    },
    "zoningCategory": {
      "display": "actual"
    },
    "zoningGfa": {
      "display": "actual"
    },
    "rentalIncome": {
      "display": "actual"
    },
    "investmentSize": {
      "display": "actual"
    },
    "rentedPercent": {
      "display": "actual"
    },
    "totalCosts": {
      "display": "actual"
    },
    "noi": {
      "display": "actual"
    },
    "yield": {
      "display": "actual"
    },
    "propertyCount": {
      "display": "actual"
    },
    "conversions": {
      "display": "actual"
    },
    "yearBuilt": {
      "display": "actual"
    },
    "locationClasses": {
      "display": "actual"
    }
  },
  "template": {
    "locality": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "country": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "tenure": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "categories": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "parcelArea": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "avgContractLength": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "leasableUnits": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "zoningCategory": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "zoningGfa": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "rentalIncome": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "investmentSize": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "rentedPercent": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "totalCosts": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "noi": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "yield": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "propertyCount": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "conversions": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "yearBuilt": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "locationClasses": {
      "allowedDisplays": [
        "actual"
      ]
    },
    "tags": [
      "string"
    ]
  },
  "projection": {
    "locality": null,
    "country": null,
    "categories": [
      {
        "type": "string",
        "locationClass": null,
        "percentage": null
      }
    ],
    "yearBuilt": {
      "value": null,
      "min": null,
      "max": null
    },
    "tenure": null,
    "conversions": [
      "string"
    ],
    "rentalIncome": {
      "value": null,
      "min": null,
      "max": null,
      "currency": "string",
      "scale": "string"
    },
    "leasableUnits": {
      "value": null,
      "min": null,
      "max": null
    },
    "rentedPercent": {
      "value": null,
      "min": null,
      "max": null
    },
    "totalCosts": {
      "value": null,
      "min": null,
      "max": null,
      "currency": "string",
      "scale": "string"
    },
    "noi": {
      "value": null,
      "min": null,
      "max": null,
      "currency": "string",
      "scale": "string"
    },
    "parcelArea": {
      "value": null,
      "min": null,
      "max": null
    },
    "avgContractLength": {
      "value": null,
      "min": null,
      "max": null
    },
    "yield": {
      "value": null,
      "min": null,
      "max": null
    },
    "zoningCategories": [
      "string"
    ],
    "zoningGfa": {
      "value": null,
      "min": null,
      "max": null
    },
    "investmentSize": {
      "value": null,
      "min": null,
      "max": null,
      "currency": "string",
      "scale": "string"
    },
    "propertyCount": {
      "value": null,
      "min": null,
      "max": null
    }
  },
  "nudge": {
    "code": "string",
    "message": "string",
    "navigateUri": null
  },
  "navigateUri": null
}