# alertes.create

Créer une alerte autorisée. Même nom et mêmes critères : rejeu sans duplication ; critères différents : conflit. Le cron évalue périodiquement, sans garantie de temps réel amont.

POST `/api/mcp/v1/alertes.create` · contrat 1.0.0 · OAuth `mcp:write` · offre payante : true.

Outil MCP : `prescriptio_alerte` avec action=add ; même handler métier.

## Entrée

```json
{
  "additionalProperties": false,
  "properties": {
    "departement": {
      "description": "Code departement (01-95, 2A, 2B, 971-978). Sans effet sur la source attribution (DECP ne porte pas le departement) ; sur la source dce, restreint aux dossiers rapproches d'un marche. L'appel le signale dans warnings.",
      "type": "string"
    },
    "departements": {
      "description": "Plusieurs codes departement (memes regles que departement) : une region = la liste de ses departements.",
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "frequency": {
      "description": "Espacement MINIMAL du rejeu (defaut daily). Le robot passe toutes les 3 heures : realtime = a chaque passage, daily = au plus une fois par jour, weekly = une fois par semaine.",
      "enum": [
        "realtime",
        "daily",
        "weekly"
      ],
      "type": "string"
    },
    "montant_min": {
      "description": "Montant minimum en euros. S'applique a la source attribution UNIQUEMENT (DECP, montant renseigne). Sans effet sur marche, dce et permis : le montant estime n'est publie que sur 0,12 % des avis ouverts, le filtre y viderait l'alerte.",
      "minimum": 0,
      "type": "number"
    },
    "name": {
      "description": "Nom de l'alerte (requis pour add). Reutiliser un nom existant avec d'AUTRES criteres est une erreur : supprimer puis recreer.",
      "maxLength": 120,
      "type": "string"
    },
    "query": {
      "description": "Mots-cles rejoues (requis pour add, 2 caracteres minimum). Une liste separee par des virgules vaut un OU.",
      "maxLength": 500,
      "type": "string"
    },
    "sources": {
      "description": "Sources surveillables, defaut = toutes. marche = nouveaux avis publiés, plus un rappel quand la remise approche (J-7) ; dce = nouveaux dossiers de consultation citant vos termes ; attribution = marchés attribués (DECP) citant vos termes, dans les départements suivis ; permis = permis autorisés des 45 derniers jours (Sitadel, publié par dumps) ; reseaux_sociaux = nouveaux posts observés sur les réseaux sociaux citant vos termes ; mairie = nouveaux PV de conseils municipaux citant vos termes ; bodacc = nouvelles annonces légales (BODACC) citant vos termes ; entreprise = nouvelles entreprises de l'annuaire citant vos termes ; contact = nouveaux contacts de l'annuaire citant vos termes ; dvf = ventes immobilières récentes des départements suivis (le terme n'y est pas appliqué). Aucune autre source n'est surveillable : une valeur hors de cette liste est REFUSEE.",
      "items": {
        "enum": [
          "marche",
          "dce",
          "attribution",
          "permis",
          "reseaux_sociaux",
          "mairie",
          "bodacc",
          "entreprise",
          "contact",
          "dvf"
        ],
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "name",
    "query"
  ],
  "type": "object"
}
```

## Exemple synthétique

```json
{
  "departement": "69",
  "frequency": "daily",
  "name": "Veille synthétique isolation",
  "query": "isolation",
  "sources": [
    "marche"
  ]
}
```

## Sortie

```json
{
  "properties": {
    "action": {
      "const": "add"
    },
    "alerte": {
      "properties": {
        "created_at": {
          "type": [
            "string",
            "null"
          ]
        },
        "departements": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "evaluee": {
          "type": "string"
        },
        "frequency": {
          "type": [
            "string",
            "null"
          ]
        },
        "id": {
          "type": "string"
        },
        "is_active": {
          "type": "boolean"
        },
        "kind": {
          "type": "string"
        },
        "montant_min": {
          "type": [
            "number",
            "null"
          ]
        },
        "name": {
          "type": [
            "string",
            "null"
          ]
        },
        "query": {
          "type": [
            "string",
            "null"
          ]
        },
        "sources": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "sources_surveillees": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "created": {
      "type": "boolean"
    },
    "unchanged": {
      "type": "boolean"
    },
    "warnings": {
      "items": {
        "type": "string"
      },
      "type": "array"
    }
  },
  "required": [
    "action",
    "created"
  ],
  "type": "object"
}
```

[Authentification, quotas, pagination et erreurs](/docs/reference/concepts.md). Les propriétés additionnelles des résultats historiques restent autorisées ; ce schéma n'invente pas les champs manquants.
