mirlo

Oportunidades (Deals)

Crear, listar y gestionar oportunidades de venta con pipelines, etapas, productos y conversaciones

Endpoints

MetodoRutaDescripcion
GET/crm/organizations/{organization_id}/dealsListar oportunidades con filtros
POST/crm/organizations/{organization_id}/dealsCrear una oportunidad
GET/crm/organizations/{organization_id}/deals/:idObtener oportunidad por ID
PATCH/crm/organizations/{organization_id}/deals/:idActualizar una oportunidad
PATCH/crm/organizations/{organization_id}/deals/:id/stageMover de etapa
DELETE/crm/organizations/{organization_id}/deals/:idEliminar (soft delete)
POST/crm/organizations/{organization_id}/deals/:id/line-itemsAgregar producto
PATCH/crm/organizations/{organization_id}/deals/:id/line-items/:itemIdActualizar producto
DELETE/crm/organizations/{organization_id}/deals/:id/line-items/:itemIdEliminar producto
POST/crm/organizations/{organization_id}/deals/:id/conversationsVincular conversacion
DELETE/crm/organizations/{organization_id}/deals/:id/conversations/:linkIdDesvincular conversacion
GET/crm/organizations/{organization_id}/deals/:id/stage-timesTiempo por etapa

Crear oportunidad

POST /crm/organizations/{organization_id}/deals

Body

CampoTipoRequeridoDescripcion
namestringSiNombre de la oportunidad
pipeline_idstringSiUUID del pipeline
stage_idstringSiUUID de la etapa inicial
amountnumberNoMonto estimado
currencystringNoCodigo ISO 4217 (default: MXN). Soportados: MXN, USD, EUR, COP, ARS, BRL, CLP, PEN, UYU, BOB, PYG, CRC, DOP, GTQ, HNL, NIO, PAB, GBP, CAD
statusstringNoopen (default), won, lost
owner_idstringNoUUID del miembro responsable
account_idstringNoUUID de la cuenta vinculada
expected_close_datestringNoFecha ISO (YYYY-MM-DD)
conversation_idsstring[]NoIDs de conversaciones a vincular
contactsarrayNoContactos: [{ contact_id, role?, is_primary? }]

Ejemplo

curl -X POST https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Plan Enterprise Acme Corp",
    "pipeline_id": "878132de-d23d-4ee8-afd4-92835b92632d",
    "stage_id": "c2a2e188-216d-4695-b356-aa6b1d13b878",
    "amount": 85000,
    "currency": "MXN",
    "owner_id": "dee2b7d5-1069-4580-bc5b-aa84d9899c5f",
    "expected_close_date": "2026-08-15"
  }'

Respuesta

{
  "id": "deal_5a8509f7-9066-4ab0-8255-e8d7577f71f1",
  "number": 3,
  "reference": "VNT-3",
  "name": "Plan Enterprise Acme Corp",
  "amount": "85000",
  "currency": "MXN",
  "status": "open",
  "pipeline_id": "878132de-d23d-4ee8-afd4-92835b92632d",
  "stage_id": "c2a2e188-216d-4695-b356-aa6b1d13b878",
  "expected_close_date": "2026-08-15T00:00:00.000Z",
  "created_at": "2026-07-12T00:00:00.000Z",
  "pipeline": { "id": "...", "name": "Ventas", "key": "VNT" },
  "stage": { "id": "...", "name": "Prospecto", "stage_order": 0 }
}

Listar oportunidades

GET /crm/organizations/{organization_id}/deals

Query Parameters

ParametroTipoDescripcion
searchstringBusqueda por nombre
pipeline_idstringFiltrar por pipeline
stage_idstringFiltrar por etapa
owner_idstringFiltrar por responsable
statusstringopen, won, lost
account_idstringFiltrar por cuenta
product_idstringFiltrar por producto asociado
amount_minnumberMonto minimo
amount_maxnumberMonto maximo
unassignedbooleantrue para deals sin responsable
currencystringFiltrar por moneda
expected_close_beforestringFecha cierre esperada antes de (YYYY-MM-DD)
expected_close_afterstringFecha cierre esperada despues de (YYYY-MM-DD)
created_afterstringFecha creacion desde (YYYY-MM-DD)
created_beforestringFecha creacion hasta (YYYY-MM-DD)
sort_bystringOrdenar por: amount, created_at, updated_at, name, expected_close_date
sort_dirstringasc o desc
timezonestringEj: America/Mexico_City
limitnumberMaximo de resultados (default: 100)
offsetnumberOffset para paginacion

