# Webhooks

## Webhooks

Puedes especificar un webhook para recibir notificaciones en tu servidor cuando un documento ha sido firmado, revisarlo, y continuar con tu proceso.

Para especificar un webhook, inicia sesión en tu cuenta de desarrollador en [https://acertia.mx/developers/login](https://app.gitbook.com/s/-M7jrLqXFJxQhfJYDw7G/acertia.mx/developers/login). La URL que proporciones debe aceptar solicitudes HTTP POST con un JSON Content Type (`application/json`).

Cada vez que se firme un documento que tu generaste, Acertia hará un POST a tu webhook con esta información:

```javascript
{
    //el id de la notificación, puedes usar este id para solicitar
    //más información sobre este documento
    notification_id: 32,
    //el título del documento que fue firmado
    document_title: 'terms_of_service.pdf',
    //un id único para el documento (tal como se encuentra en la url)
    //url: https://Acertia.com/pdf/94a9398d-e0b6-40cf-9334-5f7f24fb883s/
    Acertia_id: '94a9398d-e0b6-40cf-9334-5f7f24fb883s',
    //descripción del evento
    text: 'Document just signed',
    //tipo de notificación, existen tres tipos posibles:
    //1. original_signed: un usuario ha firmado este documento
    //2. universal_signed: la firma ha sido encapsulada
    //3. document_completed: se han firmado todos los stickers
    notification_type: 'original_signed',
    //el correo del firmante
    signer_email:'john@gmail.com',
    //fingerprint del certificado del firmante
    signer_fingerprint: 'ae5e5f0846658e05d6afr2fad84f10ba5fb71d328'
    // informacion adicional del firmante
    signer_data: {}
}
```

Si la cuenta de tu organización tiene activados los sellos NOM151 de manera automática, además de las anteriores recibirás otras dos notificaciones

```javascript
{
    //1. original_nom151_stamped: se ha realizado el sello nom151 
    //   sobre el documento original
    //2. universal_nom151_stamped: se ha realizado el sello nom151
    //   sobre el documento universal
    notification_type: 'original_nom151_stamped',
    meta: {
        hash: 'hash del documento con el que se generó el sello',
        tsa: 'nombre de la autoridad que firmó el sello',
        policy: 'policy id de la autoridad',
        genTime: 'fecha de generación del sello'
    }
}
```

### Confirmación de Webhook

Acertia espera recibir un código HTTP 200 como respuesta a la notificación. Si no lo recibe, asume que hay un problema y se comportará de la siguiente manera:

1. URL inválida: si el webhook es una URL inválida, no volverá a intentar
2. Si no se obtiene respuesta de una URL válida: Acertia volverá a intentar utilizando *exponential backoff*. Esto quiere decir que programará su ejecución de acuerdo a la siguiente fórmula:

**10 segundos + min((2 ^ intentos), 600) + Random(0-1)ms**

Por lo que el tiempo irá incrementando entre cada intento hasta llegar a un máximo de 600 segundos (10 minutos) y 30 intentos.

### Consultas

Con el `notification_id` puedes solicitar más detalles sobre un documento. La solicitud tiene que contener la siguiente información:

```javascript
{
    //el id de la notificación que recibiste
    notification_id: 32
    //la acción que quieres realizar
    //(ve más abajo para más información)
    action: 'download_document'
}
```

#### Acciones disponibles

Actualmente hay cuatro acciones disponibles

**1.download\_document**. Descarga un JSON con el documento con las firmas encapsuladas

```javascript
const response = await services.getData({
    notification_id: 5,
    action: 'download_document'
})
```

Esto regresará un JSON con la siguiente información:

```javascript
{
    //nombre del documento
    name: "default.pdf",
    //número actual de firmas en el documento
    signatures_count: 1,
    //PDF codificado en base64
    data:"base64data"
}
```

**2. download\_document\_bytes**. Descarga el documento con las firmas encapsuladas

**3. download\_original\_document**. Descarga un JSON con el documento con las firmas originales.&#x20;

**4. download\_original\_bytes**. Descarga el documento con las firmas originales.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.acertia.mx/webhooks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
