Raizia API para CRMCRM API

Publica en Raizia desde tu CRMPublish to Raizia from your CRM

El API para CRM permite que WASI, o cualquier CRM inmobiliario, publique, actualice y retire los inmuebles de una inmobiliaria en Raizia, igual que lo hace con otros portales.

The CRM listing API lets WASI, or any real estate CRM, publish, update and remove a brokerage's listings on Raizia, the same way it does with other portals.

Probar el demoTry the demo Descargar OpenAPIDownload OpenAPI

Conectar una inmobiliariaConnecting a brokerage

Como con otros portales, Raizia emite los datos de conexión y la inmobiliaria los pega en su CRM:

  1. En Raizia, quien agregó la inmobiliaria abre Mi cuenta → Mi perfil → Datos de la inmobiliaria y, en Clave del API para CRM, elige Generar clave. Raizia la muestra una sola vez.
  2. En el CRM, la inmobiliaria activa Raizia como portal y pega la clave. En WASI sería Configuración → Conexión portales → Raizia, con un solo dato de conexión: la clave.
  3. El CRM llama a GET /v1/connection para mostrar «Conectado», y desde ahí envía cada inmueble que se cree, edite, despublique o elimine.

Si la inmobiliaria ya guardó su ID de empresa de WASI en Raizia, Raizia solo acepta inmuebles de esa empresa. Generar una clave nueva desactiva la anterior.

As with other portals, Raizia issues the connection details and the brokerage pastes them into its CRM:

  1. On Raizia, the person who added the brokerage opens My account → My Profile → Brokerage details and, under CRM API key, chooses Generate key. Raizia shows it only once.
  2. In the CRM, the brokerage turns Raizia on as a portal and pastes the key. In WASI that would be Configuración → Conexión portales → Raizia, with a single connection field: the key.
  3. The CRM calls GET /v1/connection to show "Connected", and from then on sends each property that is created, edited, unpublished or deleted.

When the brokerage saved its WASI company ID on Raizia, Raizia only accepts properties from that company. Generating a new key turns off the old one.

AutenticaciónAuthentication

Envía la clave en cada solicitud, por HTTPS:

Send the key with every request, over HTTPS:

Authorization: Bearer rz_live_…

Las claves de prueba empiezan por rz_test_. Sin clave, o con una que Raizia no reconoce, la respuesta es 401.

Test keys start with rz_test_. Without a key, or with one Raizia does not recognise, the answer is 401.

curl https://api.raizia.co/v1/connection \
  -H "Authorization: Bearer $RAIZIA_API_KEY"

{"brokerage":{"id":"…","name":"Inmobiliaria Ejemplo"},"sandbox":false,"apiVersion":"v1","formats":["wasi","raizia"]}

RutasRoutes

Cada CRM envía su propio formato. /v1/crm/wasi/… recibe el JSON de inmuebles de WASI tal como lo devuelve su API. /v1/listings recibe el formato propio de Raizia, para cualquier otro CRM. Un CRM con un formato distinto puede tener su propio adaptador en /v1/crm/{crm}/… sin afectar a los demás.

Each CRM sends its own format. /v1/crm/wasi/… takes WASI's property JSON exactly as its API returns it. /v1/listings takes Raizia's own format, for any other CRM. A CRM with a different format can get its own adapter at /v1/crm/{crm}/… without affecting the others.

RutaRoutePara quéWhat for
GET /v1/connectionComprobar la clave.Check the key.
PUT /v1/crm/wasi/properties/{id}Publicar o actualizar un inmueble.Publish or update one property.
POST /v1/crm/wasi/propertiesUno o hasta 50 inmuebles: «Publicar en portales» y «Actualización masiva».One or up to 50 properties: "Publicar en portales" and "Actualización masiva".
GET /v1/crm/wasi/properties/{id}Estado de un inmueble.Status of one property.
GET /v1/crm/wasi/propertiesTodos los inmuebles de la inmobiliaria en Raizia, para conciliar.All the brokerage's properties on Raizia, to reconcile.
DELETE /v1/crm/wasi/properties/{id}Retirar un inmueble.Remove one property.
DELETE /v1/crm/wasi/properties?ids=1,2Retirar varios: «Despublicar en portales».Remove several: "Despublicar en portales".
/v1/listings…Las mismas rutas en formato Raizia, con externalId como código.The same routes in Raizia's format, with externalId as the id.

