Dossiers

L’objet Folder et ses cinq opérations : lister les sous-dossiers, créer, lire, renommer, colorer et supprimer un dossier de « Mes contenus ».

api.memojin.com/v1 · Contrat 1.0.0-beta.2 · Bêta

Sections · Dossiers

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/folders liste les sous-dossiers d’un parent (le premier niveau sans parentId) ; 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.

ChampTypeDescription
idtoujours présentstring (uuid)Identifiant du dossier (UUID).
nametoujours présentstringNom du dossier.
parentIdtoujours présentstring | nullDossier parent, ou null pour un dossier de premier niveau.
descriptiontoujours présentstring | nullDescription, ou null.
colortoujours présentstring | nullCouleur #RRGGBB (dossiers de premier niveau seulement), ou null.
icontoujours présentstring | nullNom d’icône (dossiers de premier niveau seulement), ou null.
updatedAttoujours présentstring (date-time)Instant de la dernière modification (ISO 8601, UTC).
Folder
{
  "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

GET/v1/foldersScope folders:read

Les 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

ChampOùTypeDescription
parentIdfacultatifrequêtestring (uuid)Dossier parent (UUID). Omettez-le pour lister les dossiers de premier niveau.
limitfacultatifrequêteintegerde 1 à 100 · défaut 50Nombre d’éléments par page, de 1 à 100 (50 par défaut).
cursorfacultatifrequêtestring200 caractères au plusCurseur 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

HTTPSignification
400validation_error ou invalid_cursor
401invalid_api_key ou revoked_api_key
403insufficient_scope, account_suspended, live_not_enabled ou forbidden
404not_found — le dossier parent n’existe pas ou n’est pas visible avec cette clé
406not_acceptable — l’en-tête Accept exclut application/json
429rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-*
500internal_error
503unavailable — voyez l’en-tête Retry-After
Requête
curl "https://api.memojin.com/v1/folders?limit=50" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY"
Réponse 200
{
  "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

POST/v1/foldersScope folders:write

Cré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

ChampOùTypeDescription
Idempotency-Keyfacultatifen-têtestringFortement 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.

ChampTypeDescription
nameobligatoirestring1 à 200 caractèresNom du dossier (1 à 200 caractères).
parentIdfacultatifstring (uuid) | nullDossier parent ; omis ou null = premier niveau.
descriptionfacultatifstring | null2000 caractères au plusDescription (2 000 caractères au plus).
colorfacultatifstring | nullCouleur #RRGGBB (dossiers de premier niveau seulement), ou null.
iconfacultatifstring | null64 caractères au plusNom d’icône (dossiers de premier niveau seulement).

Réponse 201

Le dossier créé — Un objet Folder

Erreurs

HTTPSignification
400validation_error ou bad_request
401invalid_api_key ou revoked_api_key
403insufficient_scope, account_suspended, live_not_enabled ou forbidden
404not_found — le dossier parent n’existe pas ou n’est pas visible avec cette clé
406not_acceptable — l’en-tête Accept exclut application/json
409idempotency_in_progress — réessayez après Retry-After (1 s)
413payload_too_large
415unsupported_media_type
422idempotency_key_reused, ou une règle métier (voyez la description)
429rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-*
500internal_error
503unavailable — voyez l’en-tête Retry-After
Requête
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"
}'
Réponse 201
{
  "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

GET/v1/folders/{folderId}Scope folders:read

Un dossier du compte au nom duquel la clé d’API agit. Répond 304 à un If-None-Match qui correspond.

Paramètres

ChampOùTypeDescription
folderIdobligatoirecheminstring (uuid)Identifiant du dossier (UUID).

Réponse 200

Le dossier — Un objet Folder

Erreurs

HTTPSignification
400validation_error — un identifiant n’est pas un UUID
401invalid_api_key ou revoked_api_key
403insufficient_scope, account_suspended, live_not_enabled ou forbidden
404not_found
406not_acceptable — l’en-tête Accept exclut application/json
429rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-*
500internal_error
503unavailable — voyez l’en-tête Retry-After
Requête
curl "https://api.memojin.com/v1/folders/7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY"
Réponse 200
{
  "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

PATCH/v1/folders/{folderId}Scope folders:write

Modifie le nom, la description, la couleur ou l’icône (couleur et icône : dossiers de premier niveau seulement, 403 forbidden sinon).

Paramètres

ChampOùTypeDescription
folderIdobligatoirecheminstring (uuid)Identifiant du dossier (UUID).

Corps de la requête UpdateFolderRequest

Les champs à modifier ; les autres restent tels quels.

ChampTypeDescription
namefacultatifstring1 à 200 caractèresNouveau nom (1 à 200 caractères).
descriptionfacultatifstring | null2000 caractères au plusNouvelle description, ou null pour l’effacer.
colorfacultatifstring | nullCouleur #RRGGBB (dossiers de premier niveau seulement), ou null.
iconfacultatifstring | null64 caractères au plusNouveau nom d’icône, ou null.

Réponse 200

Le dossier modifié — Un objet Folder

Erreurs

HTTPSignification
400validation_error ou bad_request
401invalid_api_key ou revoked_api_key
403insufficient_scope, account_suspended, live_not_enabled ou forbidden
404not_found
406not_acceptable — l’en-tête Accept exclut application/json
412precondition_failed — If-Match ne correspond pas à l’ETag actuel
413payload_too_large
415unsupported_media_type
429rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-*
500internal_error
503unavailable — voyez l’en-tête Retry-After
Requête
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"
}'
Réponse 200
{
  "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

DELETE/v1/folders/{folderId}Scope folders:write

Supprime le dossier, ses sous-dossiers et leurs contenus. Répond 204 sans corps.

Paramètres

ChampOùTypeDescription
folderIdobligatoirecheminstring (uuid)Identifiant du dossier (UUID).

Réponse 204

Supprimé — Pas de corps de réponse.

Erreurs

HTTPSignification
400validation_error — un identifiant n’est pas un UUID
401invalid_api_key ou revoked_api_key
403insufficient_scope, account_suspended, live_not_enabled ou forbidden
404not_found
406not_acceptable — l’en-tête Accept exclut application/json
412precondition_failed — If-Match ne correspond pas à l’ETag actuel
429rate_limited ou test_quota_exceeded — voyez les en-têtes Retry-After et RateLimit-*
500internal_error
503unavailable — voyez l’en-tête Retry-After
Requête
curl -X DELETE "https://api.memojin.com/v1/folders/7a2d9c41-0b3e-4c5f-8e6a-1d2c3b4a5f60" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY"