← Documentation/ api / users

Users API

Une base déterministe de 50 utilisateurs (toujours les mêmes pour faciliter tes tests). Couvre tout le cycle CRUD : lister, lire un détail, créer, mettre à jour, supprimer. La pagination renvoie `total_pages`, `has_next` et même un objet `links` façon HATEOAS — parfait pour t'entraîner à boucler sur les pages dans Make ou n8n.

Authentification

Appel anonyme (autorisé en mode pédagogique)

Lister les utilisateurs

#

Récupère la liste paginée des utilisateurs (50 au total).

GET/api/users

Retourne une page d'utilisateurs avec une pagination complète : `total`, `total_pages`, `has_next`, `next_page` et un objet `links` (next/prev/first/last). Utilise `total_pages` comme **page max** pour ta boucle d'automatisation. Si tu demandes une page > total_pages, l'API te renvoie automatiquement la dernière page valide.

Paramètres de requête
pagenumberoptionnel

Page demandée (1 → total_pages). Plafonnée automatiquement.

Défaut : 1

per_pagenumberoptionnel

Nombre d'utilisateurs par page (1–50).

Défaut : 10

Tester dans le playground
curl -X GET 'https://otter-api-playground.lovable.app/api/users'
Liste paginée d'utilisateurs avec métadonnées de pagination.
{
  "page": 1,
  "per_page": 10,
  "total": 50,
  "total_pages": 5,
  "has_next": true,
  "has_prev": false,
  "next_page": 2,
  "prev_page": null,
  "links": {
    "self": "https://otter-api-playground.lovable.app/api/users?page=1&per_page=10",
    "first": "https://otter-api-playground.lovable.app/api/users?page=1&per_page=10",
    "last": "https://otter-api-playground.lovable.app/api/users?page=5&per_page=10",
    "next": "https://otter-api-playground.lovable.app/api/users?page=2&per_page=10",
    "prev": null
  },
  "data": [
    {
      "id": 1,
      "nom": "Martin",
      "prenom": "Sophie",
      "email": "sophie.martin@loutre.me",
      "pays": "France",
      "ville": "Lyon",
      "age": 32,
      "profession": "Développeuse"
    }
  ]
}

Récupérer un utilisateur

#

Récupère un utilisateur par son identifiant.

GET/api/users/:id

Renvoie un seul utilisateur. Si l'identifiant n'existe pas, retourne 404 avec un message explicite. Les IDs valides vont de 1 à 50.

Paramètres de chemin
idnumberrequis

Identifiant de l'utilisateur (1 à 50).

Tester dans le playground
curl -X GET 'https://otter-api-playground.lovable.app/api/users/3'
Utilisateur trouvé.
{
  "id": 3,
  "nom": "Dubois",
  "prenom": "Lucas",
  "email": "lucas.dubois@loutre.me",
  "pays": "Belgique",
  "ville": "Bruxelles",
  "age": 28,
  "profession": "Designer UX"
}

Créer un utilisateur

#

Crée un nouvel utilisateur (echo + id généré).

POST/api/users

Reçoit un body JSON et renvoie l'utilisateur créé avec un `id` et un `createdAt`. Les données ne sont pas réellement persistées : l'API rejoue ton input pour que tu puisses tester ton intégration sans risque.

Body JSON
prenomstringrequis

Prénom.

nomstringrequis

Nom de famille.

emailstringoptionnel

Adresse email.

paysstringoptionnel

Pays.

agenumberoptionnel

Âge.

professionstringoptionnel

Métier.

Tester dans le playground
curl -X POST 'https://otter-api-playground.lovable.app/api/users' \
  -H 'Content-Type: application/json' \
  -d '{
  "prenom": "Marie",
  "nom": "Dupont",
  "email": "marie.dupont@loutre.me",
  "pays": "France",
  "age": 28,
  "profession": "Designer"
}'
Utilisateur créé.
{
  "id": 1735689600000,
  "prenom": "Marie",
  "nom": "Dupont",
  "email": "marie.dupont@loutre.me",
  "createdAt": "2026-01-01T12:00:00.000Z"
}

