Los webhooks son un mecanismo de las APIs para notificar a sistemas externos de eventos relevantes para tu negocio. En Quentli contamos con distintos eventos a los que puedes suscribirte para enterarte de sucesos importantes. Todos los eventos son enviados con una llamada HTTP POST con un cuerpo JSON.

Eventos disponibles

A continuación se enlistan los eventos que puedes consumir utilizando webhooks.
Puedes desplegar cada evento para ver un ejemplo del cuerpo de la solicitud.

INVOICE_CREATED

Enviado cuando se crea una solicitud de pago desde el Dashboard o la API.
{
  "eventId": "<id_de_evento>",
  "eventType": "INVOICE_CREATED",
  "data": {
    "invoiceId": "<id_de_solicitud_de_pago>",
    "amount": 192500,
    "customer": {
      "id": "<id_de_cliente>",
      "customerId": "<id_de_cliente>",
      "name": "Alicia Ríos",
      "email": "alicia@example.com",
      "phoneNumber": "+528445609708",
      "username": "0000128765",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" }
      ]
    },
    "organization": { "id": "<id_de_organización>", "name": "Synergym" },
    "metadata": [
      { "key": "Folio de beca", "value": "012442024" },
      { "key": "Tipo de beca", "value": "Beca Académica 75%" }
    ]
  }
}

INVOICE_UPDATED

Enviado cuando se edita una solicitud de pago desde el Dashboard o la API.
{
  "eventId": "<id_de_evento>",
  "eventType": "INVOICE_UPDATED",
  "data": {
    "invoiceId": "<id_de_solicitud_de_pago>",
    "amount": 192500,
    "customer": {
      "id": "<id_de_cliente>",
      "customerId": "<id_de_cliente>",
      "name": "Alicia Ríos",
      "email": "alicia@example.com",
      "phoneNumber": "+528445609708",
      "username": "0000128765",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" }
      ]
    },
    "organization": { "id": "<id_de_organización>", "name": "Synergym" },
    "metadata": [
      { "key": "Folio de beca", "value": "012442024" },
      { "key": "Tipo de beca", "value": "Beca Académica 75%" }
    ]
  }
}

INVOICE_PAID

Enviado cuando una solicitud de pago es pagada utilizando un método de pago integrado a Quentli. Las solicitudes pagadas por otros medios no generan este evento.
{
  "eventId": "<id_de_evento>",
  "eventType": "INVOICE_PAID",
  "data": {
    "invoiceId": "<id_de_solicitud_de_pago>",
    "amount": 192500,
    "payment": {
      "id": "<id_de_pago>",
      "amount": 192500,
      "currency": "MXN",
      "paymentTime": "2025-01-20T16:59:16.238Z",
      "monthlyInstallments": null,
      "type": "CARD",
      "cardDetail": {
        "id": "<id_de_tarjeta>",
        "cardholder": "Alejandra Lopez",
        "last4": "3202",
        "brand": "VISA",
        "expiryMonth": 10,
        "expiryYear": 2026,
        "funding": "DEBIT",
        "issuer": "BBVA",
        "country": "MEX"
      }
    },
    "customer": {
      "id": "<id_de_cliente>",
      "customerId": "<id_de_cliente>",
      "name": "Alicia Ríos",
      "email": "alicia@example.com",
      "phoneNumber": "+528445609708",
      "username": "0000128765",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" }
      ]
    },
    "organization": { "id": "<id_de_organización>", "name": "Synergym" },
    "metadata": [
      { "key": "Folio de beca", "value": "012442024" },
      { "key": "Tipo de beca", "value": "Beca Académica 75%" }
    ]
  }
}

INVOICE_PAID_OTHER

Enviado cuando una solicitud de pago es pagada utilizando medios externos de pago (e.g., efectivo o terminal bancaria)
{
  "eventId": "<id_de_evento>",
  "eventType": "INVOICE_PAID_OTHER",
  "data": {
    "invoiceId": "<id_de_solicitud_de_pago>",
    "amount": 192500,
    "payment": {
      "id": "<id_de_pago>",
      "amount": 192500,
      "currency": "MXN",
      "paymentTime": "2025-01-20T16:59:16.238Z",
      "monthlyInstallments": null,
      "type": "OTHER",
      "cardDetail": {
        "id": "<id_de_tarjeta>",
        "cardholder": "Alejandra Lopez",
        "last4": "3202",
        "brand": "VISA",
        "expiryMonth": 10,
        "expiryYear": 2026,
        "funding": "DEBIT",
        "issuer": "BBVA",
        "country": "MEX"
      }
    },
    "customer": {
      "id": "<id_de_cliente>",
      "customerId": "<id_de_cliente>",
      "name": "Alicia Ríos",
      "email": "alicia@example.com",
      "phoneNumber": "+528445609708",
      "username": "0000128765",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" }
      ]
    },
    "organization": { "id": "<id_de_organización>", "name": "Synergym" },
    "metadata": [
      { "key": "Folio de beca", "value": "012442024" },
      { "key": "Tipo de beca", "value": "Beca Académica 75%" }
    ]
  }
}

INVOICE_CANCELED

Enviado cuando se cancela una solicitud de pago desde el Dashboard o la API.
{
  "eventId": "<id_de_evento>",
  "eventType": "INVOICE_CANCELED",
  "data": {
    "invoiceId": "<id_de_solicitud_de_pago>",
    "amount": 192500,
    "customer": {
      "id": "<id_de_cliente>",
      "customerId": "<id_de_cliente>",
      "name": "Alicia Ríos",
      "email": "alicia@example.com",
      "phoneNumber": "+528445609708",
      "username": "0000128765",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" }
      ]
    },
    "organization": { "id": "<id_de_organización>", "name": "Synergym" },
    "metadata": [
      { "key": "Folio de beca", "value": "012442024" },
      { "key": "Tipo de beca", "value": "Beca Académica 75%" }
    ]
  }
}