Publicar y actualizarPublishing and updating

Envía el inmueble completo cada vez que cambie; no hace falta enviar solo lo que cambió. Raizia compara con lo que ya tiene y no hace nada si no cambió. Un inmueble en venta y en arriendo se publica como dos anuncios, uno por oferta.

Raizia revisa el inmueble al recibirlo. Si no puede publicarlo responde 422 con la razón. Si puede, responde 202 y lo guarda en segundo plano, fotos incluidas, normalmente en segundos. Consulta el estado (la URL en Location) hasta que deje de ser processing.

Incluye al agente como user, con los campos de GET /v1/user/get/{id} de WASI. Raizia busca la cuenta del agente por correo o teléfono para que el anuncio sea suyo; si no la encuentra, el anuncio es de la inmobiliaria.

Send the whole property every time it changes; there is no need to send only what changed. Raizia compares it with what it has and does nothing when nothing changed. A property for sale and for rent is published as two listings, one per offer.

Raizia checks the property when it arrives. If it cannot publish it, it answers 422 with the reason. If it can, it answers 202 and saves it in the background, photos included, usually within seconds. Poll the status (the URL in Location) until it is no longer processing.

Include the agent as user, with the fields of WASI's GET /v1/user/get/{id}. Raizia looks for the agent's account by email or phone so the listing is theirs; otherwise the listing belongs to the brokerage.

curl -X PUT https://api.raizia.co/v1/crm/wasi/properties/10562861 \
  -H "Authorization: Bearer $RAIZIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d @property-10562861.json

HTTP/1.1 202 Accepted
Location: /v1/crm/wasi/properties/10562861

{"source":"wasi","externalId":"10562861","propertyId":10562861,"status":"processing",
 "message":"Raizia está guardando el anuncio.","offers":[],"url":"/v1/crm/wasi/properties/10562861",
 "receivedAt":"2026-11-13T15:04:05Z","processedAt":null}

El cuerpo es el inmueble tal como lo devuelve WASI. Raizia usa, entre otros: for_sale, for_rent, sale_price, rent_price (en COP, desde COP 1.000.000), id_property_type, title, observations, address, city_label, region_label, zone_label, las áreas, bedrooms, bathrooms, garages, latitude, longitude, id_publish_on_map, main_image, galleries, features, video, id_status_on_page e id_availability. Un inmueble inactivo o vendido en WASI se retira de Raizia.

The body is the property as WASI returns it. Raizia uses, among others: for_sale, for_rent, sale_price, rent_price (in COP, from COP 1,000,000), id_property_type, title, observations, address, city_label, region_label, zone_label, the areas, bedrooms, bathrooms, garages, latitude, longitude, id_publish_on_map, main_image, galleries, features, video, id_status_on_page and id_availability. A property that is inactive or sold in WASI is removed from Raizia.

Varios a la vezSeveral at once

POST /v1/crm/wasi/properties acepta un inmueble, una lista de hasta 50, o la lista de WASI ({"0": {…}, "1": {…}, "total": 2}). Responde 200 con un resultado por inmueble, en el mismo orden: su estado con "accepted": true, o "accepted": false con el error.

POST /v1/crm/wasi/properties takes one property, a list of up to 50, or WASI's own list ({"0": {…}, "1": {…}, "total": 2}). It answers 200 with one result per property, in the same order: its status with "accepted": true, or "accepted": false with the error.

EstadoStatus

GET /v1/crm/wasi/properties/{id} dice qué hizo Raizia con el inmueble y con cada oferta. El message es una frase para mostrar a la inmobiliaria, en español salvo que pidas inglés con Accept-Language: en.

