Les dossiers rangent la bibliothèque, sur cinq niveaux au plus. La couleur et l’icône ne valent que pour les dossiers de premier niveau ; les demander pour un sous-dossier répond 403 forbidden.
À savoir
GET /v1/foldersliste les sous-dossiers d’un parent (le premier niveau sansparentId) ; les contenus d’un dossier se lisent avec GET /v1/contents?folderId=….- Supprimer un dossier supprime ses sous-dossiers et leurs contenus.
L’objet Folder
Un dossier de la bibliothèque (« Mes contenus »). Les dossiers s’imbriquent sur cinq niveaux au plus.
| Champ | Type | Description |
|---|---|---|
id | string (uuid) | Identifiant du dossier (UUID). |
name | string | Nom du dossier. |
parentId | string | null | Dossier parent, ou null pour un dossier de premier niveau. |
description | string | null | Description, ou null. |
color | string | null | Couleur #RRGGBB (dossiers de premier niveau seulement), ou null. |
icon | string | null | Nom d’icône (dossiers de premier niveau seulement), ou null. |
updatedAt | string (date-time) | Instant de la dernière modification (ISO 8601, UTC). |
{
"id": "7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60",
"name": "Biology",
"parentId": null,
"description": "Year 12 biology.",
"color": "#3B82F6",
"icon": "leaf",
"updatedAt": "2026-10-02T08:30:12.000Z"
}Lister les sous-dossiers d’un dossier
/v1/foldersScope folders:readLes dossiers rangés directement dans le parent (le premier niveau si parentId est omis), dans l’ordre de la bibliothèque, paginés.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
parentId | requête | string (uuid) | Dossier parent (UUID). Omettez-le pour lister les dossiers de premier niveau. |
limit | requête | integerde 1 à 100 · défaut 50 | Nombre d’éléments par page, de 1 à 100 (50 par défaut). |
cursor | requête | string200 caractères au plus | Curseur opaque : le nextCursor de la page précédente. Gardez le même limit d’une page à l’autre. |
Réponse 200
Une page de dossiers — Une page de Folder { data, nextCursor, hasMore }
Erreurs
| HTTP | Signification |
|---|---|
400 | validation_error ou invalid_cursor |
401 | invalid_api_key ou revoked_api_key |
403 | insufficient_scope, account_suspended, live_not_enabled ou forbidden |
404 | not_found — le dossier parent n’existe pas ou n’est pas visible avec cette clé |
406 | not_acceptable — l’en-tête Accept exclut application/json |
429 | rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-* |
500 | internal_error |
503 | unavailable — voyez l’en-tête Retry-After |
curl "https://api.memojin.com/v1/folders?limit=50" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"{
"data": [
{
"id": "7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60",
"name": "Biology",
"parentId": null,
"description": "Year 12 biology.",
"color": "#3B82F6",
"icon": "leaf",
"updatedAt": "2026-10-02T08:30:12.000Z"
}
],
"nextCursor": null,
"hasMore": false
}Créer un dossier
/v1/foldersScope folders:writeCrée un dossier au premier niveau ou dans un parent (cinq niveaux au plus). La couleur et l’icône ne valent que pour les dossiers de premier niveau.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
Idempotency-Key | en-tête | string | Fortement recommandée. Une valeur unique par opération (UUID v4), réutilisée telle quelle à chaque nouvelle tentative. Pendant 24 heures, la même clé et la même requête rejouent la première réponse (Idempotent-Replayed: true) sans second effet ni second débit ; une autre requête avec la même clé → 422 idempotency_key_reused ; encore en cours → 409 idempotency_in_progress. |
Corps de la requête CreateFolderRequest
Un nouveau dossier.
| Champ | Type | Description |
|---|---|---|
nameobligatoire | string1 à 200 caractères | Nom du dossier (1 à 200 caractères). |
parentId | string (uuid) | null | Dossier parent ; omis ou null = premier niveau. |
description | string | null2000 caractères au plus | Description (2 000 caractères au plus). |
color | string | null | Couleur #RRGGBB (dossiers de premier niveau seulement), ou null. |
icon | string | null64 caractères au plus | Nom d’icône (dossiers de premier niveau seulement). |
Réponse 201
Le dossier créé — Un objet Folder
Erreurs
| HTTP | Signification |
|---|---|
400 | validation_error ou bad_request |
401 | invalid_api_key ou revoked_api_key |
403 | insufficient_scope, account_suspended, live_not_enabled ou forbidden |
404 | not_found — le dossier parent n’existe pas ou n’est pas visible avec cette clé |
406 | not_acceptable — l’en-tête Accept exclut application/json |
409 | idempotency_in_progress — réessayez après Retry-After (1 s) |
413 | payload_too_large |
415 | unsupported_media_type |
422 | idempotency_key_reused, ou une règle métier (voyez la description) |
429 | rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-* |
500 | internal_error |
503 | unavailable — voyez l’en-tête Retry-After |
curl -X POST "https://api.memojin.com/v1/folders" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Idempotency-Key: 6f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87" \
-H "Content-Type: application/json" \
-d '{
"name": "Biology",
"color": "#3B82F6",
"icon": "leaf"
}'{
"id": "7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60",
"name": "Biology",
"parentId": null,
"description": "Year 12 biology.",
"color": "#3B82F6",
"icon": "leaf",
"updatedAt": "2026-10-02T08:30:12.000Z"
}Lire un dossier
/v1/folders/{folderId}Scope folders:readUn dossier du compte au nom duquel la clé d’API agit. Répond 304 à un If-None-Match qui correspond.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
folderIdobligatoire | chemin | string (uuid) | Identifiant du dossier (UUID). |
Réponse 200
Le dossier — Un objet Folder
Erreurs
| HTTP | Signification |
|---|---|
400 | validation_error — un identifiant n’est pas un UUID |
401 | invalid_api_key ou revoked_api_key |
403 | insufficient_scope, account_suspended, live_not_enabled ou forbidden |
404 | not_found |
406 | not_acceptable — l’en-tête Accept exclut application/json |
429 | rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-* |
500 | internal_error |
503 | unavailable — voyez l’en-tête Retry-After |
curl "https://api.memojin.com/v1/folders/7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"{
"id": "7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60",
"name": "Biology",
"parentId": null,
"description": "Year 12 biology.",
"color": "#3B82F6",
"icon": "leaf",
"updatedAt": "2026-10-02T08:30:12.000Z"
}Modifier un dossier
/v1/folders/{folderId}Scope folders:writeModifie le nom, la description, la couleur ou l’icône (couleur et icône : dossiers de premier niveau seulement, 403 forbidden sinon).
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
folderIdobligatoire | chemin | string (uuid) | Identifiant du dossier (UUID). |
Corps de la requête UpdateFolderRequest
Les champs à modifier ; les autres restent tels quels.
| Champ | Type | Description |
|---|---|---|
name | string1 à 200 caractères | Nouveau nom (1 à 200 caractères). |
description | string | null2000 caractères au plus | Nouvelle description, ou null pour l’effacer. |
color | string | null | Couleur #RRGGBB (dossiers de premier niveau seulement), ou null. |
icon | string | null64 caractères au plus | Nouveau nom d’icône, ou null. |
Réponse 200
Le dossier modifié — Un objet Folder
Erreurs
| HTTP | Signification |
|---|---|
400 | validation_error ou bad_request |
401 | invalid_api_key ou revoked_api_key |
403 | insufficient_scope, account_suspended, live_not_enabled ou forbidden |
404 | not_found |
406 | not_acceptable — l’en-tête Accept exclut application/json |
412 | precondition_failed — If-Match ne correspond pas à l’ETag actuel |
413 | payload_too_large |
415 | unsupported_media_type |
429 | rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-* |
500 | internal_error |
503 | unavailable — voyez l’en-tête Retry-After |
curl -X PATCH "https://api.memojin.com/v1/folders/7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Biology — Year 12"
}'{
"id": "7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60",
"name": "Biology",
"parentId": null,
"description": "Year 12 biology.",
"color": "#3B82F6",
"icon": "leaf",
"updatedAt": "2026-10-02T08:30:12.000Z"
}Supprimer un dossier
/v1/folders/{folderId}Scope folders:writeSupprime le dossier, ses sous-dossiers et leurs contenus. Répond 204 sans corps.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
folderIdobligatoire | chemin | string (uuid) | Identifiant du dossier (UUID). |
Réponse 204
Supprimé — Pas de corps de réponse.
Erreurs
| HTTP | Signification |
|---|---|
400 | validation_error — un identifiant n’est pas un UUID |
401 | invalid_api_key ou revoked_api_key |
403 | insufficient_scope, account_suspended, live_not_enabled ou forbidden |
404 | not_found |
406 | not_acceptable — l’en-tête Accept exclut application/json |
412 | precondition_failed — If-Match ne correspond pas à l’ETag actuel |
429 | rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-* |
500 | internal_error |
503 | unavailable — voyez l’en-tête Retry-After |
curl -X DELETE "https://api.memojin.com/v1/folders/7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"