NovoProspect

API para desarrolladores

Versión 1 · openapi.json (OpenAPI 3.1)

Con la API, n8n, Make, Zapier o un agente de IA pueden crear leads, mover negocios, programar tareas y actividades, consultar el inventario y la disponibilidad de unidades, y responder en la Bandeja. Importa el documento OpenAPI en tu herramienta (Postman, Make, el nodo HTTP de n8n…) para tener todas las rutas.

Tokens

  • Un administrador crea el token en Configuración → Integraciones → n8n y API, con un nombre, los permisos que necesita y, si quieres, un vencimiento. El token se muestra una sola vez.
  • Cada llamada lleva la cabecera Authorization: Bearer np_… y envía y recibe JSON. URL base: https://app.novoprospect.io/api/v1
  • El token es de una empresa: solo ve y cambia los datos de esa empresa. Lo que hace queda en el historial con el nombre del token.
curl "https://app.novoprospect.io/api/v1/contactos?q=ana" \
  -H "Authorization: Bearer np_…"

Permisos

contacts:readVer contactos y leads
contacts:writeCrear y editar contactos, notas y etiquetas
deals:readVer negocios y embudos
deals:writeCrear negocios, moverlos de etapa, marcarlos perdidos y agregar notas
properties:readVer propiedades, proyectos y disponibilidad de unidades
tasks:readVer tareas
tasks:writeCrear, completar y reasignar tareas
activities:readVer actividades (llamadas, visitas, reuniones)
activities:writeCrear y completar actividades
inbox:readVer canales, conversaciones y mensajes de la empresa
inbox:writeResponder, asignar y cambiar el estado de conversaciones
users:readVer los usuarios de la empresa
webhooks:manageCrear y borrar suscripciones a eventos (Zapier, Make)

Límites, listas y errores

  • Hasta 120 peticiones por minuto por token. Las respuestas traen RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset; al pasarte, 429 con Retry-After.
  • Las listas usan ?limit= y ?offset= y responden { data, total, limit, offset, hasMore }.
  • Los errores responden { "error": "texto", "code": "not_found", "requestId": "…" }. El code no cambia; el texto puede cambiar. Códigos: invalid_request, unauthorized, token_expired, forbidden, insufficient_scope, api_paused, not_found, conflict, unprocessable, rate_limited, internal_error.
  • Fechas de tareas y actividades en hora de República Dominicana: YYYY-MM-DD y HH:MM.

Privacidad

Solo se exponen los canales de la empresa: las conversaciones de los canales personales de los agentes nunca salen de NovoProspect. Las propiedades no incluyen comisiones, notas privadas ni datos del propietario, y un negocio no se puede marcar Ganado desde la API (eso abre el cierre y la comisión en el CRM).

Webhooks

NovoProspect avisa a tu URL cuando pasa algo: un POST JSON con { id, event, createdAt, data }. En data llega el registro con los mismos campos que la API (en el OpenAPI, sección webhooks, está el cuerpo de cada evento).

  • Se crean en Integraciones → n8n y API o por la API (POST /webhooks, permiso webhooks:manage), que es lo que usan Zapier y Make: la suscripción se crea al activar el flujo y se borra al apagarlo o si tu URL responde 410.
  • Cabeceras: X-NovoProspect-Event, X-NovoProspect-Delivery (id de la entrega, el mismo en cada reintento: úsalo para no procesarla dos veces), X-NovoProspect-Timestamp y X-NovoProspect-Signature = sha256= HMAC-SHA256 con el secreto del webhook de timestamp + "." + cuerpo.
  • Responde 2xx en menos de 10 segundos. Si no, se reintenta a los 1 min, 5 min, 30 min, 2 h, 12 h. Tras 15 entregas fallidas seguidas el webhook se pausa y se avisa al administrador. Cada entrega queda 30 días en el registro, con su botón «Reenviar».
  • Solo salen datos de la empresa: nada de los canales personales de los agentes ni de comisiones.
lead.createdLead nuevo (formularios, Meta, API, Bandeja o a mano)Contactos
contact.updatedContacto editadoContactos
deal.createdNegocio nuevoNegocios y ventas
deal.stage_changedNegocio cambió de etapaNegocios y ventas
deal.wonNegocio ganadoNegocios y ventas
deal.lostNegocio perdidoNegocios y ventas
sale.confirmedVenta confirmadaNegocios y ventas
invoice.paidFactura cobrada por completoFinanzas
task.createdTarea nuevaTareas y actividades
task.completedTarea completadaTareas y actividades
task.dueTarea llegó a su fecha y horaTareas y actividades
activity.createdActividad programadaTareas y actividades
message.receivedMensaje del clienteBandeja
message.createdMensaje nuevo (recibido, enviado o nota)Bandeja
conversation.createdConversación nuevaBandeja
conversation.status_changedCambio de estado (abierta, con bot, pospuesta, resuelta)Bandeja
conversation.assignedAsignación de agenteBandeja