GET /v1/crm/wasi/properties/{id} says what Raizia did with the property and each offer. The message is a sentence to show the brokerage, in Spanish unless you ask for English with Accept-Language: en.

{"source":"wasi","externalId":"10562861","propertyId":10562861,"status":"published",
 "message":"El anuncio está publicado en Raizia.",
 "offers":[{"listingType":"sale","status":"published","url":"https://raizia.co/es/propiedad/apartaestudio-en-venta-laureles-medellin-100231"}],
 "url":"/v1/crm/wasi/properties/10562861","receivedAt":"2026-11-13T15:04:05Z","processedAt":"2026-11-13T15:04:09Z"}
EstadoStatusSignificadoMeaning
processingRaizia lo está guardando.Raizia is saving it.
publishedTodas las ofertas están en Raizia; cada una trae su url.Every offer is on Raizia; each has its url.
partially_publishedAlgunas ofertas están publicadas; revisa cada una.Some offers are published; check each.
pending_reviewRaizia lo revisa primero, por ejemplo porque otro anuncio puede ser el mismo inmueble.Raizia reviews it first, for example because another listing may be the same property.
rejectedRaizia no pudo publicarlo; cada oferta trae su reason.Raizia could not publish it; each offer has its reason.
removedNo está en Raizia.It is not on Raizia.
failedNo se pudo guardar; envíalo de nuevo.Saving failed; send it again.

GET /v1/crm/wasi/properties lista todos los inmuebles, del más reciente al más antiguo, con status, page y pageSize (hasta 100) opcionales. Pueden aparecer estados nuevos; trata los que no conozcas como pendientes.

GET /v1/crm/wasi/properties lists every property, newest first, with optional status, page and pageSize (up to 100). New status values may appear; treat ones you don't know as pending.

RetirarRemoving

DELETE /v1/crm/wasi/properties/{id} retira el inmueble de inmediato y responde con su estado. Enviarlo de nuevo más adelante lo vuelve a publicar. Para varios, usa DELETE /v1/crm/wasi/properties?ids=10562861,10562862 (hasta 50).

DELETE /v1/crm/wasi/properties/{id} removes the property at once and answers with its status. Sending it again later publishes it again. For several, use DELETE /v1/crm/wasi/properties?ids=10562861,10562862 (up to 50).

ErroresErrors

Los errores tienen un code estable y un message para mostrar. details dice qué oferta o campo falló.

Errors have a stable code and a message to show. details says which offer or field failed.

HTTP/1.1 422 Unprocessable Entity

{"error":{"code":"invalid_property","message":"Raizia no puede publicar este inmueble.",
 "details":[{"listingType":"sale","message":"El precio no está en pesos colombianos."}]}}
HTTPcodeCuándoWhen
400invalid_json, invalid_status, missing_idsLa solicitud no tiene la forma documentada.The request is not in the documented shape.
401missing_api_key, invalid_api_keyFalta la clave, o Raizia no la reconoce.The key is missing, or Raizia does not recognise it.
403company_mismatchEl id_company no es el de la inmobiliaria.The id_company is not the brokerage's.
404not_foundRaizia no tiene ese inmueble para esta inmobiliaria.Raizia has no such property for this brokerage.
409sandbox_fullEl sandbox llegó a su máximo de anuncios.The sandbox reached its maximum of listings.
413too_large, too_manyMás de 6 MB o más de 50 inmuebles.Over 6 MB or more than 50 properties.
422invalid_property, invalid_listing, no_offer, missing_id, id_mismatchRaizia no puede publicar el inmueble.Raizia cannot publish the property.
429Demasiadas solicitudes; espera y reintenta.Too many requests; wait and retry.
5xxinternal_errorUn problema de Raizia; reintenta más tarde.A problem on Raizia's side; retry later.

Formato RaiziaRaizia format

Para CRMs distintos de WASI. Las rutas son las mismas en /v1/listings, y el código del inmueble es externalId (letras, números, ., - o _, hasta 80). Un lote es una lista o {"listings": […]}.

For CRMs other than WASI. The routes are the same under /v1/listings, and the property's id is externalId (letters, digits, ., - or _, up to 80). A batch is a list or {"listings": […]}.

