# Contrat Spirit’Go → MDE-Agenda

## Transport

- HTTPS obligatoire.
- Aucun accès direct entre les bases.
- Route : `PUT|DELETE /wp-json/mde-agenda/v1/spiritgo/events/{spiritgo_id}`.
- Délai maximal accepté pour une signature : 5 minutes.
- Un nonce signé ne peut être utilisé qu’une fois.

## En-têtes signés

- `X-SpiritGo-Key`
- `X-SpiritGo-Timestamp`
- `X-SpiritGo-Nonce`
- `X-SpiritGo-Signature`

Chaîne canonique :

```text
METHOD
/mde-agenda/v1/spiritgo/events/{spiritgo_id}
TIMESTAMP
NONCE
SHA256(BODY)
```

La signature est `HMAC-SHA256(chaîne canonique, secret partagé)`, encodée en hexadécimal minuscule.

## Document PUT

```json
{
  "spiritgo_id": "123",
  "spiritgo_url": "https://eventgo.example/e/slug",
  "title": "Titre",
  "description": "Description",
  "image_url": "https://eventgo.example/images/image.webp",
  "mode": "in_person",
  "location": "Nom, adresse, ville",
  "start_date": "2026-09-12",
  "end_date": "",
  "start_time": "18:30",
  "end_time": "",
  "capacity": 40,
  "price": "15 €",
  "reservation_url": "https://billetterie.example/reserver"
}
```

`mode` accepte `in_person`, `online` ou `hybrid`.

Le PUT est idempotent : un même `spiritgo_id` crée au maximum un événement MDE. Les PUT suivants mettent à jour cette copie.

## Règles WordPress

- L’image distante HTTPS est copiée dans la médiathèque.
- Sans `reservation_url`, le bouton utilise `spiritgo_url`.
- Sont conservés : `spiritgo_id`, `spiritgo_url`, `synced_at`, `source=spiritgo`.
- `pinned` et `mini_pinned` sont préservés lors de chaque PUT.
- Les événements manuels sans `source=spiritgo` ne sont jamais modifiés par cette API.
- DELETE est idempotent et ne cible que `source=spiritgo` avec le même `spiritgo_id`.

## Codes principaux

- `200` : mise à jour ou retrait traité.
- `201` : événement créé.
- `400/422` : document invalide.
- `401` : signature absente, invalide ou expirée.
- `409` : nonce rejoué ou identifiants incohérents.
- `502` : copie de l’image impossible.
- `503` : connexion non configurée.

