Une carte mémo est une notion à retenir : un recto (la question) et un verso (la réponse), révisés par répétition espacée dans l’application. Les cartes appartiennent à un contenu et se listent dans son ordre.
À savoir
- Le verso s’écrit et se lit en texte ; les formules LaTeX sont conservées.
retentionetlastReviewedAtdécrivent la mémorisation du compte au nom duquel la clé agit ; ils sont renseignés dans les listes (GET …/memocards).- Une carte partagée par un espace se lit ; seul son propriétaire la modifie ou la supprime. Supprimer une carte supprime ses questions.
- Pour générer les cartes d’un contenu par l’IA, voyez générations IA.
L’objet Memocard
Une carte mémo : un recto, un verso, révisée par répétition espacée.
| Champ | Type | Description |
|---|---|---|
id | string (uuid) | Identifiant de la carte mémo (UUID). |
contentId | string | null | Contenu auquel appartient la carte mémo. |
front | string | null | Recto : l’énoncé ou le titre. |
back | string | null | Verso, en texte brut (formules entre $…$, $$…$$). |
explanation | string | null | Explication facultative, ou null. |
retention | number | nullde 0 à 1 | Rétention estimée pour le compte (de 0 à 1, modèle de répétition espacée), donnée dans les listes ; null si la carte n’a jamais été révisée, ou sur une lecture unitaire. |
lastReviewedAt | string (date-time) | null | Dernière révision par le compte, donnée dans les listes ; null si la carte n’a jamais été révisée, ou sur une lecture unitaire. |
createdAt | string (date-time) | null | Instant de création (ISO 8601, UTC). |
updatedAt | string (date-time) | null | Instant de la dernière modification (ISO 8601, UTC). |
{
"id": "c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21",
"contentId": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"front": "Where does photosynthesis take place?",
"back": "In the chloroplasts, mainly in the leaves.",
"explanation": null,
"retention": 0.82,
"lastReviewedAt": "2026-10-03T18:12:00.000Z",
"createdAt": "2026-10-01T14:05:00.000Z",
"updatedAt": "2026-10-01T14:05:00.000Z"
}Lister les cartes mémo d’un contenu
/v1/contents/{contentId}/memocardsScope memocards:readLes cartes mémo du contenu, dans son ordre, paginées. retention et lastReviewedAt sont ceux du compte au nom duquel la clé agit.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
contentIdobligatoire | chemin | string (uuid) | Identifiant du contenu (UUID). |
limit | requête | integerde 1 à 100 · défaut 20 | Nombre d’éléments par page, de 1 à 100 (20 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 cartes mémo — Une page de Memocard { 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 contenu 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/contents/3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87/memocards?limit=20" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"{
"data": [
{
"id": "c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21",
"contentId": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"front": "Where does photosynthesis take place?",
"back": "In the chloroplasts, mainly in the leaves.",
"explanation": null,
"retention": 0.82,
"lastReviewedAt": "2026-10-03T18:12:00.000Z",
"createdAt": "2026-10-01T14:05:00.000Z",
"updatedAt": "2026-10-01T14:05:00.000Z"
}
],
"nextCursor": null,
"hasMore": false
}Créer une carte mémo
/v1/contents/{contentId}/memocardsScope memocards:writeAjoute une carte mémo à la fin du contenu. Répond 201 avec la carte et son Location.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
contentIdobligatoire | chemin | string (uuid) | Identifiant du contenu (UUID). |
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 CreateMemocardRequest
Une nouvelle carte mémo.
| Champ | Type | Description |
|---|---|---|
frontobligatoire | string1 à 2000 caractères | Recto (1 à 2 000 caractères). |
backobligatoire | string1 à 20000 caractères | Verso, en texte brut (formules entre $…$). |
explanation | string | null5000 caractères au plus | Explication facultative. |
Réponse 201
La carte mémo créée — Un objet Memocard
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 contenu 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/contents/3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87/memocards" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Idempotency-Key: 6f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87" \
-H "Content-Type: application/json" \
-d '{
"front": "Where does photosynthesis take place?",
"back": "In the chloroplasts, mainly in the leaves."
}'{
"id": "c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21",
"contentId": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"front": "Where does photosynthesis take place?",
"back": "In the chloroplasts, mainly in the leaves.",
"explanation": null,
"retention": 0.82,
"lastReviewedAt": "2026-10-03T18:12:00.000Z",
"createdAt": "2026-10-01T14:05:00.000Z",
"updatedAt": "2026-10-01T14:05:00.000Z"
}Lire une carte mémo
/v1/memocards/{memocardId}Scope memocards:readUne carte mémo visible du compte au nom duquel la clé d’API agit (la sienne, ou partagée avec lui par un espace). Répond 304 à un If-None-Match qui correspond.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
memocardIdobligatoire | chemin | string (uuid) | Identifiant de la carte mémo (UUID). |
Réponse 200
La carte mémo — Un objet Memocard
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/memocards/c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"{
"id": "c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21",
"contentId": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"front": "Where does photosynthesis take place?",
"back": "In the chloroplasts, mainly in the leaves.",
"explanation": null,
"retention": 0.82,
"lastReviewedAt": "2026-10-03T18:12:00.000Z",
"createdAt": "2026-10-01T14:05:00.000Z",
"updatedAt": "2026-10-01T14:05:00.000Z"
}Modifier une carte mémo
/v1/memocards/{memocardId}Scope memocards:writeModifie le recto, le verso ou l’explication. Propriétaire seulement.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
memocardIdobligatoire | chemin | string (uuid) | Identifiant de la carte mémo (UUID). |
Corps de la requête UpdateMemocardRequest
Les champs à modifier ; les autres restent tels quels.
| Champ | Type | Description |
|---|---|---|
front | string1 à 2000 caractères | Nouveau recto. |
back | string1 à 20000 caractères | Nouveau verso, en texte brut. |
explanation | string | null5000 caractères au plus | Nouvelle explication, ou null pour l’effacer. |
Réponse 200
La carte mémo modifiée — Un objet Memocard
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/memocards/c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"back": "In the chloroplasts."
}'{
"id": "c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21",
"contentId": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"front": "Where does photosynthesis take place?",
"back": "In the chloroplasts, mainly in the leaves.",
"explanation": null,
"retention": 0.82,
"lastReviewedAt": "2026-10-03T18:12:00.000Z",
"createdAt": "2026-10-01T14:05:00.000Z",
"updatedAt": "2026-10-01T14:05:00.000Z"
}Supprimer une carte mémo
/v1/memocards/{memocardId}Scope memocards:writeSupprime la carte mémo et ses questions. Propriétaire seulement. Répond 204 sans corps.
Paramètres
| Champ | Où | Type | Description |
|---|---|---|---|
memocardIdobligatoire | chemin | string (uuid) | Identifiant de la carte mémo (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/memocards/c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"