Servidor MCP

Para Claude, ChatGPT, Cursor, n8n y cualquier cliente MCP: https://app.novoprospect.io/mcp (Streamable HTTP, sin estado). Se entra con OAuth 2.1 (registro dinámico y PKCE: así lo hacen los conectores de Claude.ai y ChatGPT; lo aprueba un administrador) o con un token de la API en Authorization: Bearer np_…. En los dos casos, con los mismos permisos, límites y privacidad que la API: tools/list muestra solo las herramientas que el token puede usar, y cada herramienta llama a la ruta de la API del mismo nombre.

Claude.ai y ChatGPT (conector personalizado)

Claude.ai: Configuración → Conectores → Agregar conector personalizado
ChatGPT: Configuración → Conectores (modo desarrollador) → Crear
URL: https://app.novoprospect.io/mcp
Sin token: se abre NovoProspect para iniciar sesión como administrador y elegir los permisos.

Claude Code

claude mcp add --transport http novoprospect https://app.novoprospect.io/mcp \
  --header "Authorization: Bearer np_…"

Cursor, Windsurf y otros (mcp.json)

{
  "mcpServers": {
    "novoprospect": {
      "url": "https://app.novoprospect.io/mcp",
      "headers": {
        "Authorization": "Bearer np_…"
      }
    }
  }
}

n8n (nodo MCP Client Tool)

Endpoint: https://app.novoprospect.io/mcp
Server Transport: HTTP Streamable
Authentication: Bearer Auth → el token np_…
quien_soyEmpresa y token conectadoscualquier token
listar_usuariosUsuarios de la empresausers:read
buscar_contactosBuscar contactos y leadscontacts:read
ver_contactoVer un contactocontacts:read
crear_leadCrear un leadcontacts:write
editar_contactoEditar un contactocontacts:write
nota_contactoNota en el historial del contactocontacts:write
etiquetar_contactoAgregar o quitar etiquetascontacts:write
ver_embudosEmbudos y etapasdeals:read
buscar_negociosBuscar negociosdeals:read
ver_negocioVer un negociodeals:read
crear_negocioCrear un negociodeals:write
mover_negocioMover un negocio de etapadeals:write
estado_negocioMarcar perdido o reabrirdeals:write
nota_negocioNota en el historial del negociodeals:write
buscar_propiedadesBuscar propiedades y proyectosproperties:read
ver_propiedadFicha de una propiedad o proyectoproperties:read
unidades_proyectoUnidades de un proyectoproperties:read
ver_unidadVer una unidadproperties:read
listar_tareasListar tareastasks:read
ver_tareaVer una tareatasks:read
crear_tareaCrear una tareatasks:write
editar_tareaEditar, completar o reasignar una tareatasks:write
listar_actividadesListar actividadesactivities:read
ver_actividadVer una actividadactivities:read
programar_actividadProgramar una llamada, visita o reuniónactivities:write
editar_actividadReprogramar o completar una actividadactivities:write
listar_canalesCanales de la Bandejainbox:read
listar_conversacionesConversaciones de la Bandejainbox:read
ver_conversacionVer una conversacióninbox:read
historial_mensajesHistorial de mensajesinbox:read
responder_conversacionResponder al cliente o dejar nota privadainbox:write
asignar_conversacionAsignar una conversacióninbox:write
estado_conversacionCambiar el estado de una conversacióninbox:write

Referencia

Cuenta

GET/me — Probar el token
Devuelve la empresa y el nombre del token.
cualquier token
GET/usuarios — Usuarios de la empresa
Para asignar por id o por correo.
users:read

Contactos

GET/contactos — Buscar contactos
Parámetros: q, phone, email, type, ownerEmail, limit, offset
contacts:read
POST/contactos — Crear un lead
Si ya existe (mismo teléfono o correo) no se duplica: devuelve 200 con isNew false. Con "deal" crea también el negocio (necesita deals:write).
contacts:write
GET/contactos/{id} — Ver un contacto
Con su agente y sus negocios.
contacts:read
PATCH/contactos/{id} — Editar un contactocontacts:write
POST/contactos/{id}/notas — Nota en el historialcontacts:write
POST/contactos/{id}/etiquetas — Agregar o quitar etiquetascontacts:write

