DomuDocs
  • English English
  • Español Español
  • Català Català
  • Deutsch Deutsch
  • Français Français
  • Italiano Italiano
  • Nederlands Nederlands
  • Polski Polski
  • Português Português

Docs

Welcome to the Domu Documentation

Find guides, code examples, tutorials, API references, and more.

Updated 07/04/2025

La API está en desarrollo. Puedes enviar todos los parámetros disponibles, aunque algunos aún no se procesan. Todas las peticiones se registran y la funcionalidad se irá ampliando progresivamente.

Domu allows querying data and managing properties through the RESO Web API specification, which is based on OData. For more information about the specification, please visit the RESO website. RESO Data Dictionary Wiki

Authorization

The application must send an authorization header with each HTTP request to the API:

Authorization: Bearer {token}

GET /Property

API Response

By default, the RESO Web API will return 10 listings, regardless of the total number of records available. You can use the $top parameter to request up to 200 listings at a time.

If there are more than 200 records available, you must paginate the results.

All API responses, aside from metadata, are returned in JSON format.

Result Pagination

If the total number of records returned by a query exceeds 200 (the maximum limit for a result set), you must paginate the results. This is done by increasing the number of skipped records.

// Returns the next 200 records, sorted by ListPrice

https://api.domu.app/reso/Property?$top=200&$skip=200&$orderby=ListPrice desc?$filter=StandardStatus eq 'Active'

Media

Instead of maintaining it as a separate resource, Media is returned as an object directly in the property record.

Metadata

You can request metadata that returns fields and lookup values made available by the data provider. Metadata is returned in XML according to the RESO specification.

// Request metadata

https://api.domu.app/reso/$metadata

Operators

You can restrict a resource's result set by passing additional operators with your request. Valid operators include:

Operator Description
eq Equals
ne Not equal
gt Greater than
lt Less than
ge Greater than or equal to
le Less than or equal to
and Logical AND
or Logical OR
not Logical NOT

Parameters

You can pass the following query parameters to filter results.

Name Type Description
ListingKey string The property key, available in the /Property resource.
// Returns the property data for ListingKey 'Domu-12345'

https://api.domu.app/reso/Property('Domu-12345')
$skip number Skips this number of results
// Skips the first 10 results

https://api.domu.app/reso/Property?$skip=10
$select string Selects the fields to be returned
// Returns only the LivingArea field

https://api.domu.app/reso/Property?$select=LivingArea
$filter string Filters the results to be returned
// Returns properties where ListPrice is greater than 100000

https://api.domu.app/reso/Property?$filter=ListPrice gt 100000
$top number Limits the size of the result set. The default is 10, maximum is 200.
// Limits results to 2

https://api.domu.app/reso/Property?$top=2
$orderby string Sorts the results, ascending or descending
// Sorts by descending price

https://api.domu.app/reso/Property?$orderby=ListPrice desc

Query Functions

Function Description
any Search fields where any element of an array satisfies a condition
// Returns properties with the option of electric heating

https://api.domu.app/reso/Property?$filter=Heating/any(a: a eq 'Electric')
all Search fields where all elements of an array satisfy a condition
// Returns properties where all flooring is parquet

https://api.domu.app/reso/Property?$filter=Flooring/all(a: a eq 'Parquet')
geo.distance Search by coordinates
// Return listings that are near specific co-ordinates, to a radius of 0.6 meters

https://api.domu.app/reso/Property?$filter=geo.distance(Coordinates, POINT(2.15899 41.38879)) lt 0.6
geo.intersects If you know the extents of a polygonal region, you can provide the each point as co-ordinates
// Return listings within a shape

https://api.domu.app/reso/Property?$filter=geo.intersects(Coordinates, POLYGON((2.16 41.39, 2.16 41.41, 2.18 41.41, 2.18 41.39, 2.16 41.39)))

POST /Property

Respuesta de la API

Si la petición es exitosa, se devolverá el código 200 junto al ListingKey de la propiedad listada. Si faltan campos obligatorios, se devolverá el código 400 junto a los campos que faltan. Si la propiedad ya ha sido publicada por otro agente y está activa, se devolverá el código 403. Si indica un ListingAgentId, y este no existe o no pertenece a su agencia, se devolverá el código 403 o 404. Si hay un error de servidor, se devolverá el código 500.

Incluye en el body los datos de la propiedad en formato JSON, siguiendo el diccionario de RESO. Los campos marcados con * no están especificados en dicho diccionario.