Ejemplo

curl "https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals?status=open&sort_by=amount&sort_dir=desc&limit=20" \
  -H "X-API-Key: <YOUR_API_KEY>"

Mover de etapa

PATCH /crm/organizations/{organization_id}/deals/:id/stage

Mueve el deal a una nueva etapa del pipeline. Si la etapa destino tiene status won o lost, el deal se actualiza automaticamente.

curl -X PATCH https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals/:id/stage \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "stage_id": "ba6a8df0-5e2b-42de-abe2-575c888b4232"
  }'

Actualizar oportunidad

PATCH /crm/organizations/{organization_id}/deals/:id

Body

CampoTipoDescripcion
namestringNombre
amountnumberMonto
currencystringMoneda
statusstringopen, won, lost
owner_idstringResponsable
account_idstringCuenta vinculada
expected_close_datestringFecha cierre esperada
pipeline_idstringCambiar de pipeline
stage_idstringCambiar de etapa
curl -X PATCH https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals/:id \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 95000,
    "status": "won"
  }'

Productos (Line Items)

Cada oportunidad puede tener productos asociados con cantidad, precio unitario y descuento. El monto del deal se recalcula automaticamente como la suma de los line items.

Agregar producto

POST /crm/organizations/{organization_id}/deals/:id/line-items
CampoTipoRequeridoDescripcion
namestringSiNombre del producto
product_idstringNoUUID del producto del catalogo
quantitynumberSiCantidad
unit_pricenumberSiPrecio unitario
discountnumberNoDescuento fijo (default: 0)
currencystringNoMoneda (default: MXN)
skustringNoSKU del producto
notesstringNoNotas adicionales
curl -X POST https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals/:id/line-items \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Plan Enterprise",
    "product_id": "prod-uuid",
    "quantity": 10,
    "unit_price": 8500,
    "discount": 0
  }'

Respuesta

{
  "id": "item-uuid",
  "deal_id": "deal_...",
  "product_id": "prod-uuid",
  "name": "Plan Enterprise",
  "quantity": 10,
  "unit_price": "8500",
  "discount": "0",
  "total": "85000",
  "currency": "MXN"
}

Eliminar producto

DELETE /crm/organizations/{organization_id}/deals/:id/line-items/:itemId

Conversaciones

Vincular conversacion

POST /crm/organizations/{organization_id}/deals/:id/conversations
CampoTipoRequeridoDescripcion
conversation_idstringSiID de la conversacion o llamada
channelstringNowhatsapp, voice, email, sms, webchat
linked_bystringNoUUID del miembro que vincula

Al vincular, el sistema captura automaticamente el resumen de IA de la conversacion o llamada y lo almacena en la actividad.

curl -X POST https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals/:id/conversations \
  -H "X-API-Key: <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "conversation_id": "conv-uuid",
    "channel": "whatsapp"
  }'

Desvincular conversacion

DELETE /crm/organizations/{organization_id}/deals/:id/conversations/:linkId

Tiempo por etapa

GET /crm/organizations/{organization_id}/deals/:id/stage-times

Retorna cuanto tiempo estuvo el deal en cada etapa del pipeline.

curl "https://api.mirlo.com/v1/crm/organizations/{organization_id}/deals/:id/stage-times" \
  -H "X-API-Key: <YOUR_API_KEY>"

Respuesta

{
  "deal_id": "deal_...",
  "stages": [
    {
      "stage_id": "...",
      "stage_name": "Prospecto",
      "stage_order": 0,
      "duration_ms": 64800000,
      "is_current": false
    },
    {
      "stage_id": "...",
      "stage_name": "Contactado",
      "stage_order": 1,
      "duration_ms": 21600000,
      "is_current": true
    }
  ]
}

En esta pagina