# 📘 API Documentation – Pages & Media Data Retrieval

## 📍 Endpoint

```
POST /api-get-pages-and-medias-to-index.php
```

## 📄 Description

Cet endpoint permet de récupérer une liste paginée de **pages web** et de **pages média** à indexer. Chaque résultat est structuré par type (`Web page` ou `Media page`) et contient les informations suivantes : sections de texte, contenus embarqués (replay, texte, PDF, iframe), tags, SEO et URL.

---

## 🔐 Required Headers

| Header | Value |
|--------|-------|
| Authorization | `Bearer <token>` – Un jeton d'authentification valide est requis. |

---

## 📥 Request Parameters

**Content-Type:** `application/json`

| Paramètre | Type | Obligatoire | Description |
|-----------|------|-------------|-------------|
| `page` | int | Non | Numéro de page à récupérer (par défaut : 1). |
| `pageSize` | int | Non | Nombre d'éléments par page (par défaut : 20). |
| `lastModifiedAt` | string / null | Non | Date au format `Y-m-d H:i:s` pour filtrer les éléments modifiés après cette date. |

---

## ✅ Success Response

**HTTP Code:** `200 OK`

```json
{
  "status": "success",
  "message": "Pages data retrieved successfully.",
  "data": {
    "Web page": [
      {
        "pageId": 123,
        "pageTitle": "Web Example",
        "pageText": [...],
        "pageSEO": {...},
        "pageSource": "example.com",
        "pageURL": "https://example.com/page"
      }
    ],
    "Media page": [
      {
        "pageId": 456,
        "pageTitle": "Media Example",
        "pageText": [...],
        "pageSEO": {...},
        "pageSource": "example.com",
        "pageURL": "https://example.com/media",
        "tags": [...],
        "medias": {
          "videos": [...],
          "pdfs": [...],
          "texts": [...],
          "iframes": [...]
        }
      }
    ]
  }
}
```

---

## ❌ Error Responses

| HTTP Code | Cause | Exemple |
|-----------|-------|---------|
| `400 Bad Request` | Paramètres invalides (ex : date mal formatée, page hors limite) | ```json
{ "status": "Error", "message": "Invalid 'lastModifiedAt' format. It must be in 'Y-m-d H:i:s' format or null.", "data": [] }
``` |
| `401 Unauthorized` | Jeton manquant ou invalide | ```json
{ "error": "Error : Invalid credentials", "errorCode": 401 }
``` |
| `405 Method Not Allowed` | Méthode HTTP non autorisée (seul POST est accepté) | ```json
{ "error": "Error : Method not allowed", "errorCode": 405 }
``` |
| `500 Internal Server Error` | Erreur interne du serveur | ```json
{ "status": "Error", "message": "An unexpected error occurred.", "data": [] }
``` |

---

## 🧾 Custom Response Headers

| Header | Description |
|--------|-------------|
| `X-Total-Pages` | Nombre total de pages disponibles. |
| `X-Current-Page` | Page courante. |
| `X-Current-Count` | Nombre d’éléments retournés (web + média). |

---

## 📝 Notes

- Le token Bearer est obligatoire pour authentifier la requête.
- Le format de date attendu est `Y-m-d H:i:s`.
- Seule la méthode HTTP `POST` est acceptée.
