Memojin w samym sercu używanych narzędzi.
Kompletne API REST do łączenia platform z Memojin: kursy, foldery, karty memo i pytania – zarówno do odczytu, jak i do zapisu – generowanie przez AI, wyszukiwanie, przestrzenie i monitorowanie postępów w nauce. Zaprojektowane z myślą o platformach szkolnych, systemach LMS, wydawcach oraz zespołach technicznych szkół i uczelni.
Dostęp przyznaje nasz zespół, każdej organizacji z osobna
Operacje: 28 · zakresy (scopes): 14 · OpenAPI 3.1
curl "https://api.memojin.com/v1/contents?limit=20" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Accept-Language: fr"{
"data": [
{
"id": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"title": "Photosynthesis",
"description": null,
"language": "en",
"folderId": null,
"imageUrl": null,
"createdAt": "2026-09-28T17:04:51.000Z",
"updatedAt": "2026-10-02T08:30:12.000Z",
"inclusions": {
"hasBody": true,
"hasSummary": true,
"memocardsCount": 42,
"questionsCount": 18,
"podcastsReadyCount": 1,
"sourcesCount": 2
}
}
],
"nextCursor": "eyJvIjoyMH0",
"hasMore": true
}Cztery sposoby na podłączenie Memojin.
Klucz działa w imieniu jednego konta Memojin, z dokładnie takimi samymi uprawnieniami: integracja obejmuje to, co widzi to konto, i nic więcej.
Powtórki tam, gdzie studenci już pracują
Moodle, platforma uczelni lub własne rozwiązanie: kursy konta nauczyciela wraz z ich kartami memo i pytaniami można wyświetlać bez opuszczania platformy.
Memojin połączony z systemem informatycznym
Kursy, foldery i przestrzenie nauczycieli trafiają do pulpitów i narzędzi dydaktycznych, bez ponownego wprowadzania danych.
Zasoby wzbogacone o aktywne powtórki
Zasoby można importować jako kursy, dodawać do nich własne karty memo i pytania albo powierzyć ich generowanie AI.
Automatyzacja tego, co wciąż robi się ręcznie
Skrypty, raporty, synchronizacje: kontrakt OpenAPI 3.1 odczytają narzędzia, które wygenerują z niego typowanego klienta, a idempotentność sprawia, że każde ponowienie jest bezpieczne.
Dziewięć zasobów, jeden zakres na działanie.
Wszystko, co znajduje się w tej tabeli, działa już dziś, z podanym zakresem. Każda operacja jest opisana, parametr po parametrze, w dokumentacji referencyjnej.
Kursy
contents:readcontents:writeLista kursów w folderze; odczyt kursu wraz z sześcioma wskaźnikami (lekcja, podsumowanie, liczba kart memo, pytań, gotowych odcinków podcastu i źródeł); tworzenie kursu na podstawie tytułu lub tekstu, zapisywanego bez zmian; jego edycja i usuwanie.
- GET/v1/contents
- POST/v1/contents
- GET/v1/contents/{contentId}
- PATCH/v1/contents/{contentId}
- DELETE/v1/contents/{contentId}
Foldery
folders:readfolders:writePrzeglądanie struktury biblioteki, tworzenie folderu (do pięciu poziomów), jego edycja lub usuwanie.
- GET/v1/folders
- POST/v1/folders
- GET/v1/folders/{folderId}
- PATCH/v1/folders/{folderId}
- DELETE/v1/folders/{folderId}
Karty memo
memocards:readmemocards:writeLista kart kursu wraz z retencją i ostatnią powtórką na danym koncie; dodawanie karty (tytuł, treść, wyjaśnienie), jej edycja i usuwanie.
- GET/v1/contents/{contentId}/memocards
- POST/v1/contents/{contentId}/memocards
- GET/v1/memocards/{memocardId}
- PATCH/v1/memocards/{memocardId}
- DELETE/v1/memocards/{memocardId}
Pytania
questions:readquestions:writeLista pytań kursu; tworzenie pytań czterech typów (odpowiedź otwarta, prawda lub fałsz, jednokrotny wybór, wielokrotny wybór); edycja treści pytania, wyjaśnienia, trudności lub punktacji; usuwanie.
- GET/v1/contents/{contentId}/questions
- POST/v1/contents/{contentId}/questions
- GET/v1/questions/{questionId}
- PATCH/v1/questions/{questionId}
- DELETE/v1/questions/{questionId}
Generowanie przez AI
generations:writejobs:readGenerowanie kart memo na podstawie kursu albo pytań na podstawie jego kart: natychmiastowa odpowiedź (202), a następnie śledzenie zadania aż do wyniku. Przewidywane kredyty AI są podawane już w odpowiedzi.
- POST/v1/contents/{contentId}/memocard-generations
- POST/v1/contents/{contentId}/question-generations
- GET/v1/jobs/{jobId}
Wyszukiwanie
search:readWyszukiwanie w kursach i folderach konta, bez względu na wielkość liter i znaki diakrytyczne.
- GET/v1/search
Przestrzenie
spaces:readOdczyt przestrzeni, których właścicielem jest konto, na żądanie także zarchiwizowanych. Dane członków nie są udostępniane.
- GET/v1/spaces
- GET/v1/spaces/{spaceId}
Sesje nauki
study-sessions:readLista sesji powtórek i ćwiczeń konta, od najnowszej do najstarszej, wraz z licznikami, z filtrowaniem według stanu lub przestrzeni.
- GET/v1/study-sessions
Statystyki nauki
learning-stats:readOpanowane karty memo, czas nauki, skuteczność z ostatnich 30 dni i zakończone sesje konta.
- GET/v1/learning-stats
W przygotowaniu
- WkrótceSerwer MCP
Operacje API dostępne dla asystentów AI zgodnych z MCP, z tymi samymi kluczami i zakresami.
- WkrótcePanel programisty
Samodzielne tworzenie kluczy, wybór ich zakresów i śledzenie zużycia z poziomu konta.
- WkrótceWebhooki wychodzące
Powiadomienie podpisanym wywołaniem na serwer, na przykład po zakończeniu generowania, zamiast ciągłego odpytywania.
- WkrótceDostęp w cenie planów
API dostępne od razu w niektórych planach dla nauczycieli oraz szkół i uczelni, bez wcześniejszego wniosku.
Od piaskownicy do produkcji, w trzech krokach.
Każda organizacja zaczyna w piaskownicy. Środowisko produkcyjne otwiera się, gdy integracja jest gotowa.
Wniosek o dostęp
Wystarczy opisać nam projekt. Tworzymy organizację powiązaną z kontem Memojin, w którego imieniu będzie działać, i przekazujemy klucz testowy.
Prace w piaskownicy
Klucz mj_test_ odczytuje i zapisuje te same dane, z limitem 100 wywołań dziennie. Generowanie przez AI jest tu symulowane: nic nie jest wysyłane ani naliczane.
Przejście na produkcję
Po zatwierdzeniu przez nasz zespół organizacja otrzymuje klucz mj_live_. Wyświetla się on tylko raz: należy przechować go w sejfie na sekrety.
Jeden klucz, jego zakresy
Każda operacja wymaga zakresu w postaci zasób:read lub zasób:write, podanego w tabeli powyżej. Klucz ma tylko te zakresy, o które wnioskowano, a write nie obejmuje read; bez właściwego zakresu API odpowiada 403 insufficient_scope i podaje oczekiwany zakres.
Klucz pozostaje w zmiennej środowiskowej na serwerze: API nie odpowiada na wywołania z przeglądarki.
Pierwsze wywołanie
curl "https://api.memojin.com/v1/contents?limit=20" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Accept-Language: fr"const res = await fetch("https://api.memojin.com/v1/contents?limit=20", {
headers: { Authorization: `Bearer ${process.env.MEMOJIN_API_KEY}` },
});
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${error.code}: ${error.message}`);
}
const { data, nextCursor, hasMore } = await res.json();import os, requests
res = requests.get(
"https://api.memojin.com/v1/contents",
params={"limit": 20},
headers={"Authorization": f"Bearer {os.environ['MEMOJIN_API_KEY']}"},
timeout=10,
)
if not res.ok:
error = res.json()["error"]
raise RuntimeError(f"{error['code']}: {error['message']}")
page = res.json() # { "data": [...], "nextCursor": ..., "hasMore": ... }Protokół HTTP, stosowany co do joty.
Żadnych własnych konwencji do nauki: nagłówki, które biblioteki HTTP już znają, ustawiane przez API w każdej odpowiedzi, której dotyczą.
ETagIf-None-Match304Odczyty warunkowe
Każde GET zwraca ETag; odesłany w If-None-Match daje 304 bez treści, gdy nic się nie zmieniło.
If-Match412Zapisy bez konfliktów
Wystarczy wysłać odczytany ETag w If-Match: jeśli zasób w międzyczasie się zmienił, PATCH i DELETE odpowiadają 412 i niczego nie zmieniają.
Idempotency-KeyIdempotent-ReplayedIdempotentność
Każde POST przyjmuje Idempotency-Key: żądanie powtórzone w ciągu 24 godzin zwraca pierwszą odpowiedź, oznaczoną Idempotent-Replayed, bez podwójnego tworzenia ani podwójnego naliczania.
RateLimit-LimitRateLimit-RemainingRateLimit-ResetRetry-AfterJawne limity
Każda odpowiedź informuje, ile zostało w bieżącym oknie limitu; 429 lub 503 wskazuje w Retry-After, kiedy spróbować ponownie.
LocationLinkLinki
Utworzenie zasobu zwraca 201 z Location; strona zawiera Link rel="next"; każdy błąd – Link rel="help" do dokumentacji swojego kodu.
Memojin-VersionDeprecationSunsetWersje i wycofania
Memojin-Version wskazuje, który kontrakt obsłużył żądanie; Deprecation i Sunset (RFC 9745, RFC 8594) są gotowe, by zasygnalizować operację wycofywaną z użycia.
Memojin-Credits-EstimateJawne kredyty
Generowanie podaje w nagłówku, tak jak w treści odpowiedzi, jednostki kredytów AI, które przewiduje zużyć.
X-Request-IdAccept-LanguageIdentyfikowalność i języki
Każde wywołanie ma X-Request-Id, własny lub nasz; Accept-Language wybiera język komunikatów o błędach spośród dziewięciu.
Jeden format błędów, { error: { code, message, details } }, oraz stałe kody błędów (łącznie 25), każdy wyjaśniony w publicznej tabeli błędów.
Uruchom, śledź, odbierz.
Generowanie kart memo lub pytań trwa od kilku sekund do kilku minut. API odpowiada od razu, a postęp zadania można śledzić we własnym tempie.
Jedna jednostka ai_card za każdą wygenerowaną kartę memo lub pytanie, pobierana z kredytów AI konta, tak jak w aplikacji. Odrzucone lub powtórzone żądanie nic nie kosztuje.
GET /v1/jobs/{jobId} należy odpytywać mniej więcej co pięć sekund, aż do succeeded, failed lub cancelled, a następnie odczytać karty lub pytania kursu.
Z kluczem mj_test_ nic nie jest generowane ani naliczane: zadanie kończy się natychmiast, a cały proces można przetestować bez kosztów.
curl -X POST "https://api.memojin.com/v1/contents/$CONTENT_ID/memocard-generations" \
-H "Authorization: Bearer $MEMOJIN_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"
HTTP/1.1 202 Accepted
Memojin-Credits-Estimate: ai_card=12
{
"jobId": "9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"status": "pending",
"estimate": { "operation": "ai_card", "units": 12 }
}curl "https://api.memojin.com/v1/jobs/$JOB_ID" \
-H "Authorization: Bearer $MEMOJIN_API_KEY"
{
"id": "9b8a7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"type": "memocard_generation",
"status": "succeeded",
"progress": 100,
"contentId": "3f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87",
"error": null,
"createdAt": "2026-10-04T10:00:00.000Z",
"updatedAt": "2026-10-04T10:00:41.000Z"
}import os, time, uuid, requests
API = "https://api.memojin.com/v1"
H = {"Authorization": f"Bearer {os.environ['MEMOJIN_API_KEY']}"}
job = requests.post(
f"{API}/contents/{content_id}/memocard-generations",
headers={**H, "Idempotency-Key": str(uuid.uuid4())},
timeout=30,
).json() # 202 : {"jobId": ..., "status": "pending", "estimate": {...}}
while True:
state = requests.get(f"{API}/jobs/{job['jobId']}", headers=H, timeout=10).json()
if state["status"] in ("succeeded", "failed", "cancelled"):
break
time.sleep(5)
cards = requests.get(f"{API}/contents/{content_id}/memocards", headers=H, timeout=10).json()Wiarygodne z założenia.
Zasady, które chronią dane organizacji i jej użytkowników, są zapisane w kodzie, a nie tylko w umowie.
Tajne klucze
Przechowujemy wyłącznie skrót SHA-256 klucza, nigdy sam klucz. Unieważniony klucz zostaje odrzucony w niecałą minutę.
Serwer–serwer
API odrzuca wywołania z przeglądarki (zamknięty CORS): klucz nie opuszcza serwera.
Uprawnienia jednego konta
Klucz działa w imieniu konta Memojin i widzi dokładnie to, co ono. Zasób innego konta zwraca 404, niczego nie ujawniając.
Minimalne zakresy
Odczyt i zapis rozdzielone, zasób po zasobie: klucz ma tylko te zakresy, o które wnioskowano.
Szczelna piaskownica
Klucz mj_test_ nigdy nie wywołuje realnych skutków: generowanie symulowane, zero zużytych kredytów, żadnych wysyłek, 100 wywołań dziennie.
Zweryfikowany kontrakt
Dokumentacja referencyjna i kontrakt OpenAPI są generowane z tych samych schematów, którymi API waliduje każde żądanie.
Zgodność wsteczna
W /v1 wyłącznie zmiany zgodne wstecz. Zmiana niezgodna pojawi się w /v2, a /v1 będzie obsługiwane co najmniej przez 12 miesięcy.
Hosting we Francji
API, baza danych i pliki działają na naszych własnych serwerach we Francji. Dziennik wywołań nie przechowuje ani treści, ani adresów IP.
Podmioty przetwarzające, okresy przechowywania danych i przysługujące prawa szczegółowo opisuje nasza polityce prywatności.
Wszystko jest opisane, po angielsku i po francusku.
Dokumentacja referencyjna opisuje każdą operację, każdy parametr i każdy kod błędu, z przykładami. Jest generowana z kontraktu, który stosuje API: nie może mu przeczyć.
Pełna dokumentacja
Szybki start, klucze, piaskownica, każdy zasób i każda operacja, błędy, limity, kredyty AI: wszystko jest na stronie, po francusku i po angielsku, z przykładami w curl, JavaScript i Python.
Interaktywna dokumentacja referencyjna
Po angielsku: operacje, schematy, przewodniki, przykłady żądań i odpowiedzi.
/v1/docsOtwórz dokumentację referencyjnąDokumentacja referencyjna po francusku
Ta sama dokumentacja, łącznie z przewodnikami, w całości po francusku.
/v1/docs/frOtwórz po francuskuKontrakt OpenAPI 3.1
openapi.json (oraz openapi.fr.json) do wygenerowania typowanego klienta w wybranym języku.
/v1/openapi.jsonOtwórz kontraktTabela błędów
Każdy kod błędu, jego status HTTP i znaczenie.
/v1/docs/errorsOtwórz tabelęPrzed rozpoczęciem.
Jak uzyskać klucz?
Wystarczy napisać na adres contact@memojin.com i opisać organizację oraz projekt. Dostęp przyznaje nasz zespół: najpierw klucz testowy, a po zatwierdzeniu – klucz produkcyjny.
Co umożliwia dziś API?
Odczyt i zapis biblioteki konta (kursy, foldery, karty memo, pytania), uruchamianie generowania kart memo i pytań przez AI oraz śledzenie tych zadań, wyszukiwanie, a także odczyt przestrzeni, sesji nauki i statystyk nauki. Każda operacja jest opisana w dokumentacji referencyjnej.
Ile kosztuje API?
W okresie beta dostęp jest przyznawany na wniosek. Odczyt i zapis nie zużywają kredytów AI; tylko generowanie korzysta z kredytów AI konta, w którego imieniu działa klucz, tak jak w aplikacji: jedna jednostka za każdą wygenerowaną kartę memo lub pytanie, podawana już w odpowiedzi 202.
Czy potrzebna jest subskrypcja Memojin?
Tak: klucz działa w imieniu konta Memojin, a większość operacji wymaga, by to konto miało aktywny plan, tak jak w aplikacji. Dostęp do API w cenie niektórych planów jest w przygotowaniu.
Czy API można wywoływać z przeglądarki lub aplikacji mobilnej?
Nie: klucz jest tajny, a API odrzuca wywołania z przeglądarki. Należy je wywoływać z serwera, który następnie przekazuje interfejsowi to, czego on potrzebuje.
Gdzie przetwarzane są dane?
Na naszych własnych serwerach we Francji. Klucz ma dostęp wyłącznie do danych konta, w którego imieniu działa, a dziennik wywołań nie przechowuje ani treści, ani adresów IP.
Porozmawiajmy o integracji.
Wystarczy w kilku zdaniach przedstawić organizację, opisać, co ma zostać połączone, i podać przewidywany wolumen. Odezwiemy się, aby otworzyć piaskownicę.
- Najpierw piaskownica, bez zobowiązań
- Dokumentacja referencyjna po angielsku i po francusku
- Dane przechowywane we Francji