BuildNexion

Catálogo de eventos

Al crear el webhook eliges a qué eventos te suscribes. Todos llegan con el mismo sobre (event, created_at, organization_id, data); lo que cambia es data.

Obras

EventoCuándodata
project.createdSe crea una obra (también al adjudicar un presupuesto). Las de demostración no avisan.El objeto obra completo.
project.updatedCambian los datos o el estado de una obra.El objeto obra completo.
project.deletedSe borra una obra.{ id, code, name }

Presupuestos

EventoCuándodata
estimate.createdSe crea un presupuesto.El objeto presupuesto completo.
estimate.updatedCambian sus datos o su estado (también al adjudicarse).El objeto presupuesto completo.
estimate.awardedSe adjudica: nace la obra.{ estimate_id, project_id, code }
estimate.deletedSe borra un presupuesto.{ id, code, name }

Equipo

EventoCuándodata
members.updatedSe añade o se quita a alguien del equipo de una obra o un presupuesto.{ entity: "project" | "estimate", id }. Lo nuevo, en …/members.

Ofertas

EventoCuándodata
budget.createdSe crea una oferta.{ id, project_id, budget_id, code, title, status }
budget.acceptedEl cliente acepta una oferta.{ id, project_id } (en las de presupuestos manuales, también budget_id).

Compras

EventoCuándodata
invoice.createdEntra una factura de compra: al registrarla o, si se sube en lote, cuando la app termina de leerla.La factura con los datos leídos (ver abajo).
invoice.updatedCambia el estado de una factura, a mano o al vincularle o quitarle albaranes.{ id, status }
invoice.conciledLa factura queda conciliada con sus albaranes.{ id, status: "conciliada" }
delivery_note.createdEntra un albarán: al registrarlo o, si se sube en lote, cuando la app termina de leerlo.El albarán con los datos leídos (ver abajo).
delivery_note.updatedSe edita un albarán.id y los campos cambiados, con sus nombres internos. Para tener el albarán completo, pídelo por la API.

Proveedores

EventoCuándodata
provider.createdSe da de alta un proveedor o una subcontrata (también los que crea la app al leer una factura).El objeto proveedor completo, con sus contactos.
provider.updatedCambian sus datos o sus contactos.El objeto proveedor completo.

Contenido de invoice.created

Todo lo que necesita un programa de contabilidad para dar de alta la factura sin otra llamada: datos del proveedor, base, IVA, total, forma de pago y líneas, tal como se leyeron del documento. amount es el total con IVA; image_url caduca en 1 hora.

invoice.created
{
  "event": "invoice.created",
  "created_at": "2026-10-01T07:52:20.114Z",
  "organization_id": "5e8a2f61-9d4b-4c07-b3e1-a7c6d0f2b948",
  "data": {
    "id": "c41e7b92-0d5a-4a3f-9e68-7b2d1c0f5a84",
    "organization_id": "5e8a2f61-9d4b-4c07-b3e1-a7c6d0f2b948",
    "project_id": "6f1c2a9e-3b7d-4c1e-9a52-1d0e8b7c4a21",
    "number": "F-2026/0457",
    "date": "2026-09-30",
    "date_due": "2026-10-30",
    "referencia": "Pedido 2026-014-03",
    "status": "pending_review",
    "type": "factura",
    "rectified_invoice_id": null,
    "paid_date": null,
    "supplier": {
      "name": "Materiales del Sur SL",
      "cif": "B00000001",
      "address": "Polígono Ejemplo, nave 4, Mérida",
      "email": "facturas@ejemplo.es",
      "phone": "924 000 000"
    },
    "base_imponible": 1500,
    "iva_porcentaje": 21,
    "iva_importe": 315,
    "descuento": null,
    "amount": 1815,
    "forma_pago": "Transferencia a 30 días",
    "iban": "ES00 0000 0000 0000 0000 0000",
    "banco": null,
    "lines": [
      {
        "descripcion": "Saco de cemento CEM II 25 kg",
        "cantidad": 60,
        "unidad": "ud",
        "precio_unitario": 6.5,
        "importe": 390
      }
    ],
    "observaciones": null,
    "notas": null,
    "image_url": "https://…/facturas-images/…?token=…",
    "created_at": "2026-10-01T07:51:02.883+00:00"
  }
}

Contenido de delivery_note.created

data
{
  "id": "e7a2c5d8-91b4-4f60-b3d7-28c6e1a09f53",
  "organization_id": "5e8a2f61-9d4b-4c07-b3e1-a7c6d0f2b948",
  "project_id": "6f1c2a9e-3b7d-4c1e-9a52-1d0e8b7c4a21",
  "budget_item_id": null,
  "numero_albaran": "A-88213",
  "delivery_date": "2026-09-12",
  "status": "pending_review",
  "supplier": {
    "name": "Materiales del Sur SL",
    "cif": "B00000001",
    "address": null,
    "email": null,
    "phone": null
  },
  "base_imponible": 1500,
  "iva_porcentaje": 21,
  "iva_importe": 315,
  "total_amount": 1815,
  "lines": [
    {
      "description": "Saco de cemento CEM II 25 kg",
      "quantity": 60,
      "unit": "ud",
      "unit_price": 6.5,
      "total": 390
    }
  ],
  "observaciones": null,
  "image_url": "https://…/delivery-notes/…?token=…",
  "created_at": "2026-09-12T15:31:07.215+00:00"
}

webhook.test

Solo lo envían las pruebas (desde la app o con POST /api/v1/webhooks/{id}/test): data lleva un message. No hace falta suscribirse.

Podemos añadir eventos nuevos y campos nuevos dentro de data. Ignora los que no conozcas en vez de dar error.