Campos obligatorios

ExclusiveListing*, ParcelNumber (Referencia Catastral), StreetName, StreetNumber, City, Latitude, Longitude, Country, ListPrice, PropertyType, PropertySubType, BuildingAreaTotal, YearBuilt, EntryLevel (Planta), BedroomsIndividual*, BedroomsDouble*, BedroomsSuite*, BathroomsFull, BathroomsHalf, BuyerBrokerageCompensation, SellerBrokerageCompensation*

Campos recomendados

CityRegion, Heating, Cooling, PublicRemarks, Media, VideoURL*, VirtualTourURLUnbranded

Campos adicionales

// Por defecto, se utiliza el ID del agente del token. Si es propietario de una agencia verificada, puede indicar ListingAgentId con el ID de otro agente de su agencia

ListingAgentId*

Otros campos

Puedes introducir cualquier otro campo que esté dentro del diccionario RESO.

Ejemplo

{
  "ExclusiveListing": true,
  "ParcelNumber": "0000000AA0000A0000AA",
  "StreetName": "Carrer de Balmes",
  "StreetNumber": "2",
  "City": "Barcelona",
  "Latitude": 41.386086,
  "Longitude": 2.167318,
  "Country": "ES",
  "CityRegion": "La Dreta de l'Eixample",
  "StateOrRegion": "CT",
  "PostalCode": "08022",
  "ListPrice": 1200000,
  "PropertyType": "Residential",
  "PropertySubType": "Apartment",
  "BuildingAreaTotal": 180,
  "YearBuilt": 1993,
  "EntryLevel": 2,
  "IndividualBedrooms": 2,
  "DoubleBedrooms": 1,
  "SuiteBedrooms": 1,
  "BathroomsFull": 3,
  "BathroomsHalf": 1,
  "BuyerBrokerageCompensation": "2.5",
  "SellerBrokerageCompensation": "2.5",
  "Heating": [
    "Electric",
    "Boiler"
  ],
  "Cooling": [
    "Central Air"
  ],
  "PublicRemarks": "Bright and with clear views: every corner of the apartment takes full advantage of natural light, creating a warm and welcoming atmosphere all day long.",
  "Media": [
    {
      "Order": 0,
      "MediaUrl": "https://pro.domu.app/imagenes/propiedad/1/1.jpg"
    },
    {
      "Order": 1,
      "MediaUrl": "https://pro.domu.app/imagenes/propiedad/1/2.jpg"
    },
    {
      "Order": 2,
      "MediaUrl": "https://pro.domu.app/imagenes/propiedad/1/3.jpg"
    }
  ]
}

PATCH /Property('{ListingKey}')

Respuesta de la API

Si la petición es exitosa, se devolverá el código 200. Si no proporcionas el ListingKey, se devolverá el código 400. Si la propiedad no existe, o el agente de esta no pertenece a su agencia, se devolverá el código 404 o 403. Si hay un error de servidor, se devolverá el código 500.

Campos obligatorios

ListingKey

Ejemplo

{
  "ListPrice": 1120000
}

DELETE /Property('{ListingKey}')

Respuesta de la API

Si la petición es exitosa, se devolverá el código 200. Si se genera un pago, se devolverá PaymentId, PaymentAmount, SellerAgentNetCommission, BuyerAgentNetCommission. Si faltan campos obligatorios, se devolverá el código 400 junto a los campos que faltan. Si la propiedad no existe, o el agente de esta no pertenece a su agencia, se devolverá el código 404 o 403. Si hay un error de servidor, se devolverá el código 500.

Los campos marcados con * no están especificados en el diccionario de RESO.

Campos obligatorios

ListingKey, StandardStatus (Closed o Withdrawn)

Campos obligatorios para Closed

// Indica el precio final de venta, las comisiones finales, si el agente comprador es de la misma agencia que el agente vendedor y si es miembro de Domu.
                    
ListPrice, BuyerBrokerageCompensation, SellerBrokerageCompensation*, BuyerAgentSameAgency*, BuyerAgentDomuMember*

Ejemplo

{
  "StandardStatus": "Closed",
  "ListPrice": 1120000,
  "BuyerBrokerageCompensation": "2.5",
  "SellerBrokerageCompensation": "2.5",
  "BuyerAgentSameAgency": false,
  "BuyerAgentDomuMember": true
}