Negocios

GET/embudos — Embudos y etapas
Las etapas con confirmsSale confirman la venta: la API no mueve negocios a ellas.
deals:read
GET/negocios — Buscar negocios
Parámetros: contactId, pipelineId, stageId, status, q, ownerEmail, limit, offset
deals:read
POST/negocios — Crear un negociodeals:write
GET/negocios/{id} — Ver un negocio
Con contacto, etapa, agente e historial reciente.
deals:read
POST/negocios/{id}/mover — Mover de etapadeals:write
POST/negocios/{id}/estado — Perdido o reabrir
Ganado solo desde el CRM (abre el cierre y la comisión).
deals:write
POST/negocios/{id}/notas — Nota en el historialdeals:write

Propiedades

GET/propiedades — Buscar inventario
En los proyectos, precio y habitaciones se comparan con sus unidades disponibles.
Parámetros: q, kind, category, operation, city, sector, province, minPrice, maxPrice, currency, bedrooms, status, limit, offset
properties:read
GET/propiedades/{id} — Ficha para el cliente
Por id o por código. Sin comisiones, notas privadas ni datos del propietario.
Parámetros: unidades
properties:read
GET/propiedades/{id}/unidades — Disponibilidad de un proyecto
Parámetros: status, bedrooms, maxPrice, limit, offset
properties:read
GET/unidades/{id} — Ver una unidad
Para confirmar que sigue disponible antes de ofrecerla.
properties:read

Tareas y actividades

GET/tareas — Listar tareas
Parámetros: done, ownerEmail, contactId, dealId, dueFrom, dueTo, limit, offset
tasks:read
POST/tareas — Crear una tarea
Si se asigna, al agente le llega a la campana.
tasks:write
GET/tareas/{id} — Ver una tareatasks:read
PATCH/tareas/{id} — Editar, completar o reasignar
Al completar una tarea que se repite se crea la siguiente (nextTaskId).
tasks:write
GET/actividades — Listar actividades
Parámetros: from, to, done, type, ownerEmail, contactId, dealId, limit, offset
activities:read
POST/actividades — Programar una actividad
Queda en el historial del negocio y del contacto y en el Google Calendar del agente si lo tiene conectado.
activities:write
GET/actividades/{id} — Ver una actividadactivities:read
PATCH/actividades/{id} — Reprogramar o completaractivities:write

Bandeja

GET/canales — Canales de la empresa
Los canales personales de los agentes nunca se exponen.
inbox:read
GET/conversaciones — Listar conversaciones
Más recientes primero. Solo canales de la empresa.
Parámetros: status, channelId, contactId, lastMessageBefore, lastMessageAfter, lastIncomingBefore, limit, offset
inbox:read
GET/conversaciones/{id} — Ver una conversación
Con contacto, agente y últimos 50 mensajes.
inbox:read
GET/conversaciones/{id}/mensajes — Historial de mensajes
Más antiguos primero. Para ir hacia atrás, pasa nextBefore en ?before=.
Parámetros: before, limit
inbox:read
POST/conversaciones/{id}/mensajes — Responder o dejar nota privada
attachments: direcciones públicas https (hasta 10, 16 MB c/u). También acepta multipart/form-data con content, private y los archivos en attachments. Responder no saca la conversación del bot: usa /estado con open.
inbox:write
POST/conversaciones/{id}/asignar — Asignar a un agenteinbox:write
POST/conversaciones/{id}/estado — Cambiar estado
De bot a open pasa la conversación a un humano.
inbox:write
POST/conversaciones/{id}/escribiendo — Mostrar «escribiendo…»
En los canales que lo permiten.
inbox:write

Webhooks

GET/eventos — Eventos disponibles
Los cuerpos de cada evento están en la sección webhooks de este documento.
cualquier token
GET/eventos/{evento}/ejemplo — Ejemplos de un evento
Los últimos 3 envíos reales de la empresa o, si aún no hay, uno con datos inventados (sample: true). Para mapear campos en Zapier o Make.
webhooks:manage
GET/webhooks — Suscripciones creadas por la API
Las creadas en Integraciones no aparecen aquí.
webhooks:manage
POST/webhooks — Suscribirse a eventos (REST Hooks)
Devuelve el secreto de firma una sola vez. Si la URL responde 410, la suscripción se borra sola. Al revocar el token se borran sus suscripciones.
webhooks:manage
DELETE/webhooks/{id} — Borrar una suscripciónwebhooks:manage
Precios · Términos · Privacidad · Configurar cookies · Reembolsos · Eliminar mis datos