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).
/api/usersRetourne 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.
pagenumberoptionnelPage demandée (1 → total_pages). Plafonnée automatiquement.
Défaut : 1
per_pagenumberoptionnelNombre d'utilisateurs par page (1–50).
Défaut : 10
curl -X GET 'https://otter-api-playground.lovable.app/api/users'{
"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.
/api/users/:idRenvoie un seul utilisateur. Si l'identifiant n'existe pas, retourne 404 avec un message explicite. Les IDs valides vont de 1 à 50.
idnumberrequisIdentifiant de l'utilisateur (1 à 50).
curl -X GET 'https://otter-api-playground.lovable.app/api/users/3'{
"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é).
/api/usersReç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.
prenomstringrequisPrénom.
nomstringrequisNom de famille.
emailstringoptionnelAdresse email.
paysstringoptionnelPays.
agenumberoptionnelÂge.
professionstringoptionnelMétier.
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"
}'{
"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).
/api/users/:idRenvoie 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.
idnumberrequisIdentifiant de l'utilisateur.
prenomstringoptionnelNouveau prénom.
villestringoptionnelNouvelle ville.
curl -X PUT 'https://otter-api-playground.lovable.app/api/users/3' \
-H 'Content-Type: application/json' \
-d '{
"ville": "Paris",
"profession": "Lead Designer"
}'{
"id": 3,
"ville": "Paris",
"profession": "Lead Designer",
"updatedAt": "2026-01-01T12:00:00.000Z"
}Supprimer un utilisateur
#Supprime un utilisateur (no-op pédagogique).
/api/users/:idRetourne 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.
idnumberrequisIdentifiant à supprimer.
curl -X DELETE 'https://otter-api-playground.lovable.app/api/users/3'(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(ouGeneric Credential Type→ Header Auth → NameX-API-Key, Valuedemo-keysi tu veux t'entraîner avec une clé) - Send Query Parameters : ✅ active-le, puis ajoute deux paramètres :
- Name
page, Value1(ou={{ $json.next_page }}si tu boucles, voir étape 3) - Name
per_page, Value10 - 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.