ZEVRACentro de Ayuda
IntegracionesAPI de captación

Ejemplos

La misma solicitud en curl, Node.js, PHP y Zapier.

Todos los ejemplos mandan el mismo lead, usan Idempotency-Key para que un reintento no duplique y reenvían los parámetros UTM de la página como atribucion. Cambia zvr_live_TU_LLAVE por tu llave (guardada en una variable de entorno, nunca en el código) y ZVR-0123 por el código de una propiedad de tu catálogo.

curl -X POST https://api.zevra.co/v1/leads \
  -H "Authorization: Bearer $ZEVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: formulario-web-8f3c2a" \
  -d '{
    "nombre": "Ana Ruiz",
    "telefono": "+52 55 0000 0001",
    "email": "ana@ejemplo.com",
    "mensaje": "Quiero agendar una visita este fin de semana.",
    "propiedad": { "codigo": "ZVR-0123" },
    "extras": { "origen_formulario": "landing-casas", "presupuesto": 3500000 },
    "atribucion": { "campana": "preventa-torre-b-sep", "fuente": "facebook", "medio": "cpc", "pagina": "https://tusitio.com/torre-b" }
  }'

Agrega -i para ver las cabeceras (X-Request-Id, X-RateLimit-*) y -H "X-Zevra-Dry-Run: true" para probar sin escribir.

Sin propiedad

Si tu formulario es general (la página de contacto, por ejemplo), simplemente omite propiedad. El lead entra sin propiedad de interés y tu equipo la asigna después.

{
  "nombre": "Ana Ruiz",
  "telefono": "+52 55 0000 0001",
  "mensaje": "Busco departamento en renta por la zona sur."
}

Con tu código propio

Si en ZEVRA capturaste tus propios códigos de propiedad, úsalos en lugar del código ZVR:

{
  "nombre": "Ana Ruiz",
  "telefono": "+52 55 0000 0001",
  "propiedad": { "external_code": "CASA-LOMAS-12" }
}

Con calificación

Si tu formulario ya pregunta qué busca el prospecto, manda esas respuestas en calificacion para que caigan en los campos del lead (operación, presupuesto y Modelos de interés) y no solo en una nota. Lo típico es un <select> con rangos de presupuesto y otro con el tipo de unidad: en tu servidor conviertes la opción elegida en un rango numérico en MXN y en los nombres de los Modelos tal como están en ZEVRA. Una opción del formulario puede corresponder a varios Modelos ("Local comercial" cubre los locales de dos niveles) o a uno solo ("Consultorio"); por eso modelos es una lista.

curl -X POST https://api.zevra.co/v1/leads \
  -H "Authorization: Bearer $ZEVRA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: formulario-web-8f3c2b" \
  -d '{
    "nombre": "Ana Ruiz",
    "telefono": "+52 55 0000 0001",
    "propiedad": { "codigo": "ZVR-0123" },
    "calificacion": {
      "operacion": "comprar",
      "presupuesto": { "min": 1400000, "max": 2800000 },
      "modelos": [{ "nombre": "Local nivel 1" }, { "nombre": "Local planta baja" }]
    },
    "extras": { "origen_formulario": "landing-locales", "tipo_unidad": "Local comercial", "rango_presupuesto": "1.4 a 2.8 millones" }
  }'

Cuatro reglas para no llevarte sorpresas:

  • modelos necesita propiedad en el mismo cuerpo, porque cada entrada se busca entre los Modelos de esa propiedad. Acepta de 1 a 10 entradas, cada una { "id" } o { "nombre" } (los repetidos se colapsan). Por nombre la coincidencia es exacta (sin distinguir mayúsculas, sin aproximaciones); por id es el UUID del Modelo. Si alguna entrada no existe en esa propiedad, la API responde 422 unit_type_not_found con field apuntando a esa posición (calificacion.modelos[1]) y no guarda nada; si una opción de tu formulario no corresponde a Modelos concretos, omite modelos y deja el dato en extras.
  • Para un solo Modelo puedes mandar modelo: { "nombre": "Consultorio" }, la forma corta de una lista de uno; nunca mandes modelo y modelos juntos.
  • Si el teléfono ya existe, el presupuesto solo se rellena cuando estaba vacío, los Modelos se agregan a los Modelos de interés (nunca se quita ninguno) y la operación no cambia.
  • Si min es mayor que max, max se descarta.

Para encontrar el nombre o el id de cada Modelo, abre la propiedad en el dashboard y busca la tarjeta Modelos: cada Modelo muestra su nombre tal como debes mandarlo, y al abrirlo ves su id.

En esta página