Cartes mémo

L’objet Memocard (recto, verso, explication, rétention) et ses cinq opérations : lister les cartes d’un contenu, en créer, lire, modifier et supprimer.

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

Sections · Cartes mémo

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.
  • retention et lastReviewedAt dé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.

ChampTypeDescription
idtoujours présentstring (uuid)Identifiant de la carte mémo (UUID).
contentIdtoujours présentstring | nullContenu auquel appartient la carte mémo.
fronttoujours présentstring | nullRecto : l’énoncé ou le titre.
backtoujours présentstring | nullVerso, en texte brut (formules entre $…$, $$…$$).
explanationtoujours présentstring | nullExplication facultative, ou null.
retentiontoujours présentnumber | nullde 0 à 1Ré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.
lastReviewedAttoujours présentstring (date-time) | nullDerniè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.
createdAttoujours présentstring (date-time) | nullInstant de création (ISO 8601, UTC).
updatedAttoujours présentstring (date-time) | nullInstant de la dernière modification (ISO 8601, UTC).
Memocard
{
  "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

GET/v1/contents/{contentId}/memocardsScope memocards:read

Les 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

ChampOùTypeDescription
contentIdobligatoirecheminstring (uuid)Identifiant du contenu (UUID).
limitfacultatifrequêteintegerde 1 à 100 · défaut 20Nombre d’éléments par page, de 1 à 100 (20 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 cartes mémo — Une page de Memocard { 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 contenu 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/contents/3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87/memocards?limit=20" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY"
Réponse 200
{
  "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

POST/v1/contents/{contentId}/memocardsScope memocards:write

Ajoute une carte mémo à la fin du contenu. Répond 201 avec la carte et son Location.

Paramètres

ChampOùTypeDescription
contentIdobligatoirecheminstring (uuid)Identifiant du contenu (UUID).
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 CreateMemocardRequest

Une nouvelle carte mémo.

ChampTypeDescription
frontobligatoirestring1 à 2000 caractèresRecto (1 à 2 000 caractères).
backobligatoirestring1 à 20000 caractèresVerso, en texte brut (formules entre $…$).
explanationfacultatifstring | null5000 caractères au plusExplication facultative.

Réponse 201

La carte mémo créée — Un objet Memocard

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 contenu 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/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."
}'
Réponse 201
{
  "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

GET/v1/memocards/{memocardId}Scope memocards:read

Une 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

ChampOùTypeDescription
memocardIdobligatoirecheminstring (uuid)Identifiant de la carte mémo (UUID).

Réponse 200

La carte mémo — Un objet Memocard

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/memocards/c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY"
Réponse 200
{
  "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

PATCH/v1/memocards/{memocardId}Scope memocards:write

Modifie le recto, le verso ou l’explication. Propriétaire seulement.

Paramètres

ChampOùTypeDescription
memocardIdobligatoirecheminstring (uuid)Identifiant de la carte mémo (UUID).

Corps de la requête UpdateMemocardRequest

Les champs à modifier ; les autres restent tels quels.

ChampTypeDescription
frontfacultatifstring1 à 2000 caractèresNouveau recto.
backfacultatifstring1 à 20000 caractèresNouveau verso, en texte brut.
explanationfacultatifstring | null5000 caractères au plusNouvelle explication, ou null pour l’effacer.

Réponse 200

La carte mémo modifiée — Un objet Memocard

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/memocards/c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "back": "In the chloroplasts."
}'
Réponse 200
{
  "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

DELETE/v1/memocards/{memocardId}Scope memocards:write

Supprime la carte mémo et ses questions. Propriétaire seulement. Répond 204 sans corps.

Paramètres

ChampOùTypeDescription
memocardIdobligatoirecheminstring (uuid)Identifiant de la carte mémo (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/memocards/c5e8a1b2-3d4f-4a6b-9c8d-7e6f5a4b3c21" \
  -H "Authorization: Bearer $MEMOJIN_API_KEY"