Ts-Immo REST API
Complete REST API reference — all endpoints, parameters, request bodies, and examples based on the OpenAPI specification.
Base URL
https://api.ts-immo.org/v1Authentication
Every API call must include your API key in the X-TS-IMMO-KEY HTTP header.
X-TS-IMMO-KEY: <your-api-key>
Content-Type: application/jsonEndpoints
Estates
Property management: search, view details, assign public URLs, submit leads, and replay synchronization.
/v1/estatesSearch estates with filters/v1/estates/{id}Get estate details/v1/estates/{id}/urlAssign public URL/v1/estates/{id}/leadSubmit a buyer lead/v1/estates/{id}/replayReplay estate syncGET/v1/estates
Returns a paginated list of properties. All filter parameters are optional and can be combined.
| Param | Type | Req. | Description |
|---|---|---|---|
query | string | — | Free text search |
type | string | — | Property type (apartment, house, land…) |
sub_type | string | — | Property subtype (studio, penthouse, villa…) |
offer_type | string | — | Offer type (sale, rental, auction…) |
status | string | — | Property status (available, sold, rented…) |
min_price | number | — | Minimum price |
max_price | number | — | Maximum price |
min_surface | number | — | Minimum surface area (m²) |
max_surface | number | — | Maximum surface area (m²) |
bedrooms | integer | — | Number of bedrooms |
bathrooms | integer | — | Number of bathrooms |
city | string | — | City |
postal_code | string | — | Postal code |
country | string | — | Country (ISO code) |
region | string | — | Region |
featured | boolean | — | Featured properties only |
is_project | boolean | — | New development projects only |
page | integer | — | Page number (default: 1, min: 1) |
limit | integer | — | Results per page (default: 50, max: 100) |
orderby | string | — | Sort field (default: created_at) |
order | string | — | Sort order: ASC | DESC (default: DESC) |
curl -X GET "https://api.ts-immo.org/v1/estates?page=1&limit=20&city=Paris&offer_type=sale&min_price=100000" \
-H "X-TS-IMMO-KEY: your-api-key"Example response:
{
"data": [
{
"id": "uuid",
"reference": "REF-001",
"type": "apartment",
"sub_type": "penthouse",
"offer_type": "sale",
"status": "available",
"bedrooms": 3,
"bathrooms": 2,
"location": {
"city": "Paris",
"postal_code": "75008",
"country": "FR",
"geo": { "latitude": 48.8566, "longitude": 2.3522 }
},
"financial": {
"transaction": {
"price": { "amount": 450000, "currency": "EUR" }
}
},
"images": [...],
"amenities": ["parking", "terrace", "elevator"],
"created_at": "2025-01-15T10:30:00Z"
}
],
"total": 142,
"page": 1,
"limit": 20
}GET/v1/estates/{id}
Returns the full details of a property by its UUID identifier.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Ts-Immo property ID — not the slug (path) |
curl -X GET "https://api.ts-immo.org/v1/estates/550e8400-e29b-41d4-a716-446655440000" \
-H "X-TS-IMMO-KEY: your-api-key"PUT/v1/estates/{id}/url
Assigns the public URL of a property on your website. Allows Ts-Immo to know the address of the property detail page.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Ts-Immo property ID — not the slug (path) |
Request body
{
"url": "https://www.your-agency.com/property/apartment-t3-paris"
}curl -X PUT "https://api.ts-immo.org/v1/estates/ESTATE_ID/url" \
-H "X-TS-IMMO-KEY: your-api-key" \
-H "Content-Type: application/json" \
-d '{ "url": "https://www.your-agency.com/property/apartment-t3-paris" }'PUT/v1/estates/{id}/lead
Submits buyer/prospect information for this property. Creates or updates the contact in the CRM.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Ts-Immo property ID — not the slug (path) |
Request body
{
"streamId": "stream-uuid",
"civility": "MR",
"firstname": "Jean",
"lastname": "Dupont",
"type": "PERSON",
"mail": "jean.dupont@example.com",
"phones": [
{ "number": "+33612345678", "type": "mobile" }
],
"message": "I am interested in this property.",
"lang": "fr",
"preferences": [
{
"offerType": "sale",
"budget": {
"currency": "EUR",
"min_price": { "amount": 200000 },
"max_price": { "amount": 500000 }
}
}
]
}Lead fields (TsImmoBuyer):
| Param | Type | Req. | Description |
|---|---|---|---|
streamId | string | * | Unique stream identifier (required) |
civility | enum | — | MR | MS |
firstname | string | — | Contact first name |
lastname | string | — | Contact last name |
type | enum | — | PERSON | COMPANY |
companyName | string | — | Company name (if type = COMPANY) |
mail | string | — | Primary email address |
secondaryMail | string | — | Secondary email address |
phones | TsImmoPhone[] | — | List of phone numbers |
message | string | — | Prospect message |
internalNote | string | — | Internal note (not visible to the prospect) |
lang | enum | — | fr | en |
location | TsImmoLocation | — | Contact location |
preferences | Preferences[] | — | Search preferences (budget, location, property type…) |
POST/v1/estates/{id}/replay
Replays synchronization for a specific property. Useful to force an update after a CRM modification.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Ts-Immo property ID — not the slug (path) |
curl -X POST "https://api.ts-immo.org/v1/estates/ESTATE_ID/replay" \
-H "X-TS-IMMO-KEY: your-api-key"Support (Tickets)
Support ticket management: creation, viewing, comments, and closing.
/v1/support/?domain=...List support tickets/v1/support/Create a support ticket/v1/support/{id}?domain=...View a ticket/v1/support/{id}/commentAdd a comment/v1/support/support/{id}/close?domain=...Close a ticketGET/v1/support/
Returns all support tickets associated with your domain.
| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | Website domain name |
curl -X GET "https://api.ts-immo.org/v1/support/?domain=www.your-site.com" \
-H "X-TS-IMMO-KEY: your-api-key"POST/v1/support/
Creates a new support ticket with a subject, message, and reporter information.
Request body
{
"domain": "www.your-site.com",
"subject": "Sync issue on property REF-001",
"message": "The property is not appearing on the website after sync.",
"reporter": {
"username": "admin",
"mail": "admin@your-site.com",
"display_name": "Site Admin"
},
"attachments": [
{
"filename": "screenshot.png",
"mime_type": "image/png",
"content_base64": "iVBORw0KGgo..."
}
]
}| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | Website domain name |
subject | string | * | Ticket subject |
message | string | * | Problem description |
reporter | SupportReporter | * | Reporter information (username, mail, display_name) |
attachments | SupportAttachment[] | — | Base64-encoded attachments (filename, mime_type, content_base64) |
Possible ticket statuses:
IN_PROGRESS | WAITING_FOR_SUPPORT | PENDING | DONE | CLOSEDGET/v1/support/{id}/comment
Adds a comment to an existing support ticket.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Ticket UUID identifier |
comment | SupportComment | * | Comment to add (comment, reporter) |
POST/v1/support/support/{id}/close
Closes an existing support ticket.
| Param | Type | Req. | Description |
|---|---|---|---|
id | string | * | Ticket UUID identifier |
domain | string | * | Website domain name |
Sites
Activate, deactivate, and replay synchronization for connected sites.
/v1/sites/activateActivate a site/v1/sites/deactivateDeactivate a site/v1/sites/replayReplay global syncPOST/v1/sites/activate
Activates a site by associating it with your Ts-Immo account via the plugin authentication key.
Request body
{
"domain": "www.your-site.com",
"plugin_auth_key": "your-plugin-auth-key",
"theme_id": "theme-uuid"
}| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | Domain name of the site to activate |
plugin_auth_key | string | * | Plugin authentication key |
theme_id | string | — | Theme identifier (optional) |
Example response:
{
"success": true,
"plan": "professional",
"expires_at": "2026-12-31",
"max_properties": 500,
"error_message": null
}POST/v1/sites/deactivate
Deactivates a site and stops property synchronization.
Request body
{
"domain": "www.your-site.com"
}POST/v1/sites/replay
Replays a global synchronization of all properties to all active sites.
curl -X POST "https://api.ts-immo.org/v1/sites/replay" \
-H "X-TS-IMMO-KEY: your-api-key"Plugins
List and download available plugins for your domain.
/v1/plugins/plugins?domain=...List available plugins/v1/plugins/plugins/{pluginId}/download?domain=...Download a pluginGET/v1/plugins/plugins
Returns the list of available plugins for your domain with their metadata.
| Param | Type | Req. | Description |
|---|---|---|---|
domain | string | * | Website domain name |
Example response:
[
{
"id": "plugin-uuid",
"name": "ts-immo-sync",
"description": "WordPress synchronization plugin",
"version": "2.1.0",
"shortcodes": ["ts_immo_listings", "ts_immo_property", "ts_immo_search", "ts_immo_map"],
"signature": "sha256:abc123...",
"file_url": "https://api.ts-immo.org/v1/plugins/plugins/plugin-uuid/download"
}
]GET/v1/plugins/plugins/{pluginId}/download
Downloads a specific plugin file. Returns the binary content of the plugin.
| Param | Type | Req. | Description |
|---|---|---|---|
pluginId | string | * | Plugin UUID identifier |
domain | string | * | Website domain name |
curl -X GET "https://api.ts-immo.org/v1/plugins/plugins/PLUGIN_ID/download?domain=www.your-site.com" \
-H "X-TS-IMMO-KEY: your-api-key" \
-o plugin.zipError Codes
On failure, the API returns a structured JSON error with an HTTP code and a descriptive message.
{
"statusCode": 400,
"message": ["One or more fields are invalid"],
"error": "Bad Request"
}| Param | Type | Req. | Description |
|---|---|---|---|
200 | — | Success | |
400 | — | Bad request — missing or invalid parameters | |
401 | — | Unauthorized — missing or invalid API key | |
403 | — | Forbidden — insufficient permissions | |
404 | — | Resource not found | |
429 | — | Too many requests — rate limit exceeded | |
500 | — | Internal server error |