> ## Documentation Index
> Fetch the complete documentation index at: https://docs.arquos.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks

> Arquos prévient votre logiciel quand un appel est clos, un relevé soumis ou un devis accepté.

Un administrateur abonne une adresse aux événements de son agence. À chaque événement, Arquos envoie un `POST` JSON à cette adresse.

| Événement | Quand |
| :- | :- |
| `appel.clos` | un appel de dépannage passe à « résolu » |
| `releve.termine` | un relevé est soumis par le technicien |
| `devis.accepte` | un devis est accepté |

Les événements partent quel que soit l'endroit du changement : l'écran, l'application myArquos ou l'API.

## S'abonner

```bash theme={"system"}
curl -X POST https://api.arquos.eu/api/v2/webhooks \
  -H "Authorization: Bearer arq_agent_VOTRE_JETON" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://erp.exemple.fr/arquos", "events": ["appel.clos", "devis.accepte"] }'
```

La réponse donne l'identifiant de l'abonnement et son **secret de signature**, qui n'est montré qu'à cet instant. `POST /webhooks/{id}/test` envoie tout de suite un événement `ping` ; `GET /webhooks/{id}/deliveries` montre les dernières livraisons ; `POST /webhooks/{id}/revoke` retire l'abonnement.

## Ce que vous recevez

```json theme={"system"}
{
  "event": "appel.clos",
  "id": "7a02c798-dc67-412e-8944-15b53f924b52",
  "agency": "99266440-c1e5-404c-9d6f-a7477b865896",
  "equipment": "0065e1df-659e-42e4-aaca-0cd11ba52db4",
  "status": "resolue",
  "occurredAt": "2026-10-10T09:41:12.512Z"
}
```

Lisez l'objet par l'API (`GET /calls/{id}`, `GET /surveys/{id}`, `GET /quotes/{id}`) pour en avoir le détail.

## Vérifier la signature

Chaque envoi porte l'en-tête `X-Arquos-Signature: t=<secondes>,v1=<signature>`. La signature est un HMAC-SHA256, en hexadécimal, du texte `<secondes>.<corps>` avec votre secret. Recalculez-la sur le corps **tel que reçu**, et refusez un horodatage de plus de cinq minutes.

```js theme={"system"}
import { createHmac, timingSafeEqual } from 'node:crypto';

function signatureValide(entete, corps, secret) {
  const { t, v1 } = Object.fromEntries(entete.split(',').map((p) => p.split('=')));
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const attendue = createHmac('sha256', secret).update(`${t}.${corps}`).digest('hex');
  return attendue.length === v1.length && timingSafeEqual(Buffer.from(attendue), Buffer.from(v1));
}
```

## Réponses et relances

Répondez `2xx` en moins de 10 secondes. Sinon, Arquos relance après 1 min, 5 min, 30 min, 2 h et 12 h, puis abandonne. Une même livraison peut arriver deux fois : l'en-tête `X-Arquos-Livraison` porte son identifiant, pour l'ignorer la seconde fois.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.