API Changelog
Stay up to date with API changes and improvements.
All notable changes to the Propstreet Public API are documented here. This project uses Semantic Versioning.
[1.4.0] - April 2026
Added
Offers:
GET /api/v1/offers— list offers the investor has received. Filter byall,active,ongoing,inactive,removed,unread, orunanswered.filter=unansweredreturns the single teaser currently awaiting a response.GET /api/v1/offers/{id}— fetch a single offer with the anonymized teaser (asset categories, locality, country, price / yield / area / year ranges, zoning, tags, conversions). The broker contact card is populated after the investor accepts. Unknown or inaccessible ids return404 Not Found.teaser.title— a short human-readable label composed from asset categories and locality in the caller's UI language (e.g."Industrial, Tullinge (SE)"). Null when both are unknown.status:unanswered,accepted,rejected,expired,removed,closed.capabilities:"chat"when broker messaging is available.- Teaser range fields expose
min/max(andcurrency/scalewhere applicable). Exact values appear asmin == max. - Cursor pagination via the shared
data+page.{nextCursor, pageSize, hasMore}envelope.
MCP Offer Tools:
list_offers— list offers with the same filters as the REST endpoint.get_offer— fetch a single offer by Smart Ref (numeric id orid=/ext=selector).
[1.3.0] - March 2026
Added
Properties:
/api/v1/properties- Full CRUD for property assets, including cursor pagination, delta sync (updated_since,include_deleted), ETag-based concurrency, and idempotent create support.GET /api/v1/projects/{id}/properties- Returns properties linked to a project, using the same public property schema as the standalone property endpoints.- Property responses now expose audit/sync fields consistent with other versioned v1 resources:
etag,changeType,changeOrigin, anddeletedUtc.
Company Duplicate Detection:
POST /api/v1/companies/find-duplicates— Check for potential duplicate companies before creating. Acceptsname(required),domain,countryCode, andlinkedInUrl. Returns matching candidates ordered by relevance (same-country matches first whencountryCodeis provided). Each result includesid,name,domain, andcountryCode.
Company Fields:
linkedInUrlon companies — Company LinkedIn URL, available on read (GET), create (POST), and update (PATCH). Searchable and tracked in audit history.
MCP Property Tools:
list_properties- List broker properties with optional country/category filters.get_property- Fetch a property by smart reference (id,name,id=,name=).create_property- Create a property with idempotency support, description, location, and tenure fields.update_property- Update name, description, country, locality, coordinates, and tenure, including coordinate clearing.
MCP Server:
create_companynow performs duplicate detection before creation and returns a conflict with candidate details unlessforce=true. This prevents accidental duplicate company creation by AI agents.
Changed
Property Contract Clarifications:
- Area write payloads must include
unit: "sqm"onparcelArea,zoning.gfa,rentedArea, andvacantArea. Read responses remain normalized tosqm. - Property tags are documented enum-backed snake_case values; unknown tags are rejected with
400 Validation failedinstead of being silently dropped. - Property PATCH location updates preserve tri-state semantics for nested
countryandlocality, and late write collisions now return409 Conflict.
Prospect Tag Filters:
- Breaking change:
GET /api/v1/projects/{id}/prospectsnow accepts repeatabletagsquery parameters with OR semantics instead of a singletagstring. Example:?tags=vip&tags=nordic.
Property Tag Filters:
- Breaking change:
GET /api/v1/propertiesnow accepts repeatabletagsquery parameters with OR semantics instead of repeatabletag. Example:?tags=core&tags=value_add.
MCP Tool Tag Filters:
- Breaking change: MCP list tools now use array-based
tagsparameters consistently.list_companies,list_contacts, andlist_prospectsno longer accept string/CSV tag filters.
See the MCP Guide for tool-level details and the generated OpenAPI schema for the full property resource contract.
[1.2.1] - February 2026
Changed
Contact/Company Deletion — Automatic Prospect Removal:
DELETE /api/v1/network/contacts/{id}andDELETE /api/v1/network/companies/{id}no longer reject deletion when the entity is a prospect on active projects. Instead, the entity is automatically removed as a prospect from all active projects before soft-deletion.- Each prospect removal fires a
prospect.updatedwebhook withaction.type: "removed". The contact/company deletion itself firescontact.deleted/company.deleted. - Timeline history for affected projects is preserved — prospects remain visible in project activity logs.
- MCP
delete_contact/delete_companypreview (preview=true) now includesaffected_projectsshowing which projects will be affected.
Fixed
Delete Webhook Payloads:
project.deletedandprospect.deletedwebhook payloads now includeexternal_refs— the list of active external references at deletion time. CRM integrators need these to identify and clean up the corresponding record in their system, sinceGETreturns 404 after deletion.- Prospects are now cascade-deleted when their parent project is deleted, ensuring
prospect.deletedwebhooks fire for each affected prospect. - Re-adding a previously removed prospect to a project now works correctly. Previously, the unique index blocked re-addition of soft-deleted prospects.
[1.2.0] - February 2026
Added
Projects & Prospects:
/api/v1/projects- Full CRUD for real estate transaction projects/api/v1/projects/{id}/prospects- Manage investor prospects on project prospect lists- Unified prospects API - Returns both prospect-list and communicated prospects in one endpoint
- Capability flags -
communicated,accepted,chat,invitationindicate prospect status - Classification pipeline - Track prospects:
not_contacted→contacted→interested→bidder - Filtering - Query prospects by
capability,classification, ortag - Cursor-based pagination with delta sync (
updated_since,include_deleted) - Idempotency support via
Idempotency-Keyheader - ETag-based optimistic concurrency control
Associated Projects:
GET /api/v1/network/contacts/{contactId}/projects— List projects where a contact is a prospectGET /api/v1/network/companies/{companyId}/projects— List projects where a company is a prospect- Cursor-based pagination with
page_sizeandcursorparameters - Filter by
status(open/closed) andclassification(prospect pipeline stage)
Webhook Events:
project.created- Fired when a new project is createdproject.updated- Fired when project fields change (name, status, classification, etc.)project.deleted- Fired when a project is soft-deletedprospect.created- Fired when a prospect is added to a projectprospect.updated- Fired when prospect classification or other fields changeprospect.deleted- Fired when a prospect is deleted from a project- Webhook payloads include
actionfield when changes were triggered by business actions (e.g.,{"action": {"type": "classified"}})
See the Projects & Prospects Guide for complete documentation. See the Webhooks Guide for webhook payload reference.
MCP Server:
- Structured content — All MCP tool responses now include
structuredContent(typed JSON element, MCP 2025-06-18+) alongside the existing textcontent. Agents can parse responses programmatically without re-deserializing from text. No client-side changes required.
Link Webhook Payloads:
- Link event webhooks (
link.created,link.updated,link.deleted) now includecontact_idandcompany_idfields in the payload. This is critical forlink.deletedevents where the link resource is no longer retrievable via the API. - Re-creating a previously deleted link (same contact-company pair) now correctly triggers a
link.createdwebhook event. Previously, reactivating a soft-deleted link was silently treated as an update with no webhook fired.
Changed
OpenAPI Schema Cleanup:
- Removed
Dtosuffix from schema component names:WebhookDto→Webhook,WebhookCreatedDto→WebhookCreated,WebhookDeliveryDto→WebhookDelivery,EmailEntryRequestDto→EmailEntryRequest,PhoneEntryRequestDto→PhoneEntryRequest,CompanyLinkDto→CompanyLink,ContactLinkDto→ContactLink - Added property descriptions to all public API schema components
- Cleaned up internal terminology in API descriptions
Note: JSON property names and HTTP contracts are unchanged. If your code generator produces class names from OpenAPI schema IDs, update your generated code.
[1.1.0] - February 2026
Added
Company Fields:
homepageUrl- Company homepage URLdomain- Company domain, can be:- Set directly via API (e.g.,
"domain": "acme-corp.com") when only domain is known - Auto-extracted from
homepageUrlwhen URL is provided (e.g., "acme-corp.com" from "https://www.acme-corp.com/about") - When both are provided,
homepageUrltakes precedence for domain derivation
- Set directly via API (e.g.,
- Both fields now searchable and sortable via
/api/v1/network/companies:search - Domain changes tracked in audit history and webhook payloads
Profile Pictures:
profilePictureUrlon contacts and companies - Download URL when profile picture is set- Profile picture changes now tracked in webhook
changed_fieldsasprofile_picture
Webhooks:
- Real-time event notifications for contacts, companies, and links
- 9 event types:
contact.created/updated/deleted,company.created/updated/deleted,link.created/updated/deleted - HMAC-SHA256 signature verification via Standard Webhooks headers (
webhook-id,webhook-timestamp,webhook-signature)- Note: Initially shipped as
X-Propstreet-Signature; migrated to Standard Webhooks in v1.2.0
- Note: Initially shipped as
- Exponential backoff retry (9 attempts over ~35 hours)
- Auto-disable after 10 consecutive failures
- Delivery history tracking via
/api/v1/webhooks/{id}/deliveries - Secret regeneration endpoint
changed_fieldsreference documentation for all resource types
See the Webhooks Guide for complete documentation.
[1.0.0] - December 2025
Added
Core Resources:
- Contacts - Full CRUD, search, batch operations
- Companies - Full CRUD, search, batch operations
- Links - Contact-Company relationships
- Network Actions - Activity notes on contacts and companies
- Files - Document attachments (up to 100MB)
Authentication:
- OAuth 2.0 with Client Credentials flow for production integrations
- Personal Access Tokens for testing and scripts
- Bot Users for dedicated integration accounts
Sync Features:
- Delta sync with
updated_sinceandinclude_deleted - Cursor-based pagination (up to 500 per page)
- ETag-based concurrency for safe updates
- External references for CRM ID tracking
Rate Limits:
- OAuth Clients: 600 requests/minute
- Personal Access Tokens: 60 requests/minute
Documentation:
- Comprehensive guides at docs.propstreet.com
- Interactive API explorer
- Code samples for TypeScript, C#, Python
Roadmap
Upcoming Features
We're continuously improving the API. Contact feedback@propstreet.com to share your integration needs.
Deprecation Policy
We follow a deprecation policy to ensure stability:
- Deprecation notice - Announced in changelog and API responses
- Migration period - Minimum 6 months before removal
- Removal - After migration period ends
We'll always provide migration guidance and support.
Subscribe to Updates
For API announcements:
- Watch this changelog
- Contact feedback@propstreet.com to join our developer updates list