---
title: "Crear o actualizar una propiedad"
method: PUT
path: "/properties/{listingKey}"
tags: ["ingest"]
---

# Crear o actualizar una propiedad

`PUT /properties/{listingKey}`

## Request

- Base URL: `https://api.inmo.example/v1`
- URL: `https://api.inmo.example/v1/properties/{listingKey}`
- Auth: HTTP bearer

Requiere key con scope `write`. **No publica directo**: aterriza en
staging y pasa por las puertas de validación antes de aparecer en las
búsquedas.

## Request body

- PropertyInput: Lo que un partner/adaptador envía. `listingKey` es opcional en creación (el protocolo lo deriva). La procedencia se completa del lado del servidor con la fuente autenticada.
  - `listingId` string
  - `transactionType` 'ForSale' | 'ForLease', required: Conveniencia derivada de PropertyType para la superficie REST/agentes. No es un campo RESO; RESO lo expresa dentro de PropertyType.
  - `propertyType` 'Residential' | 'Residential Lease' | 'Residential Income' | 'Commercial Sale' | 'Commercial Lease' | 'Business Opportunity' | 'Land' | 'Farm' | 'Manufactured In Park', required: RESO PropertyType — lookup oficial. En RESO la transacción (venta/renta) ya está codificada en el tipo (p. ej. `Residential Lease`). `transactionType` es una conveniencia derivada, no reemplaza a este campo.
  - `propertySubType` 'Single Family Residence' | 'Condominium' | 'Townhouse' | 'Apartment' | 'Duplex' | 'Multi Family' | 'Manufactured Home' | 'Mobile Home' | 'Cabin' | 'Ranch' | 'Unimproved Land' | 'Office' | 'Retail' | 'Warehouse' | 'Other': RESO PropertySubType — lookup oficial (subconjunto de uso común en MX).
  - `listPrice` number, required
  - `listPriceCurrency` string, required
  - `bedroomsTotal` integer
  - `bathroomsTotalInteger` integer
  - `livingArea` number
  - `livingAreaUnits` 'SquareMeters' | 'SquareFeet': RESO LivingAreaUnits. Obligatorio si hay área; nunca asumir.
  - `publicRemarks` string
  - `latitude` number
  - `longitude` number
  - `unparsedAddress` string
  - `postalCode` string
  - `city` string
  - `stateOrProvince` string
  - `media` Media[]
    - `url` string, uri, required
    - `width` integer
    - `height` integer
    - `caption` string: Texto alternativo / OCR cuando la fuente lo provee.
    - `order` integer
  - `sourceUrl` string, uri

## Response `202`

Aceptada en staging; pendiente de validación.

- IngestReceipt
  - `received` integer
  - `acceptedToStaging` integer
  - `rejected` integer
  - `rejections` object[]
    - `index` integer
    - `listingId` string
    - `gate` string: Puerta de validación que rechazó.
    - `reason` string

## Other responses

- `400`: Parámetros inválidos.
- `401`: Falta o es inválida la key de escritura.

---

[API](https://skmtc.dev/propfacil/apis/protocolo-propfacil-api.md) · [All operations](https://skmtc.dev/propfacil/apis/protocolo-propfacil-api/llms.txt) · [OpenAPI document](https://skmtc.dev/propfacil/apis/protocolo-propfacil-api/revisions/f0da7a416623?raw)
