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

# Livraison, tentatives et idempotence des webhooks

> Gérez de façon fiable les en-têtes, livraisons, tentatives et événements dupliqués des webhooks

Une réponse `2xx` accuse réception d’une livraison de webhook. Une réponse non-`2xx` ou une erreur de transport ne l’accuse pas.

<Warning>
  Si votre endpoint limite les adresses IP sources, autorisez avant tout test
  les IP d’egress Immoteur suivantes :{" "}

  `51.38.208.80` et `54.37.96.165`{/* immoteur-parameter:end */}.
</Warning>

## Recevez un webhook de façon sûre

Gardez le handler HTTP minimal. N’exécutez pas de logique métier lente, d’enrichissement ou d’appel API en aval avant d’accuser réception.

```mermaid theme={null}
sequenceDiagram
  participant I as Immoteur
  participant R as Votre receiver HTTP
  participant Q as Votre queue
  participant W as Votre worker
  I->>R: POST payload et en-têtes de livraison
  R->>Q: Persister ou mettre l’événement en queue
  R-->>I: 204 No Content
  Q->>W: Traiter l’événement en queue
```

1. Lisez `X-Immoteur-Event-Id` et persistez ou mettez durablement l’événement en queue avant de l’accuser réception.
2. Renvoyez `204 No Content` ou une autre réponse `2xx` dès que ce travail est sûr.
3. Traitez l’événement dans votre propre worker ou queue après la réponse HTTP. La queue et le worker relèvent de votre architecture d’intégration, pas d’un service Immoteur.

## Timeouts

Immoteur applique actuellement un timeout de connexion de {/* immoteur-parameter:start {{immoteur.webhook.delivery.connection_timeout}} */}5 secondes{/* immoteur-parameter:end */} et un timeout de requête de {/* immoteur-parameter:start {{immoteur.webhook.delivery.request_timeout}} */}5 secondes{/* immoteur-parameter:end */}. Un receiver qui attend un travail lent peut expirer avant d’accuser réception. Persistez ou mettez en queue, puis renvoyez rapidement une réponse réussie.

## Lisez les en-têtes de livraison

| En-tête                  | Portée                  | Stabilité                                                | Action du receiver                                                                                |
| ------------------------ | ----------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| `User-Agent`             | Chaque livraison        | `ImmoteurWebhook/1` identifie le trafic webhook Immoteur | Utilisez-le uniquement comme contexte de livraison ; ce n’est pas un mécanisme d’authentification |
| `X-Immoteur-Service-Id`  | Chaque livraison        | Identifie le service Immoteur configuré                  | Conservez-le avec l’événement lorsqu’un receiver gère plusieurs services                          |
| `X-Immoteur-Event-Id`    | Corrélation d’événement | Stable entre les réessais d’une notification d’annonce   | Utilisez-le comme clé d’idempotence pour les notifications d’annonces                             |
| `X-Immoteur-Delivery-Id` | Tentative HTTP          | Change à chaque tentative de livraison                   | Journalisez-le pour le diagnostic ; ne l’utilisez pas comme clé d’idempotence                     |
| `X-Immoteur-Timestamp`   | Tentative HTTP          | Timestamp Unix en secondes                               | Conservez-le lorsque le timing de livraison est utile à votre intégration                         |

Ne supposez pas que les chunks d’export bénéficient de la même stabilité d’event ID que les notifications d’annonces.

## Réessais et circuit breaker

| Type de livraison      | Contrat de réessai actuel                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Notification d’annonce | Une livraison initiale puis jusqu’à {/* immoteur-parameter:start {{immoteur.webhook.classified.retry_count}} */}3{/* immoteur-parameter:end */} réessais. Les délais par défaut sont de {/* immoteur-parameter:start {{immoteur.webhook.classified.retry_delays}} */}30, 60 et 120{/* immoteur-parameter:end */} secondes. Un `Retry-After` ou `RateLimit-Reset` du receiver peut ajuster le délai, avec un maximum de {/* immoteur-parameter:start {{immoteur.webhook.classified.retry_delay_cap}} */}5 minutes{/* immoteur-parameter:end */}. |
| Export d’annonces      | La valeur par défaut actuelle est de {/* immoteur-parameter:start {{immoteur.webhook.export.attempt_count}} */}3{/* immoteur-parameter:end */} tentatives au total. Une tentative non réussie est remise en file après {/* immoteur-parameter:start {{immoteur.webhook.export.retry_delay}} */}30 secondes{/* immoteur-parameter:end */}.                                                                                                                                                                                                       |

Une réponse non-`2xx`, y compris une `4xx`, n’est pas un accusé de réception réussi. Un export peut avoir plusieurs tentatives et chunks : ne supposez ni taille fixe ni ordre strict.

```mermaid theme={null}
flowchart TD
  A[Mise à jour d’annonce ou chunk d’export] --> B[HTTP POST]
  B -->|2xx| C[Livraison accusée]
  B -->|Non-2xx ou erreur de transport| D[Appliquer la politique de réessai]
  D -->|Réessai réussi| C
  D -->|Réessais épuisés| E[Échec de livraison]
  D -->|Seuil du circuit atteint| F[Circuit temporairement ouvert]
  F --> G[Ignorer les livraisons pendant l’ouverture]
```

Immoteur applique la politique de réessai adaptée après une livraison non accusée. Lorsque {/* immoteur-parameter:start {{immoteur.webhook.circuit.in_flight_retry_limit}} */}1 000{/* immoteur-parameter:end */} événements en réessai sont en cours pour un service, son circuit s’ouvre pendant {/* immoteur-parameter:start {{immoteur.webhook.circuit.cooldown}} */}10 minutes{/* immoteur-parameter:end */}. Les livraisons de ce service sont ignorées pendant ce délai et ne sont pas rejouées automatiquement.

Configurez l’endpoint et les filtres dans [Configurer les webhooks Immoteur](./webhook). Utilisez [Synchroniser les annonces](./synchroniser-annonces-immobilieres) pour le flux d’intégration avec export complet, notifications en direct et export delta. Utilisez [Fiabilité de l’API](./fiabilite-api) pour les en-têtes de limite de l’API.