Mettre à jour un utilisateur

#

Met à jour un utilisateur (echo).

PUT/api/users/:id

Renvoie l'utilisateur mis à jour. Comme pour POST, rien n'est réellement persisté — c'est volontaire pour que les étudiants puissent tester sans casser quoi que ce soit.

Paramètres de chemin
idnumberrequis

Identifiant de l'utilisateur.

Body JSON
prenomstringoptionnel

Nouveau prénom.

villestringoptionnel

Nouvelle ville.

Tester dans le playground
curl -X PUT 'https://otter-api-playground.lovable.app/api/users/3' \
  -H 'Content-Type: application/json' \
  -d '{
  "ville": "Paris",
  "profession": "Lead Designer"
}'
Utilisateur mis à jour.
{
  "id": 3,
  "ville": "Paris",
  "profession": "Lead Designer",
  "updatedAt": "2026-01-01T12:00:00.000Z"
}

Supprimer un utilisateur

#

Supprime un utilisateur (no-op pédagogique).

DELETE/api/users/:id

Retourne 204 No Content. Aucune donnée n'est supprimée côté serveur, mais ton client recevra exactement la réponse d'une vraie API REST.

Paramètres de chemin
idnumberrequis

Identifiant à supprimer.

Tester dans le playground
curl -X DELETE 'https://otter-api-playground.lovable.app/api/users/3'
Suppression confirmée — pas de body.
(no body)

Guides

Comprendre la pagination

Les endpoints liste acceptent page (défaut 1) et per_page (défaut 10, max 50). La réponse contient toujours : page (page actuelle), per_page, total (nombre total d'éléments), total_pages (la page max — utilise-la comme borne de boucle), has_next / has_prev (booléens), next_page / prev_page (numéros ou null), links (URLs prêtes à l'emploi pour next/prev/first/last) et data (le tableau d'utilisateurs).

Configurer un nœud HTTP Request dans n8n

Étape par étape pour appeler /api/users depuis n8n et boucler sur toutes les pages :

1. Crée un nœud `HTTP Request`

  • Method : GET
  • URL : https://otter-api-playground.lovable.app/api/users
  • Authentication : None (ou Generic Credential Type → Header Auth → Name X-API-Key, Value demo-key si tu veux t'entraîner avec une clé)
  • Send Query Parameters : ✅ active-le, puis ajoute deux paramètres :
  • Name page, Value 1 (ou ={{ $json.next_page }} si tu boucles, voir étape 3)
  • Name per_page, Value 10
  • Options → Response → Response Format : JSON

2. Lis la réponse
Le body parsé contient total_pages (la page max), has_next (booléen) et data (tableau). Connecte un nœud Set ou utilise directement ={{ $json.data }} pour itérer sur les utilisateurs.

3. Boucler page par page (la vraie astuce)
La méthode propre dans n8n :
• Ajoute un nœud Loop Over Items (ou utilise Split In Batches).
• Avant la boucle, crée un nœud Code qui fait un premier appel pour récupérer total_pages et génère un tableau [{page:1},{page:2}, ..., {page:N}].
• Dans la boucle, ton nœud HTTP Request utilise ={{ $json.page }} comme valeur du paramètre page.
• À chaque itération tu obtiens un data de 10 lignes — pousse-les dans Airtable / Google Sheets / ta base.

4. Alternative plus simple : pagination intégrée n8n
Dans le nœud HTTP Request, ouvre Options → Pagination et configure :
• Pagination Mode : Update a Parameter in Each Request
• Type : Query Parameter
• Name : page
• Value : ={{ $pageCount + 1 }}
• Pagination Complete When : Other → expression ={{ $response.body.has_next === false }}
• Limit Pages Fetched : laisse vide ou mets total_pages comme garde-fou.
n8n boucle alors automatiquement et te concatène toutes les pages.

Pas de persistance

Les méthodes POST/PUT/DELETE renvoient des réponses réalistes mais ne modifient rien. C'est conçu pour s'entraîner sans risque.