CUSTOMER_CREATED

Enviado cuando se crea un cliente nuevo desde el Dashboard o la API
{
  "eventId": "<id_del_evento>",
  "eventType": "CUSTOMER_CREATED",
  "data": {
    "customer_id": "<id_del_cliente>",
    "name": "Alicia Ríos",
    "email": "alicia@example.com",
    "phoneNumber": "+523211012928",
    "username": "0000128765"
  }
}

CUSTOMER_UPDATED

Enviado cuando se editan los datos de un cliente desde el Dashboard o la API
{
  "eventId": "<id_del_evento>",
  "eventType": "CUSTOMER_UPDATED",
  "data": {
    "customer_id": "<id_del_cliente>",
    "name": "Alicia Ríos",
    "email": "alicia@example.com",
    "phoneNumber": "+523211012928",
    "username": "0000128765"
  }
}

CUSTOMER_ARCHIVED

Enviado cuando se archiva un cliente desde el Dashboard o la API
{
  "eventId": "<id_del_evento>",
  "eventType": "CUSTOMER_ARCHIVED",
  "data": {
    "customer_id": "<id_del_cliente>",
    "name": "Alicia Ríos",
    "email": "alicia@example.com",
    "phoneNumber": "+523211012928",
    "username": "0000128765"
  }
}

PAYMENT_ATTEMPT_SUCCEEDED

Enviado cuando se hizo un intento de cobro (desde la API, Dashboard o Portal de Clientes) y éste fue exitoso.
{
  "eventId": "we_1234567890",
  "eventType": "PAYMENT_ATTEMPT_FAILED",
  "data": {
    "payment": {
      "id": "p_1234567890",
      "amount": 10000,
      "currency": "MXN",
      "type": "CARD",
      "isCompleted": false
    },
    "paymentAttempt": {
      "id": "pa_1234567890",
      "createdAt": "2025-01-22T18:45:30.796Z",
      "success": true,
      "scheduled": false,
      "wasAttemptedByOrganization": false,
      "errorCode": null,
      "attemptNumber": 1
    },
    "customer": {
      "id": "cus_1234567890",
      "name": "Alicia Ríos",
      "email": "aliciarr@ejemplos.com",
      "phoneNumber": "<número_de_celular>",
      "username": "12345",
      "metadata": []
    }
  }
}

PAYMENT_ATTEMPT_FAILED

Enviado cuando se hizo un intento de cobro (desde la API, Dashboard o Portal de Clientes) y no fue exitoso.
{
  "eventId": "we_1234567890",
  "eventType": "PAYMENT_ATTEMPT_FAILED",
  "data": {
    "payment": {
      "id": "p_1234567890",
      "amount": 10000,
      "currency": "MXN",
      "type": "CARD",
      "isCompleted": false
    },
    "paymentAttempt": {
      "id": "pa_1234567890",
      "createdAt": "2025-01-22T18:45:30.796Z",
      "success": false,
      "scheduled": false,
      "wasAttemptedByOrganization": false,
      "errorCode": "05",
      "attemptNumber": 2
    },
    "customer": {
      "id": "cus_1234567890",
      "name": "Alicia Ríos",
      "email": "aliciarr@ejemplos.com",
      "phoneNumber": "<número_de_celular>",
      "username": "<username_del_cliente>",
      "metadata": []
    }
  }
}

PAYMENT_METHOD_CREATED

Enviado cuando se guarda un método de pago perteneciente a un cliente. Esto puede ser una tarjeta o una cuenta bancaria.

Tarjeta de crédito o débito

{
  "eventId": "<id_del_evento>",
  "eventType": "PAYMENT_METHOD_CREATED",
  "data": {
    "paymentMethod": {
      "id": "<id_del_método_de_pago>",
      "type": "CARD",
      "cardDetail": {
        "id": "<id_de_tarjeta>",
        "cardholder": "Alejandra Lopez",
        "last4": "3202",
        "brand": "VISA",
        "expiryMonth": 10,
        "expiryYear": 2026,
        "funding": "DEBIT",
        "issuer": "BBVA",
        "country": "MEX"
      }
    },
    "customer": {
      "id": "cus_1234567890",
      "name": "Alicia Ríos",
      "email": "aliciarr@ejemplos.com",
      "phoneNumber": "<número_de_celular>",
      "username": "<username_del_cliente>",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" },
        { "key": "Tipo de beca", "value": "Beca Académica 75%" }
      ]
    }
  }
}

Cuenta bancaria de México (CLABE)

{
  "eventId": "<id_del_evento>",
  "eventType": "PAYMENT_METHOD_CREATED",
  "data": {
    "paymentMethod": {
      "id": "<id_del_método_de_pago>",
      "type": "MEXICAN_BANK_ACCOUNT",
      "confirmed": false,
      "cardDetail": null,
      "bankAccount": {
        "id": "<id_de_cuenta_bancaria>",
        "clabeLast": "8882",
        "clabeFirst": "072",
        "bankCode": "072",
        "bankName": "BANORTE",
        "verified": false
      }
    },
    "customer": {
      "id": "<id_del_cliente>",
      "name": "Alicia Ríos",
      "email": "aliciarr@ejemplos.com",
      "phoneNumber": "<número_de_celular>",
      "username": "<username_del_cliente>",
      "metadata": [
        { "key": "Nivel", "value": "Ingeniería" },
        { "key": "Tipo de beca", "value": "Beca Académica 75%" }
      ]
    }
  }
}
Para configurar los webhooks en tu organización, por favor ponte en contacto con nosotros a través de soporte@quentli.com.