Crear Propiedad
Permite registrar una nueva propiedad en el sistema de forma integral. A través de este servicio, es posible guardar la información básica de la propiedad, asociar propietarios (existentes o creados dinámicamente en la misma petición), registrar características personalizadas, coordenadas geográficas, videos de recorridos, fotos del inmueble y relacionar otras propiedades.
¿Para qué sirve este servicio?
Úsalo cuando necesites automatizar el ingreso de propiedades a nuby desde portales externos, aplicaciones móviles o sistemas de captación propios. Este endpoint está diseñado bajo un modelo transaccional robusto, asegurando que si algún paso crítico falla (por ejemplo, validación de un propietario o falta de características obligatorias del tipo de propiedad), toda la operación se cancele de forma automática para evitar datos inconsistentes en tu base de datos.
1. El Endpoint (La dirección web)
Apunta tu sistema a la siguiente dirección de petición POST. Recuerda reemplazar {{instancia}} por la dirección web completa que utilizas para ingresar a tu plataforma.
POST https://{{instancia}}/service/v2/public/properties
¿Qué debes colocar en {{instancia}}?
Es muy sencillo: corresponde a la dirección web principal que utilizas a diario para ingresar a tu plataforma (incluyendo la terminación .nuby.app o .arrendasoft.co).
Por ejemplo, si para entrar a tu sistema escribes inmobiliaria.nuby.app o inmobiliaria.arrendasoft.co en tu navegador, esa será exactamente tu instancia. Solo asegúrate de no incluir el "https://" ni barras diagonales ("/") al final.
2. La Petición (¿Qué debes enviarnos?)
Este servicio requiere autenticación mediante un Token JWT. Envía los encabezados requeridos y estructura la petición con un cuerpo (Body) en formato JSON que contenga las secciones detalladas a continuación:
| Método | POST |
| Content-Type | application/json |
| Authorization | Bearer token, Token obtenido al consumir el servicio Login. |
Autenticación requerida
Este servicio requiere un Token de autenticación válido. Debes incluir el encabezado Authorization: Bearer TU_TOKEN en cada petición. El token se obtiene consumiendo el servicio de Login. Adicionalmente, el cliente OAuth debe contar con el scope write para poder consumir este endpoint.
Cuerpo de la petición (JSON Body - Estructura General)
La raíz del JSON enviado debe estructurarse con las siguientes llaves principales:
| Elemento Raíz | Tipo | Requerido | Descripción |
|---|---|---|---|
| Propiedad | object | Sí | Contiene la información básica del inmueble (Título, tipo, ubicación, valores, etc.). |
| Propietarios | array | Sí | Lista de propietarios asociados. Puede ser un arreglo de IDs {tipo_doc_id, documento} para búsqueda, o de objetos con datos de nuevos |
| Caracteristicas | object | No | Mapeo de características de la propiedad en formato llave-valor {"id_caracteristica": "valor"}. |
| Videos | array | No | Listado de enlaces a videos del inmueble. |
| Fotos | array | No | Listado de imágenes del inmueble en formato base64 o URLs públicas. |
| PropiedadesRelacionadas | array | No | Arreglo de códigos numéricos de propiedades que se desea relacionar de forma recíproca. |
| Coordenadas | string | object | No | Coordenadas de latitud y longitud. Ejemplo de texto: "6.2089,-75.5678". |
Estructura Detallada de las Secciones
2.1 Sección "Propiedad" 🏢
Contiene la información comercial y técnica base del inmueble. Los siguientes campos son validados estrictamente bajo validación rápida (Fail-Fast):
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| txtTitulo | string | Sí | Título descriptivo o publicitario del inmueble. Máximo 255 caracteres. |
| tipo_id | integer | Sí | ID de la clase de propiedad (Ej: apartamento, casa, local). Debe ser una opción de la pregunta 499 (clase |
| propiedad_tipo | string | Sí | Modalidad de comercialización. Valores válidos: "arriendo", "venta", o "venta y arriendo". |
| municipio_id | integer | Sí | ID de la ciudad o municipio donde se ubica el inmueble (debe existir en la maestra de municipios). |
| direccion | string | Sí | Dirección exacta del inmueble. El sistema validará que no exista otra propiedad con la misma dirección en el mismo municipio para evitar duplicados accidentales. |
| estrato | integer | Sí | Estrato socioeconómico del inmueble. Debe ser un opcion_id 1258 = Cuatro, 1259 = Cinco, 1260 = Seis, 1276 = No Estratificada. Consultar el servicio de maestras para obtener los IDs válidos de la instancia. |
| barrio_id | integer | No | ID del barrio (debe existir en la maestra de barrios municipio_id enviado). Si el barrio pertenece a otro municipio, el endpoint responde 422. |
| urbanizacion | string | No | Nombre del edificio, conjunto cerrado o urbanización. |
| valor_arriendo | numeric | No | Canon mensual del arriendo (monto mayor o igual a 0). |
| valor_venta | numeric | No | Precio de venta solicitado (monto mayor o igual a 0). |
| valor_administracion | numeric | No | Costo de la cuota de administración de la copropiedad. |
| propiedad_area | numeric | No | Área privada del inmueble en metros cuadrados. Se envía estrictamente con el nombre físico de columna. |
| nombre_sitio | string | No | Nombre del sitio o sector de referencia ("Cerca de"). Máximo 255 caracteres. |
| valor_arriendo2 | numeric | No | Canon mensual de arriendo en segunda moneda (monto mayor o igual a 0). |
| valor_venta2 | numeric | No | Precio de venta en segunda moneda (monto mayor o igual a 0). |
| avaluo_catastral | numeric | No | Valor del avalúo catastral del inmueble. |
| impuesto_predial | string | No | Valor del impuesto predial del inmueble. |
| llaves_otro | string | No | Descripción de la ubicación de las llaves cuando llaves_en = "otro". Máximo 200 caracteres. |
| fecha_consignacion | string | No | Fecha de consignación de la propiedad. Formato Y-m-d (Ej: "2026-09-29"). Si se omite, se usa la fecha actual. |
| asesor_id | integer | No | ID del asesor responsable en p_usuarios. Si se omite, se usa el usuario de sesión. |
| agrupamiento | string | No | Edificio o unidad del inmueble. Valores válidos: "urbanizacion", "edificio", "conjunto" o "ninguno". |
| observaciones_internas | string | No | Notas internas de la inmobiliaria (no visibles al público). |
| propiedad_id | integer | No | Código explícito de la propiedad. Debe ser único en el sistema; si se omite, se auto-genera. |
| estado | integer | No | Estado de la propiedad. Valores permitidos al crear: 1 (Activa) o 2 (Inactiva). Default: 1. Los estados 0 (Arrendada) y 3 (Vendida) son asignados por el sistema (contratos/ventas) y se rechazan con 422. |
| destacado | integer | No | Indica si la propiedad se muestra como destacada en la web: 0 o 1. Default: 0. Requiere estado Activa, al menos una imagen en Fotos y cupo dentro del límite configurado (ver reglas de negocio en la sección 4). |
| observaciones | string | No | Descripción comercial extensa del inmueble. |
| llaves_en | string | No | Ubicación física de las llaves. Valores válidos: ", ", "otro" o ". Default: "oficina". Nota de compatibilidad: el valor "propiedad" ya no se acepta (nunca fue una opción real del sistema; las válidas son las listadas). |
| paga_cuota_sost | string | No | Establece quién asume el pago de la cuota de administración. Valores válidos: "propietario", "inquilino" o ". Default: "propietario". |
| folio_matricula | No | Número de matrícula inmobiliaria del inmueble. | |
| referencia_catastral | No | Número de referencia catastral asignado por el municipio. |
2.2 Sección "Propietarios" 👥
Cada propiedad en nuby requiere obligatoriamente tener asociado al menos un propietario. El arreglo acepta dostres formatos de datos, los cuales pueden combinarse:
Formato A: Propietario Existente (Por ID)
Si el propietario ya se encuentra registrado en el ERP nuby, simplemente envía su identificador único (ID de tercero) como un entero dentro del arreglo:
"Propietarios": [1528, 4390]
Formato A2: Búsqueda por documento
Si el propietario ya existe pero no conoces su ID, envía el par tipo_doc_id + documento. El sistema lo buscará, y si existe pero no tiene la clase de propietario, se la agregará automáticamente:
"Propietarios": [{"tipo_doc_id": 2, "documento": "11666898"}]
Formato B: Creación Dinámica de Propietario (Objeto de Datos)
Si el propietario no existe, puedes enviar sus datos completos estructurados en un objeto. El sistema validará su información, lo creará automáticamente en la base de datos de nuby, y lo asociará al inmueble bajo una misma transacción comercial:comercial. Campos obligatorios: tipo_doc_id, documento, nombre1, direccion1 y municipio_id:
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| persona | integer | Naturaleza 0/1: 1 (o ausente) = Persona Natural → clase propietario 6; 0 = Persona 10. El valor 2 0 (no se persiste). |
|
| documento | string | Sí | Número de documento de identidad o NIT. |
| tipo_doc_id | integer | Sí | ID de la maestra de tipos de documentos (Cédula, NIT, Pasaporte, etc.). |
| nombre1 | string | Sí | Primer nombre del propietario o razón social completa. |
| |||
| direccion1 | string | Sí | Dirección de domicilio del propietario. |
| municipio_id | integer | Sí | ID del municipio de residencia (debe existir en la base de datos). |
| nombre2 | string | No | Segundo nombre del propietario. |
| apellido1 | string | No | Primer apellido del propietario. No es obligatorio (paridad con el formulario rápido de terceros); si se omite, el nombre completo se guarda en nombre1. |
| apellido2 | string | No | Segundo apellido del propietario. |
| telefono1 | string | No | Número telefónico o celular principal de contacto. |
| telefono2 | string | No | Número telefónico secundario de contacto. |
| string | Correo electrónico para envío de facturas | ||
| omite, la creación continúa pero se incluye un | |||
| tipo_persona_id | integer | ID de tipo de persona |
|
| regimen_id | integer | ID del régimen tributario del |
|
| resp_fiscal_id | integer | ID de la responsabilidad |
|
| tipo_tercero_id | integer | No | Se ignora. El endpoint solo crea propietarios: la clase de tercero se deriva siempre de persona (6 10 para entidad). Si se envía un valor divergente, se incluye un warning informativo en la respuesta. |
Coherencia documento ↔ persona
El sistema valida que el tipo de documento sea coherente con la naturaleza del tercero (semántica canónica 0/1):
- Persona Natural (persona = 1) no puede registrarse con un tipo de documento NIT/NOP → responde 422.
- Persona Jurídica (persona = 0) debe registrarse con un tipo de documento NIT/NOP → si se envía con cédula u otro documento, responde 422.
2.3 Sección "Caracteristicas" ⚙️
Permite registrar valores para las características personalizadas del inmueble. Se envía en formato de objeto clave-valor, donde la clave es el ID numérico de la característica y el valor es el contenido a asignar:
"Caracteristicas": {
"1": "3", // ID 1 (Habitaciones) = 3
"2": "2", // ID 2 (Baños) = 2
"31": "si", // ID 31 (Red de gas) = si (Obligatoria)
"63": "1" // ID 63 (Garaje) = 1 (Checkbox de Garaje activo)
}
Validación de Características Obligatorias por Tipo
El motor de validación del sistema nuby verificará qué características están configuradas en el ERP como obligatorias para el tipo de propiedad seleccionado (tipo_id). Si omites alguna de estas características obligatorias en la petición, o el formato del valor es erróneo (por ejemplo, enviar texto en un campo netamente numérico), el endpoint devolverá un código de estado 422 Unprocessable Entity y se revertirá todo el proceso de guardado.
Nota: En una configuración estándar, el apartamento (1247) y la casa (1249) exigen de forma obligatoria las características de: N° de Habitaciones (ID 1), N° de Baños (ID 2) y Red de gas (ID 31).
2.4 Sección "Fotos" 📸
Permite adjuntar imágenes del inmueble de forma directa. El procesamiento de imágenes está automatizado y realiza optimizaciones de rendimiento y de presentación visual (redimensionamiento, corrección de orientación por metadatos EXIF, e inserción de la marca de agua corporativa configurada en el sistema).
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| url | string | Sí | Contenido de la imagen. Puede enviarse como una cadena Base64 válida (data:image/jpeg;base64,...) |
| nombre | string | No | Nombre del archivo o descripción física para almacenar el documento. Si se omite, se genera automáticamente. |
| descripcion | string | No | Descripción de la foto (se persiste como descripción de la imagen en la galería). |
| posicion | integer | No | Orden de la foto en la galería. Debe ser mayor o igual a 1. Si la posición ya está ocupada por otra foto, se reasigna automáticamente a la siguiente posición libre y se incluye un warning en la respuesta. |
Resoluciones automáticas: por cada foto enviada, el sistema genera automáticamente las resoluciones HD, grande, mediana y pequeña, aplicando optimizaciones (redimensionamiento, corrección de orientación por EXIF y marca de agua corporativa). Todas las resoluciones hijas heredan la posición de su foto padre.
2.5 Sección "Videos" 🎥
Permite registrar recorridos en video de las propiedades (por ejemplo, cargados en plataformas como YouTube o Vimeo):
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| video_url | string | Sí | URL completa o código físico del video. Ejemplo: "https://www.youtube.com/watch?v=...". |
| video_tipo | string | Tipo o plataforma emisora del video (Ej: "youtube" o "vimeo"). |
|
| video_descripcion | string | No | Descripción del video. |
| video_posicion | integer | No | Posición de visualización de este video. |
2.6 Sección "PropiedadesRelacionadas" y "Coordenadas" 📍
- PropiedadesRelacionadas → Permite enlazar propiedades entre sí (ideal para bodegas subdivididas, oficinas del mismo centro de negocios, etc.). Recibe una lista de códigos de inmuebles:
[137, 1042]. El sistema nuby creará una asociación recíproca: la propiedad creada apuntará a estas asociadas, y estas asociadas apuntarán automáticamente a la nueva propiedad. - Coordenadas → Coordenadas de geolocalización. Se recomienda enviar como una cadena de texto separada por comas
"latitud,longitud"(Ej:"6.2089,-75.5678"). El motor de nuby se encarga de analizar la cadena, validar su rango físico geográfico y guardarlo bajo el formato propietario del sistema.
3. La Respuesta (¿Qué te entregaremos?)
Esta sección describe la respuesta que recibirás del sistema cuando la creación del inmueble sea completamente exitosa.
Respuesta Exitosa (201 Created)
Se genera cuando la propiedad y todos sus componentes asociados han sido validados e insertados con éxito. Se retorna el identificador único físico asignado al inmueble:
{
"error": false,
"type": "success",
"msg": "La propiedad ha sido creada exitosamente.",
"propiedad_id": 7786,
"warnings": []
}
Respuesta Exitosa con Advertencias (201 Created, type: warning)
Se genera cuando la propiedad se creó exitosamente pero algún dato adicional no pudo guardarse o se normalizó (no es bloqueante):
{
"error": false,
"type": "warning",
"msg": "La propiedad ha sido creada exitosamente. Sin embargo, algunos datos adicionales no pudieron guardarse.",
"propiedad_id": 7787,
"warnings": [
"Propietarios: Propietario #0: el tipo de tercero enviado (3) fue ignorado y reemplazado por la clase de propietario 6.",
"Propietarios: Propietario #0: el tercero no tiene correo electrónico, por lo que no podrá generar facturación electrónica ni acceder al área de clientes.",
"Fotos: Foto #1: la posición 1 ya está ocupada en la propiedad; se asignó la posición 3.",
"Fotos: Foto #0: No se pudo obtener el contenido de la imagen"
]
}
¿Qué contiene la sección "warnings"?
Si se incluyen fotos o videos y el almacenamiento en la nube o procesamiento de marcas de agua tiene algún inconveniente no letal (por ejemplo, formato no soportado o redimensión fallida de una imagen en particular), el inmueble se creará con éxito, pero se devolverán advertencias en esta sección para que puedas corregir los archivos de forma manual. Esto no interrumpe el registro del inmueble. El propietario sin correo electrónico también genera una advertencia informativa.
4. Seguridad y Posibles Errores
El sistema realiza validaciones de autenticación, permisos (scopes) y estructura de datos. Si alguna falla, devolverá un error con su respectivo código HTTP y un mensaje descriptivo:
| Código HTTP | Significado y Solución |
|---|---|
| 400 Bad Request | Causa: La estructura de la petición es incorrecta o faltan datos esenciales. Ocurre antes de que se intente procesar la lógica de negocio. Ejemplos comunes:
|
| 401 Unauthorized | Causa: El Token JWT de autenticación no es válido o ha expirado. Solución: Vuelve a consumir el servicio de Login para generar un nuevo token de acceso y úsalo en el encabezado Authorization. |
| 403 Forbidden | Causa: El token es válido, pero el cliente OAuth con el que fue generado no tiene los permisos (scopes) necesarios para esta operación. Solución: Verifica la configuración de tu cliente OAuth en nuby y asegúrate de que tenga asignado el scope write. |
| 422 Unprocessable Entity | Causa: La petición es sintácticamente correcta, pero incumple una regla de negocio del sistema. Ejemplos comunes:
msg del JSON de error. Te indicará exactamente qué regla de negocio se infringió para que puedas corregir los datos enviados. |
Operación Atómica y de Transacción Segura
nuby implementa transacciones anidadas en sus modelos de negocio. Si el endpoint responde con un código 422 (o un fallo 500 del servidor), toda la creación física del inmueble es cancelada de forma automática (ROLLBACK). No tendrás propiedades huérfanas sin propietario ni registros incompletos en las tablas del sistema.
5. Ejemplos de integración
Aquí tienes ejemplos de código listos para que tus desarrolladores los adapten a tu plataforma:
Ejemplos de JSON Body
Ejemplo 1: Creación de propiedad con propietario existente
{
"Propiedad": {
"txtTitulo": "Penthouse Duplex El Poblado con Terraza",
"tipo_id": 1247,
"propiedad_tipo": "arriendo",
"municipio_id": 1,
"direccion": "Carrera 35 # 10B - 120, Apartamento 1201",
"estrato": 1260,
"barrio_id": 5,
"valor_arriendo": 4800000,
"valor_administracion": 650000,
"urbanizacion": "Torres de San Lucas",
"observaciones": "Espectacular penthouse con vista de 360 grados, tina de hidromasajes en terraza principal, 3 alcobas cada una con baño.",
"propiedad_area": 185.4,
"llaves_en": "oficina",
"paga_cuota_sost": "propietario",
"fecha_consignacion": "2026-09-29",
"agrupamiento": "edificio",
"estado": 1,
"destacado": 0
},
"Propietarios": [
12471528
],
"Caracteristicas": {
"1": "3",
// Alcobas
"2": "4", // Baños
"31": "si",
// Red de gas (Obligatoria)
"63": "1" // Garaje (Checkbox de Garaje - ID 63 en nuby)
},
"Coordenadas": "6.205210,-75.561240"
}
Ejemplo 2: Creación de propiedad con propietario nuevo, videos y fotos
{
"Propiedad": {
"txtTitulo": "Casa de Campo en Llanogrande",
"tipo_id": 1249,
"propiedad_tipo": "venta",
"municipio_id": 2,
"direccion": "Vía Llanogrande Kilómetro 4, Parcelación La Sofía",
"estrato": 1259,
"valor_venta": 1250000000,
"valor_administracion": 300000,
"observaciones": "Hermosa casa de un solo nivel, amplias zonas verdes, deck con zona BBQ, acabados campestres modernos.",
"propiedad_area": 320.0,
"paga_cuota_sost": "propietario",
"llaves_en": "porteria"
},
"Propietarios": [
{
"persona": 1,
"documento": "1024567890",
"tipo_doc_id": 1,
"nombre1": "Alejandro",
"apellido1": "Restrepo",
"direccion1": "Transversal 39B # 4G - 85",
"municipio_id": 1,
"email": "alejandro.restrepo@email.com",
"telefono"telefono1": "3104567890",
"tipo_persona_id": 1,
"regimen_id": 2,
"resp_fiscal_id": 11
}
],
"Caracteristicas": {
"1": "4",
"2": "5",
"31": "si",
// Red de gas (Obligatoria)
"63": "1", // Garaje (Checkbox de Garaje - ID 63 en nuby)
"8": "Sí"
},
"Videos": [
{
"video_url": "https://www.youtube.com/watch?v=abc123xyz",
"video_tipo": "youtube",
"video_descripcion": "Video aéreo con Dron de la parcelación"
}
],
"Fotos": [
{
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==",
"nombre": "foto_fachada_casa_campo.jpg",
"descripcion": "Fachada principal",
"posicion": 1
},
{
"url": "https://cdn.example.com/fotos/sala.jpg",
"nombre": "sala.jpg",
"descripcion": "Sala comedor",
"posicion": 2
}
]
}
cURL
# Define tu token y tu instancia
TOKEN="TU_TOKEN_AQUI"
INSTANCIA="tu-inmobiliaria.nuby.app"
# Prepara el cuerpo de la petición utilizando estrictamente los nombres de campos físicos
PAYLOAD='{
"Propiedad": {
"txtTitulo": "Apartamento para prueba cURL",
"tipo_id": 1247,
"propiedad_tipo": "arriendo",
"municipio_id": 127,
"direccion": "Calle Falsa 123 via cURL",
"estrato": 1258,
"propiedad_area": 97
},
"Propietarios": [1],
"Caracteristicas": {
"1": "3",
"2": "3",
"31": "si",
"63": "1"
}
}'
curl -X POST "https://${INSTANCIA}/service/v2/public/properties" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d "${PAYLOAD}"
PHP
<?php
$instancia = 'tu-inmobiliaria.nuby.app';
$token = 'TU_TOKEN_AQUI';
$url = "https://{$instancia}/service/v2/public/properties";
$payload = [
'Propiedad' => [
'txtTitulo' => 'Propiedad creada desde PHP',
'tipo_id' => 1247,
'propiedad_tipo' => 'venta',
'municipio_id' => 127,
'direccion' => 'Avenida Siempreviva 742, PHP',
'estrato' => 1258,
'propiedad_area' => 97 // Nombre exacto de la columna física
],
'Propietarios' => [1], // ID de un propietario existente
'Caracteristicas' => [
'1' => '3', // Habitaciones
'2' => '3', // Baños
'31' => 'si', // Red de gas (Obligatoria)
'63' => '1' // Garaje (Checkbox de Garaje - ID 63 en nuby)
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
"Authorization: Bearer {$token}"
]);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo "Código de estado HTTP: {$http_code}\n";
echo "Respuesta del servidor:\n";
print_r($response);
?>
Python
import requests
import json
instancia = 'tu-inmobiliaria.nuby.app'
token = 'TU_TOKEN_AQUI'
url = f"https://{instancia}/service/v2/public/properties"
payload = {
"Propiedad": {
"txtTitulo": "Propiedad Creada desde Python",
"tipo_id": 1247,
"propiedad_tipo": "venta",
"municipio_id": 127,
"direccion": "Calle de Python, 101",
"estrato": 1258,
"propiedad_area": 97
},
"Propietarios": [1], # ID de un propietario existente
"Caracteristicas": {
"1": "3",
"2": "3",
"31": "si",
"63": "1"
}
}
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {token}"
}
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
print(f"Código de estado HTTP: {response.status_code}")
print("Respuesta del servidor:")
print(response.json())
except requests.exceptions.RequestException as e:
print(f"Ocurrió un error en la petición: {e}")
JavaScript (Fetch API)
const instancia = 'tu-inmobiliaria.nuby.app';
const token = 'TU_TOKEN_AQUI';
const url = `https://${instancia}/service/v2/public/properties`;
const payload = {
"Propiedad": {
"txtTitulo": "Propiedad Creada desde JavaScript",
"tipo_id": 1247,
"propiedad_tipo": "arriendo",
"municipio_id": 127,
"direccion": "Avenida JavaScript, Lote 5",
"estrato": 1258,
"propiedad_area": 97
},
"Propietarios": [1], // ID de un propietario existente
"Caracteristicas": {
"1": "3",
"2": "3",
"31": "si",
"63": "1"
}
};
async function crearPropiedad() {
try {
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(payload)
});
const data = await response.json();
console.log(`Código de estado HTTP: ${response.status}`);
console.log('Respuesta del servidor:');
console.log(data);
} catch (error) {
console.error('Error en la petición:', error);
}
}
crearPropiedad();
Power Query M (Excel / Power BI)
let
instancia = "tu-inmobiliaria.nuby.app",
token = "TU_TOKEN_AQUI",
url = "https://" & instancia & "/service/v2/public/properties",
payload = [
Propiedad = [
txtTitulo = "Propiedad desde Power Query",
tipo_id = 1247,
propiedad_tipo = "venta",
municipio_id = 127,
direccion = "Calle Power BI, 4.0",
estrato = 1258,
propiedad_area = 97
],
Propietarios = {1}, // ID de un propietario existente
Caracteristicas = [
#"1" = "3",
#"2" = "3",
#"31" = "si",
#"63" = "1"
]
],
jsonPayload = Json.FromValue(payload),
response = Web.Contents(url, [
Headers = [
#"Content-Type" = "application/json",
#"Authorization" = "Bearer " & token
],
Content = jsonPayload
]),
jsonResponse = Json.Document(response)
in
jsonResponse