{"externalId":"A-1001","title":"Apartamento en venta en Laureles","description":"Luminoso, con balcón.",
 "propertyType":"apartment","address":"Circular 73 # 39-20","city":"Medellín","department":"Antioquia",
 "neighborhood":"Laureles","latitude":6.2447,"longitude":-75.5967,"showExactLocation":true,
 "areaM2":98,"bedrooms":3,"bathrooms":2,"parkingSpaces":1,"floor":5,"administrationFeeCop":420000,
 "features":["elevator","balcony"],"videoUrl":"https://www.youtube.com/watch?v=…",
 "photos":[{"url":"https://cdn.ejemplo.com/a1001/sala.jpg","caption":"Sala"}],
 "agent":{"email":"agente@ejemplo.com","phone":"+57 300 000 0000"},
 "offers":[{"type":"sale","priceCop":680000000},{"type":"rent","priceCop":4200000}]}
CampoFieldReglaRule
title, description, address, cityObligatorios. Hasta 180, 4000 y 220 caracteres; la descripción es texto plano.Required. Up to 180, 4000 and 220 characters; the description is plain text.
propertyTypeapartment, studio, house, country_house, cabin, house_lot, farm, land, office, medical_office, commercial, warehouse, building, room, parking, other
offersUna oferta sale y/o una rent, con priceCop entero desde 1.000.000.A sale and/or a rent offer, with an integer priceCop from 1,000,000.
areaM2Obligatoria, de 1 a 1.000.000.Required, from 1 to 1,000,000.
latitude, longitudeEn Colombia. Sin ubicación, el anuncio espera revisión.In Colombia. Without a location, the listing waits for review.
featureselevator, intercom, balcony, terrace, patio, parking, security24h, penthouse
photosHasta 48 URL https de imágenes JPEG, PNG o WebP de hasta 650 KB, en orden.Up to 48 https URLs of JPEG, PNG or WebP images up to 650 KB, in order.
activefalse retira el anuncio, como DELETE.false removes the listing, like DELETE.

Cuando un campo no sirve, la respuesta 422 los lista todos en details, con field y message.

When fields are unusable, the 422 answer lists all of them in details, with field and message.

Límites y versionesLimits and versions

  • Cuerpo de hasta 6 MB y lotes de hasta 50 inmuebles.
  • 5 solicitudes por segundo por IP, con picos de hasta 50. Si te pasas, la respuesta es 429.
  • La versión mayor va en la ruta (/v1). Campos opcionales, rutas y estados nuevos no la cambian, así que ignora lo que no conozcas. Un cambio incompatible será /v2, y /v1 seguirá funcionando al menos 12 meses.
  • Bodies up to 6 MB and batches up to 50 properties.
  • 5 requests per second per IP, with bursts up to 50. Beyond that the answer is 429.
  • The major version is in the path (/v1). New optional fields, routes and statuses don't change it, so ignore what you don't know. An incompatible change will be /v2, and /v1 will keep working for at least 12 months.

Sandbox

El demo publica inmuebles de prueba con una clave pública de sandbox (GET /v1/sandbox). Esos anuncios son de una inmobiliaria de demostración: no aparecen en la búsqueda, los listados ni el mapa de Raizia. Cada uno publicado trae un previewUrl que lo abre en raizia.co durante 7 días.

El sandbox es compartido, así que puedes ver lo que publicó otra persona. Admite hasta 30 anuncios a la vez. Para probar tu integración, usa la clave del sandbox desde tus servidores con tus propios inmuebles de prueba.

The demo publishes test properties with a public sandbox key (GET /v1/sandbox). Those listings belong to a demo brokerage: they never appear in Raizia's search, lists or map. Each published one has a previewUrl that opens it on raizia.co for 7 days.

The sandbox is shared, so you may see what someone else published. It holds up to 30 listings at a time. To test your integration, use the sandbox key from your servers with your own test properties.

¿Preguntas? Escríbenos aQuestions? Write to support@raizia.co.