Webhooks

Este servicio será el encargado de notificarte todas las actividades de tus cuentas.

Una notificación puede tratarse de una creación o de una modificación de una actividad. Para determinar de qué caso se trata podrás leer el campo type, el cual puede tener alguno de estos valores:

  • ACTIVITY_CREATED: La notificación se trata de la creación de una nueva actividad.
  • ACTIVITY_UPDATED: La notificación se trata de la modificación de una actividad. Las actividades pueden cambiar su estado de PENDING a APPROVED o de PENDING a REJECTED.

Proceso de verificación de la firma digital del request

Junto con la notificación enviaremos un conjunto de headers HTTP que te servirán para verificar la autenticidad de la misma.

Los headers HTTP que enviamos son:

  • x-api-key : este header te permitirá identificar qué api-secret tenés que usar en el caso que se hayan configurado múltiples pares de api-key y api-secret.

  • x-signature : este header contiene la firma digital que deberás verificar para asegurar la integridad del request. Si la firma no coincide, deberás rechazar el pedido.

  • x-timestamp : este header contiene el momento en el que se firmó el pedido en formato unix-epoch para que puedas corroborar que la firma no expiró.

  • x-endpoint : el endpoint al que se realiza el request. Usa este header para regenerar la firma a validar, compararlo con el endpoint de tu servicio y verificar que coinciden.

La firma digital es un código HMAC-SHA256 que se construye utilizando él api-secret y una serie de bytes que está compuesta por la concatenación del timestamp, endpoint y request body codificados en UTF-8.

El siguiente es un pseudo-código para verificar que la firma digital de un request sea legítima:

requestSignature = request.headers['x-signature']

signatureData = encode(request.headers['x-timestamp'] + request.headers['x-endpoint'] + request.body , 'UTF-8')

clientApiSecretDecoded = base64.b64decode(apiSecret)

recreatedSignature = hmac(clientApiSecretDecoded, signatureData, 'SHA256')

validSignature = requestSignature == 'hmac-sha256 ' + recreatedSignature

Notificación de actividades

El siguiente endpoint deberá estar en el servicio del cliente para que pueda recibir los requests de las actividades creadas/actualizadas. Si dicho request retorna un codigo HTTP del tipo 2xx, el mismo no volverá a ser enviado y sera marcado como Enviado correctamente. Caso contrario, se reintentará nuevamente.
Parámetros disponibles
Header Parameters
X-Api-Keystringrequired
Este header te permitirá identificar qué api-secret tenés que usar en el caso que se hayan configurado múltiples pares de api-key y api-secret
Ejemplo: X-Api-Key: h3Ws4Cv09JcCdw7732ig+1Eq3I2b+IWOI1anUu1A4dE=
X-Signaturestringrequired
Este header contiene la firma digital (timestamp + endpoint + body) que deberás verificar para asegurar la integridad del request.Si la firma no coincide, deberás rechazar el pedido.
Ejemplo: X-Signature: hmac-sha256 N70BkBKch1gwQDPj0jF0ooB9QQVXBEp5VQE+SGe6Z0k=
X-Timestampstringrequired
Este header contiene el momento en el que se firmó el pedido en formato unix-epoch para que puedas corroborar que la firma no expiró.
Ejemplo: X-Timestamp: 1637117179
X-Endpointstringrequired
Este header se usa para regenerar la firma a chequear y deberás compararlo con el endpoint de tu servicio para verificar que son coincidentes.
Ejemplo: X-Endpoint: /client/api/activities/updates
Body Parameters
activityobject
datetimestring(format: date-time)required
Fecha de la creacion del evento.
Ejemplo: 2021-12-31T23:59:59.999Z
idempotency_keystringrequired
Identificador idempotente de creación del evento.
Ejemplo: act-20I2tIqG3buTsvHKKORrtY2MkFH
typestringrequired
Tipo de proceso de la actividad.
Ejemplo: ACTIVITY_CREATED
versionstringrequired
Número de version del evento.
Ejemplo: 1.0.0
¿Te resultó útil esta sección?
POST/<url-del-cliente>
{
"activity":{
"account":{
...
}
"created_at":
"2021-12-31T23:59:59.999Z"
"data":{
...
}
"entry_type":
"DEBIT"
"forced":
true
"origin":
"string"
"origin_tx_id":
"atx-200mVjWAnL8tD4vlG3fexiQeWvN"
"process_type":
"string"
"rejection_message":{
...
}
"rejection_reason":
"string"
"result":
"string"
"total_amount":
"1200.15"
"type":
"string"
"updated_at":
"2021-12-31T23:59:59.999Z"
}
"datetime":
"2021-12-31T23:59:59.999Z"
"idempotency_key":
"act-20I2tIqG3buTsvHKKORrtY2MkFH"
"type":
"ACTIVITY_CREATED"
"version":
"1.0.0"
}
Ejemplo de respuestas