Un POST pentru fiecare tip de activitate. Trimiți conținutul ca JSON și primești înapoi o activitate în contul tău Puzzel.org, plus un URL pe care îl poți da jucătorilor sau îl poți pune într-un iframe.
URL de bază
https://puzzel.org/api/public/v1
Autentificare
Cheie + e-mail în corpul cererii
Endpointuri
20 tipuri de activități
Cotă
10 activități pe zi
Prima ta cerere
Nu ai nimic de instalat și nu e nevoie de niciun handshake: trimiți un corp JSON cu cheia ta, e-mailul tău și conținutul tău. Răspunsul conține cheia noii activități și URL-ul la care se joacă.
POST crossword
curl -X POST https://puzzel.org/api/public/v1/crossword \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Crossword",
"language": "ro",
"items": [
{
"answer": "BANANA",
"description": "A long yellow fruit",
"type": "text"
},
{
"answer": "CHERRY",
"description": "A small red stone fruit",
"type": "text"
},
{
"answer": "MELON",
"description": "Big, green outside, sweet inside",
"type": "text"
}
]
}'
Fiecare exemplu de pe această pagină este o cerere completă, care poate fi rulată. Înlocuiește cheia și conținutul cu ale tale și funcționează ca atare.
Autentificare
Nu există anteturi și niciun token bearer. Ambele credențiale călătoresc în corpul JSON al fiecărei cereri, iar cheia este acceptată doar pentru contul căruia îi aparține acel e-mail.
Câmp
Tip
Ce face
account_api_key
obligatoriu
string
string
Cheia API a contului tău. Se pune în corpul cererii, nu într-un antet.
email
obligatoriu
string
string
Adresa cu care te conectezi la contul tău Puzzel.org. Cheia este valabilă doar împreună cu ea.
Cheia ta se află în secțiunea de cont a tabloului tău de bord, după butonul Arată.
Tratează cheia ca pe o parolă. Ea creează și suprascrie activități în contul tău, așa că păstreaz-o pe server și departe de orice poate citi un browser.
Corpul cererii
Fiecare endpoint primește aceleași cinci câmpuri. Ce diferă este câmpul de conținut de sub ele: majoritatea primesc un array de elemente, câteva primesc o singură propoziție sau o singură imagine, iar sudoku nu primește nimic.
Câmp
Tip
Ce face
account_api_key
obligatoriu
string
string
Cheia API a contului tău. Se pune în corpul cererii, nu într-un antet.
email
obligatoriu
string
string
Adresa cu care te conectezi la contul tău Puzzel.org. Cheia este valabilă doar împreună cu ea.
title
opțional
string
string
Numele pe care îl primește activitatea în tabloul tău de bord. Dacă îl omiți, endpointul folosește propriul nume implicit.
language
opțional
string
string
Decide doar limba din URL-ul pe care îl primești înapoi — nu traduce nimic din ce trimiți. Cuvintele ascunse îl citesc și pentru a comuta literele de umplutură la arabă, atunci când valoarea este "ar".
Implicit: "en"
activity_key
opțional
string
string
Omite-l ca să creezi o activitate nouă. Trimite cheia uneia pe care deja o deții și acea activitate este reconstruită în loc.
settings este un obiect cu opțiuni specifice fiecărui endpoint. Care dintre ele sunt citite de un endpoint este listat mai jos, la el; orice altceva pui acolo este ignorat.
Ce primești înapoi
Un apel reușit răspunde cu 200, cu cheia noii activități și URL-ul la care se joacă. Orice altceva răspunde cu success setat pe false și un singur șir de eroare.
{
"success": false,
"error": "Invalid Email or API Key"
}
URL-ul primit înapoi este vizualizarea de încorporare. Înlocuiește embed cu play ca să-l deschizi pe pagină întreagă, sau cu build ca să-l deschizi în editor — cheia de după p= rămâne aceeași.
Creare vs. actualizare
Trimite activity_key și activitatea din spatele ei este reconstruită pe loc: conținutul îi este înlocuit, numele și marcajul de versiune sunt reîmprospătate, iar cheia în sine rămâne aceeași — așa că linkurile și încorporările pe care le-ai partajat deja continuă să funcționeze. Rezultatele, plasarea în folder și orice setare pe care endpointul nu o scrie el însuși rămân neschimbate.
activity_key
{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"activity_key": "-Nq8sample_activity_key",
"title": "Fruit crossword, week 2",
"items": [
{
"answer": "BANANA",
"description": "A long yellow fruit",
"type": "text"
},
{
"answer": "CHERRY",
"description": "A small red stone fruit",
"type": "text"
},
{
"answer": "MELON",
"description": "Big, green outside, sweet inside",
"type": "text"
}
]
}
title este aplicat la fiecare actualizare, inclusiv valoarea lui implicită — dacă îl omiți, activitatea este redenumită cu numele implicit al acelui endpoint.
Blocurile de setări pe care un endpoint le scrie el însuși sunt rescrise de la zero, așa că o actualizare le resetează și pe acestea la valorile pe care le trimiți, sau la valorile implicite ale endpointului.
Poți actualiza doar activități deținute chiar de contul tău. Cheia altcuiva primește răspuns 403.
O actualizare costă la fel ca o creare: un apel scăzut din cota de azi.
Limită de trafic
10
10 activități per cont pe zi
Fiecare apel reușit se contorizează, la fel creările ca și actualizările. Dacă depășești limita, următoarea cerere primește răspuns 429 până când contorul este resetat.
Contorul este șters o dată pe zi de un job programat, nu pe o fereastră glisantă de 24 de ore.
Erori
Erorile sosesc întotdeauna ca JSON, cu aceleași două câmpuri, niciodată ca pagină HTML. Șirul de eroare este scris pentru a fi citit de o persoană — numește câmpul sau limita care a eșuat.
Stare
Ce înseamnă
400
Bad Request
Ceva din corpul cererii lipsește, este malformat sau este în afara intervalului permis. Mesajul numește câmpul.
401
Unauthorized
E-mailul este necunoscut, sau cheia nu aparține acelui cont.
403
Forbidden
activity_key pe care l-ai trimis aparține unui alt cont.
429
Too Many Requests
Cota de azi este epuizată. Se resetează o dată pe zi.
500
Server Error
Generatorul nu a putut construi un joc din ce ai trimis — de obicei prea puține cuvinte, sau cuvinte care nu pot fi îmbinate.
Endpointuri
O cale pentru fiecare tip de activitate, toate POST, toate sub același URL de bază. Fiecare listează conținutul de care are nevoie, setările pe care le citește și o cerere pe care o poți rula.
Cuvinte și litere
F
I
G
A
T
R
I
P
M
Cuvintele încrucișate
Îmbină răspunsurile tale într-o grilă și numerotează definițiile pentru tine.
Un array de cuvinte. Fiecare intrare asociază răspunsul cu definiția care indică spre el.
Revine implicit la numele “Crossword API”
Bine de știut
Răspunsurile mai scurte de două caractere sunt eliminate înainte de construirea grilei, iar cel puțin două trebuie să supraviețuiască acestui pas.
Răspunsurile sunt convertite cu majuscule, iar generatorul are douăzeci de încercări să le potrivească. Dacă nu poate plasa niciun cuvânt, apelul răspunde cu 500.
Exemplu de cerere
POST crossword
curl -X POST https://puzzel.org/api/public/v1/crossword \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Crossword",
"language": "ro",
"items": [
{
"answer": "BANANA",
"description": "A long yellow fruit",
"type": "text"
},
{
"answer": "CHERRY",
"description": "A small red stone fruit",
"type": "text"
},
{
"answer": "MELON",
"description": "Big, green outside, sweet inside",
"type": "text"
}
]
}'
Un array de cuvinte. Textul definiției devine lista de cuvinte de la care pornesc jucătorii.
Revine implicit la numele “Wordseeker API”
Bine de știut
Răspunsurile sub două caractere sunt eliminate, iar fiecare răspuns este convertit cu majuscule înainte de a intra în grilă.
Grila este completată cu litere latine, cu excepția cazului în care language este "ar", ceea ce comută umplutura la arabă.
Setări pe care le citește
Câmp
Tip
Ce face
hidden_solution
opționalîn settings
string
string
Literele rămase formează acest cuvânt. Setarea lui îi spune și generatorului să potrivească mai întâi soluția, în loc să încadreze cât mai multe cuvinte posibil.
directions
opționalîn settings
string[]
string[]
În ce direcții poate merge un cuvânt. Dacă îl omiți, cuvintele merg doar spre est, sud-est și sud.
Una dintrewesteastnorthsouthnorthwestnortheastsouthwestsoutheast
Implicit: ["east", "southeast", "south"]
template
opționalîn settings
string
string
Decupează grila într-o formă, în loc să o lase pătrată.
Una dintresquarecirclecrossdiamondpyramidsmileystarcross_plus
Exemplu de cerere
POST wordseeker
curl -X POST https://puzzel.org/api/public/v1/wordseeker \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Wordseeker",
"language": "ro",
"items": [
{
"answer": "BANANA",
"description": "A long yellow fruit",
"type": "text"
},
{
"answer": "CHERRY",
"description": "A small red stone fruit",
"type": "text"
},
{
"answer": "MELON",
"description": "Big, green outside, sweet inside",
"type": "text"
}
],
"settings": {
"hidden_solution": "FRUIT",
"directions": [
"east",
"south",
"southeast"
],
"template": "square"
}
}'
POST/api/public/v1/word-scrambleCel puțin 1 în items
Conținut
api_c_word_scramble
Revine implicit la numele “Word Scramble API”
Bine de știut
Activitățile create prin API au mereu activată setarea de amestecare a ordinii, așa că ordinea pe care o trimiți nu este ordinea pe care o primesc jucătorii.
Setări pe care le citește
Câmp
Tip
Ce face
hidden_solution
opționalîn settings
string
string
Un cuvânt bonus opțional pe care jucătorii îl introduc după ce rezolvă restul.
Exemplu de cerere
POST word-scramble
curl -X POST https://puzzel.org/api/public/v1/word-scramble \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Word Scramble",
"language": "ro",
"items": [
{
"answer": "BANANA",
"description": "A long yellow fruit",
"type": "text"
},
{
"answer": "CHERRY",
"description": "A small red stone fruit",
"type": "text"
},
{
"answer": "MELON",
"description": "Big, green outside, sweet inside",
"type": "text"
}
],
"settings": {
"hidden_solution": "FRUIT"
}
}'
POST/api/public/v1/typing-practiceCel puțin 1 în items
Conținut
api_c_typing_practice
Revine implicit la numele “Typing Practice API”
Exemplu de cerere
POST typing-practice
curl -X POST https://puzzel.org/api/public/v1/typing-practice \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Typing Practice",
"language": "ro",
"items": [
{
"answer": "The quick brown fox jumps over the lazy dog",
"description": "Every letter of the alphabet",
"type": "text"
},
{
"answer": "Pack my box with five dozen liquor jugs",
"description": "Another pangram",
"type": "text"
}
]
}'
Succes
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Un array de perechi. Fiecare pereche conține cele două cartonașe care merg împreună.
Revine implicit la numele “Memory Game API”
Bine de știut
Un cartonaș este un obiect cu un type și o value. Folosește "text" pentru cuvinte, sau "image", "audio", "youtube" ori "link" cu un URL în value, și adaugă alt pentru o descriere.
POST/api/public/v1/matching-pairsCel puțin 2 în items
Conținut
api_c_matching_pairs
Revine implicit la numele “Matching Game API”
Bine de știut
Un cartonaș este un obiect cu un type și o value. Folosește "text" pentru cuvinte, sau "image", "audio", "youtube" ori "link" cu un URL în value, și adaugă alt pentru o descriere.
POST/api/public/v1/flash-cardsCel puțin 1 în items
Conținut
api_c_flash_cards
Revine implicit la numele “Flash Cards API”
Bine de știut
Endpointul stochează exact atâtea cartonașe câte trimiți, așa că trimite exact două per intrare — fața, apoi spatele.
Un cartonaș este un obiect cu un type și o value. Folosește "text" pentru cuvinte, sau "image", "audio", "youtube" ori "link" cu un URL în value, și adaugă alt pentru o descriere.
Un array de categorii, fiecare cu un nume și cartonașele care fac parte din ea.
Revine implicit la numele “Categorize Game API”
Bine de știut
O categorie trimisă fără nume este salvată ca “Categorie fără titlu”, așa că trimite mereu unul.
Un cartonaș este un obiect cu un type și o value. Folosește "text" pentru cuvinte, sau "image", "audio", "youtube" ori "link" cu un URL în value, și adaugă alt pentru o descriere.
Un array de secvențe. Fiecare conține cartonașele sale în ordinea corectă.
Revine implicit la numele “Reorder Game API”
Bine de știut
Ordinea pe care o trimiți este stocată ca ordine corectă — numărul unu primul.
Un cartonaș este un obiect cu un type și o value. Folosește "text" pentru cuvinte, sau "image", "audio", "youtube" ori "link" cu un URL în value, și adaugă alt pentru o descriere.
Un array de întrebări. Întrebările cu variante multiple conțin răspunsurile lor; întrebările deschise conțin răspunsul pe care îl accepți.
Revine implicit la numele “Quiz API”
Bine de știut
question_type este fie "multiple_choice", caz în care opțiunea corectă are isCorrect pe true, fie "open_answer", care folosește în schimb correct_answer. Dacă îl omiți, este tratat ca variante multiple.
Endpointul quiz transmite settings direct, ca blocuri de setări ale activității, așa că nu e locul pentru opțiuni disparate — ajustează quizul ulterior în editor.
Exemplu de cerere
POST quiz
curl -X POST https://puzzel.org/api/public/v1/quiz \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Quiz",
"language": "ro",
"items": [
{
"question_type": "multiple_choice",
"description": "Which fruit is yellow?",
"answers": [
{
"type": "text",
"description": "Banana",
"isCorrect": true
},
{
"type": "text",
"description": "Cherry",
"isCorrect": false
}
]
},
{
"question_type": "open_answer",
"description": "What colour is a lemon?",
"correct_answer": "Yellow",
"explanation": "Lemons ripen from green to yellow."
}
]
}'
question_type este fie "multiple_choice", caz în care opțiunea corectă are isCorrect pe true, fie "open_answer", care folosește în schimb correct_answer. Dacă îl omiți, este tratat ca variante multiple.
Setări pe care le citește
Câmp
Tip
Ce face
number_of_tiles
opționalîn settings
number
number
Câte căsuțe are jocul de societate. Între 10 și 75.
Implicit: 30
game_mode
opționalîn settings
string
string
Dacă jucătorii se întrec spre final sau colectează obiecte pe parcurs.
Una dintrerace_to_finishcollect_items
Implicit: "race_to_finish"
Exemplu de cerere
POST board-game
curl -X POST https://puzzel.org/api/public/v1/board-game \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Board Game",
"language": "ro",
"items": [
{
"question_type": "multiple_choice",
"description": "Which fruit is yellow?",
"answers": [
{
"type": "text",
"description": "Banana",
"isCorrect": true
},
{
"type": "text",
"description": "Cherry",
"isCorrect": false
}
]
},
{
"question_type": "open_answer",
"description": "What colour is a lemon?",
"correct_answer": "Yellow",
"explanation": "Lemons ripen from green to yellow."
}
],
"settings": {
"number_of_tiles": 30,
"game_mode": "race_to_finish"
}
}'
Succes
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Nimic. Tot jocul rezultă din cele două setări ale sale.
Revine implicit la numele “Sudoku API”
Bine de știut
Nu trimite items și nici sentence — size și difficulty sunt toată intrarea.
Editorul oferă dificultatea doar pentru 2x3, 3x3 și 3x4. API-ul o aplică pentru fiecare dimensiune, inclusiv 2x2 și 4x4.
Setări pe care le citește
Câmp
Tip
Ce face
size
opționalîn settings
string
string
Dimensiunea unui bloc, scrisă ca rânduri pe coloane — 3x3 dă grila clasică 9x9. Endpointul verifică doar că se poate interpreta ca două numere, așa că rămâi la dimensiunile oferite de editor.
Un URL de imagine, în câmpul image. Acest endpoint nu primește items.
Revine implicit la numele “Jigsaw Game API”
Bine de știut
API-ul creează întotdeauna un puzzle de 4 pe 4. Numărul de piese, piesele neregulate și marginile drepte sunt setări din editor — trimiterea de rows sau columns aici nu are niciun efect.
URL-ul este stocat exact așa cum l-ai trimis, iar fișierul nu este copiat niciodată, așa că trebuie să rămână accesibil public atât timp cât activitatea este jucată.
Setări pe care le citește
Câmp
Tip
Ce face
image
obligatoriu
string
string
URL absolut al imaginii de tăiat în bucăți. Se trimite la nivelul de sus, nu în interiorul settings.
Un URL de imagine, în interiorul settings. Acest endpoint nu primește items.
Revine implicit la numele “Sliding Puzzle API”
Bine de știut
Spre deosebire de puzzle, acest endpoint își citește imaginea din settings.image. Un câmp image la nivelul de sus este ignorat, iar apelul răspunde cu 400.
URL-ul este stocat exact așa cum l-ai trimis, iar fișierul nu este copiat niciodată, așa că trebuie să rămână accesibil public atât timp cât activitatea este jucată.
Setări pe care le citește
Câmp
Tip
Ce face
image
obligatoriuîn settings
string
string
URL absolut al imaginii de amestecat. Spre deosebire de cel de la puzzle, acesta se află în interiorul settings.