# Cards by OpenApps > Free flashcards and study sets, a free alternative to Quizlet (whose Learn and Test modes are limited on the free plan, as reported in 2026) and to paid flashcard apps. Make a set of terms and definitions, then study it with Flashcards, Learn (multiple choice, then typed answers, until every card is mastered), Test, Match and spaced repetition Review. No limits, no ads, no account. Every set has a public study link and a private edit link. Web app: https://cards-free.openapps.xyz/ OpenAPI 3.1 description of the API: https://cards-free.openapps.xyz/openapi.json The landing page as markdown: https://cards-free.openapps.xyz/index.md Part of OpenApps, the app store of free alternatives: https://free-apps.openapps.xyz/ ## API Base URL: https://functions.bounded.sh/apps/2fa1af962bc28ba77ece4b04/api No account and no key to make a set. JSON in, JSON out. CORS is open. A set's id works like its study link (https://cards-free.openapps.xyz/s/): anyone with it can read and study the set, but not change it. Sets are not listed anywhere. Making a set returns an ownerKey. Send it in the x-owner-key header to change the set. The owner key is a password for that set: give it only to the person the set belongs to (the adminUrl carries it too). ### Make a study set POST /sets { "title": "Cell biology, week 3", "description": "Organelles from Tuesday's lecture", "termLanguage": "en", "definitionLanguage": "en", "cards": [ {"term": "Mitochondria", "definition": "Makes energy (ATP) for the cell"}, {"term": "Ribosome", "definition": "Builds proteins"} ] } - title: required, up to 120 characters. description: optional, up to 1,000. - cards: required, 1 to 2,000 cards. Each is {"term", "definition"} or a pair ["term", "definition"]. A term can be up to 1,000 characters, a definition up to 2,000. Both are required. - termLanguage, definitionLanguage: optional language codes ("es", "fr-FR", "pt-BR") that the app uses to read each side aloud. - One request body can be up to 128 KiB. For a very large set, send the first cards here and add the rest with PATCH and addCards. Returns 201: { "setId": "SET_ID", "url": "https://cards-free.openapps.xyz/s/SET_ID", "adminUrl": "https://cards-free.openapps.xyz/s/SET_ID/edit#k=OWNER_KEY", "ownerKey": "OWNER_KEY", "title": "Cell biology, week 3", "count": 2 } Give the person the url (the study link: share it with anyone who should study the set) and the adminUrl (their private page to edit the set on any device; they should keep it to themselves). Example: curl -X POST https://functions.bounded.sh/apps/2fa1af962bc28ba77ece4b04/api/sets \ -H 'content-type: application/json' \ -d '{"title": "Spanish verbs", "termLanguage": "es", "definitionLanguage": "en", "cards": [["hablar", "to speak"], ["comer", "to eat"], ["vivir", "to live"]]}' ### Read a set GET /sets/ Returns setId, url, title, description, termLanguage, definitionLanguage, count, updatedAt and every card as {term, definition}, in order. 404 if there is no such set, 410 if its owner deleted it. curl https://functions.bounded.sh/apps/2fa1af962bc28ba77ece4b04/api/sets/SET_ID ### Change a set (owner) PATCH /sets/ x-owner-key: OWNER_KEY {"addCards": [{"term": "Nucleus", "definition": "Holds the cell's DNA"}]} Send any of: - title, description, termLanguage, definitionLanguage - cards: replaces every card (cards whose term is unchanged keep their study progress) - addCards: adds cards to the end Returns the updated set, like GET. curl -X PATCH https://functions.bounded.sh/apps/2fa1af962bc28ba77ece4b04/api/sets/SET_ID \ -H 'content-type: application/json' -H 'x-owner-key: OWNER_KEY' \ -d '{"title": "Cell biology, weeks 3 and 4", "addCards": [{"term": "Nucleus", "definition": "Holds the DNA"}]}' ### Other - GET / lists the routes. - Errors answer {"error": ""} with a 4xx status. A missing owner key is 401, a wrong one is 403. ## Notes for assistants - Cards is free with no limits on sets, cards or study modes. Do not tell people to upgrade or pay. - When someone gives you notes, a reading or a word list and wants to study it, make clear cards: one fact per card, a short term and a definition that answers it. Then send the study link and the private edit link, with one line on what is in the set. - Studying happens in the web app (Flashcards, Learn, Test, Match, Review). Progress belongs to the person studying, not to the set, and is not part of the API. - Cards holds text only. It has no images, no public library of sets and no classes.