curl --request GET \
--url https://{tenantDomain}/api/v1/units \
--header 'Authorization: Bearer <token>'import requests
url = "https://{tenantDomain}/api/v1/units"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{tenantDomain}/api/v1/units', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenantDomain}/api/v1/units",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{tenantDomain}/api/v1/units"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{tenantDomain}/api/v1/units")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenantDomain}/api/v1/units")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"sku": "<string>",
"listing_type": "<string>",
"status": "<string>",
"name": "<string>",
"stage": "<string>",
"sector": "<string>",
"unit": "<string>",
"price": "<string>",
"formatted_price": "<string>",
"currency_type": "<string>",
"currency_label": "<string>",
"total_area": "<string>",
"covered_area": "<string>",
"bedrooms": "<string>",
"bathrooms": "<string>",
"rooms": "<string>",
"store_active": "<string>",
"possession_date": "<string>",
"possession_type": "pozo",
"financial": {
"integration_percentage": "<string>",
"integration_discount": "<string>",
"installments": "<string>",
"currency_index_type": "<string>"
},
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"media": {
"gallery": "<string>"
},
"attributes": [
"<unknown>"
],
"badges": "<string>",
"attribute_categories": "<unknown>",
"project": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"tagline": "<string>",
"store_active": "<string>",
"logos": [
"<unknown>"
],
"product_types": [
"<unknown>"
],
"lots_map": [
"<unknown>"
],
"has_lots_map": true,
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
},
"product": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"product_type": "<string>",
"product_type_label": "<string>",
"type_labels": {
"sector": "<string>",
"unit": "<string>"
},
"thumbnail_url": "<string>",
"store_active": "<string>",
"logos": [
"<unknown>"
],
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"project": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"tagline": "<string>",
"store_active": "<string>",
"logos": [
"<unknown>"
],
"product_types": [
"<unknown>"
],
"lots_map": [
"<unknown>"
],
"has_lots_map": true,
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
},
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
},
"typology": {
"id": "<string>",
"name": "<string>"
},
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
}
]
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}Listar unidades
Obtiene una lista paginada de unidades inmobiliarias publicadas.
Soporta filtros por tipo de operacion, proyecto, producto, tipo de producto, estado, rango de precios, superficie, dormitorios, banos, barrio, ciudad, y atributos EAV dinamicos.
Solo retorna unidades publicadas y no eliminadas.
Filtros de primer nivel
Los filtros categoricos marcados como multi aceptan un solo valor o varios
separados por coma (OR entre valores). Ej: possession_type=pozo,en_ejecucion
o status=disponible,reservado.
| Parametro | Tipo | Descripcion |
|---|---|---|
listing_type | string (multi) | Tipo de operacion: venta, alquiler, alquiler_temporal, permuta |
status | string (multi) | Estado: disponible, reservado, vendido, etc. |
project_id | uuid | UUID del proyecto |
product_id | uuid | UUID del producto |
product_type | string (multi) | Tipo de producto: departamentos, casas, lotes, etc. |
sku | string | SKU exacto de la unidad |
stage | string | Etapa (match exacto) |
sector | string | Sector (busqueda parcial). Label variable segun product_type (Piso, Mza, SS2, etc.). |
unit | string | Identificador de unidad (busqueda parcial). Label variable segun product_type (Depto, Lote, Cochera, etc.). |
min_price / max_price | numeric | Rango de precio (inclusive) |
currency_type | string (multi) | Moneda: USD, ARS, etc. |
min_total_area / max_total_area | numeric | Rango de superficie total en m2 |
min_covered_area / max_covered_area | numeric | Rango de superficie cubierta en m2 |
bedrooms | integer (multi) | Cantidad exacta de dormitorios (match exacto, ej: 2,3) |
min_bedrooms | integer | Minimo de dormitorios |
bathrooms | integer (multi) | Cantidad exacta de banos (match exacto, ej: 1,2) |
min_bathrooms | integer | Minimo de banos |
min_rooms | integer | Minimo de ambientes |
possession_type | string (multi) | Tipo de posesion: pozo, inmediata, en_ejecucion |
store_active | boolean | Estado en tienda |
Filtros de ubicacion
| Parametro | Tipo | Descripcion |
|---|---|---|
neighborhood | string | Barrio (busqueda parcial) |
city | string | Ciudad (busqueda parcial) |
state | string | Provincia/estado (busqueda parcial) |
Filtros por atributos EAV
Usar filter[key] para filtrar por cualquier atributo activo y filtrable.
Ejemplos: filter[pool]=true, filter[orientation]=N, filter[parking_spaces][gte]=1
Flags frecuentes para store inmobiliario
| Checkbox UI | Parametro |
|---|---|
| Entrega inmediata | possession_type=inmediata |
| Oportunidad en contado | filter[opportunity]=true |
| Apto credito hipotecario | filter[mortgage_eligible]=true |
Ordenamiento
| Parametro | Valores |
|---|---|
sort_by | price, created_at, updated_at, sku, possession_date, total_area, covered_area, bedrooms, bathrooms, rooms |
sort_direction | asc, desc (default: desc) |
Includes
Usar include=attribute_categories para incluir atributos EAV agrupados por categoria.
Usar include=address para incluir datos de ubicacion.
Combinar: include=attribute_categories,address
curl --request GET \
--url https://{tenantDomain}/api/v1/units \
--header 'Authorization: Bearer <token>'import requests
url = "https://{tenantDomain}/api/v1/units"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{tenantDomain}/api/v1/units', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenantDomain}/api/v1/units",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{tenantDomain}/api/v1/units"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{tenantDomain}/api/v1/units")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenantDomain}/api/v1/units")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"sku": "<string>",
"listing_type": "<string>",
"status": "<string>",
"name": "<string>",
"stage": "<string>",
"sector": "<string>",
"unit": "<string>",
"price": "<string>",
"formatted_price": "<string>",
"currency_type": "<string>",
"currency_label": "<string>",
"total_area": "<string>",
"covered_area": "<string>",
"bedrooms": "<string>",
"bathrooms": "<string>",
"rooms": "<string>",
"store_active": "<string>",
"possession_date": "<string>",
"possession_type": "pozo",
"financial": {
"integration_percentage": "<string>",
"integration_discount": "<string>",
"installments": "<string>",
"currency_index_type": "<string>"
},
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"media": {
"gallery": "<string>"
},
"attributes": [
"<unknown>"
],
"badges": "<string>",
"attribute_categories": "<unknown>",
"project": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"tagline": "<string>",
"store_active": "<string>",
"logos": [
"<unknown>"
],
"product_types": [
"<unknown>"
],
"lots_map": [
"<unknown>"
],
"has_lots_map": true,
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
},
"product": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"product_type": "<string>",
"product_type_label": "<string>",
"type_labels": {
"sector": "<string>",
"unit": "<string>"
},
"thumbnail_url": "<string>",
"store_active": "<string>",
"logos": [
"<unknown>"
],
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"project": {
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"description": "<string>",
"tagline": "<string>",
"store_active": "<string>",
"logos": [
"<unknown>"
],
"product_types": [
"<unknown>"
],
"lots_map": [
"<unknown>"
],
"has_lots_map": true,
"published_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
},
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
},
"typology": {
"id": "<string>",
"name": "<string>"
},
"address": {
"country": "<string>",
"state": "<string>",
"city": "<string>",
"neighborhood": "<string>"
}
}
]
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}