# AirCarto API

API HTTP qui expose les données des capteurs AirCarto (qualité de l'air, bruit, vibration, trafic) et la gestion comptes / organisations / projets.

Déployée sur **https://api.aircarto.fr**.

## Stack

- PHP plat (pas de framework) servi par Apache
- PostgreSQL (`pg_*`), multi-serveur
- Auth utilisateur en JWT (HS256)

## Documentation

| Pour qui | Où regarder |
|---|---|
| Consommateurs HTTP (humains) | [Scalar](https://api.aircarto.fr/scalar.html) (lit `openapi.yaml`) · [accueil](https://api.aircarto.fr/) (export CSV guidé) |
| Devs back / endpoints | `auth/API_DOCUMENTATION.md` + lecture directe des `*.php` |
| IA / Claude Code | [`CLAUDE.md`](./CLAUDE.md) à la racine (chargé automatiquement) |
| Specs client, plans internes | `docs/` (non public) |

> `openapi.yaml` à la racine est la **référence publique** de l'API : tout changement d'endpoint la met à jour dans le même commit (section « Nouveautés » datée en tête). Elle ne génère ni ne valide rien côté serveur. `php tools/openapi_check.php` liste les endpoints absents de la spec et les chemins de la spec sans fichier.

## Layout

```
auth/         Endpoints compte (login, JWT, users, orgs, projets, rapports)
capteurs/     Endpoints capteurs (NebuleAir, ModuleAir, MobileAir, ModuleTraffic, EduKit)
sigicom/     Intégration API Sigicom (bruit / vibration)
config/      Bootstraps DB / JWT / mail (secrets gitignored)
migrations/  Schéma SQL versionné par date
docs/        Doc interne (bloquée en HTTP)
```

Convention : `_fichier.php` = helper inclus, **pas** un endpoint. `fichier.php` = endpoint exposé.

## Config locale

Copier les `config/*.example.php` en `config/*.php` et renseigner les secrets (DB, JWT, Sigicom, SMTP). Ces fichiers sont gitignored.
