Documentation API

Générez des fichiers .ics programmatiquement via l'API REST.

Endpoint

POST https://icsmulti-web.vercel.app/api/generate

Authentification

Ajoutez votre clé API dans le header X-API-Key :

X-API-Key: votre-cle-api
Obtenir une clé API →

Corps de la requête

{
  "evenement": {                        // obligatoire
    "occurrences": [                    // obligatoire — au moins un événement
      {
        "id":             string,       // obligatoire — identifiant unique
        "titre":          string,       // obligatoire — titre de l'événement
        "notes":          string,       // optionnel  — description / notes
        "dateDebut":      string,       // obligatoire — ISO 8601 (ex : "2026-05-12T10:00:00Z")
        "dateFin":        string,       // obligatoire — ISO 8601
        "lieu":           string,       // optionnel  — adresse ou lieu
        "touteLaJournee": boolean,      // optionnel  — défaut : false
        "rappelMinutes":  number        // optionnel  — ex : 15, 30, 60, 1440
      }
    ]
  },
  "options": {                          // optionnel
    "fuseau": string                    // optionnel  — IANA (défaut : "Europe/Paris")
  }
}

Réponse

Succès — 200

Content-Type: text/calendar; charset=utf-8
Content-Disposition: attachment; filename="titre_premiere_occurrence.ics"

BEGIN:VCALENDAR
VERSION:2.0
...

Codes d'erreur

Codeerror
400Corps JSON invalide / champ manquant ou incorrect
401Clé API manquante (header X-API-Key absent)
403Clé API invalide ou révoquée
503Service non configuré (KV indisponible)

Exemple de requête

curl -X POST https://icsmulti-web.vercel.app/api/generate \
  -H "X-API-Key: votre-cle-api" \
  -H "Content-Type: application/json" \
  -o reunion.ics \
  -d '{
    "evenement": {
      "occurrences": [
        {
          "id": "evt-1",
          "titre": "Réunion hebdomadaire",
          "notes": "Ordre du jour à confirmer",
          "dateDebut": "2026-05-12T10:00:00Z",
          "dateFin": "2026-05-12T11:00:00Z",
          "lieu": "Salle A, Paris",
          "touteLaJournee": false,
          "rappelMinutes": 15
        }
      ]
    },
    "options": {
      "fuseau": "Europe/Paris"
    }
  }'