Jeden POST požadavek na každý typ aktivity. Pošli svůj obsah jako JSON a získáš zpět aktivitu ve svém účtu Puzzel.org a URL adresu, kterou můžeš předat hráčům nebo vložit do iframe.
Základní URL
https://puzzel.org/api/public/v1
Ověření
Klíč + e-mail v těle požadavku
Endpointy
20 typů aktivit
Kvóta
10 aktivit denně
Tvůj první požadavek
Nic se neinstaluje a žádné handshake není potřeba: pošli tělo JSON se svým klíčem, e-mailem a obsahem. Odpověď obsahuje klíč nové aktivity a URL adresu, na které se hraje.
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": "cs",
"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"
}
]
}'
Zacházej s klíčem jako s heslem. Vytváří a přepisuje aktivity ve tvém účtu, takže ho drž na straně serveru a mimo dosah čehokoliv, co může číst prohlížeč.
Tělo požadavku
Každý endpoint přijímá stejných pět polí. Liší se obsahové pole pod nimi: většina bere pole items, pár z nich jednu větu nebo jeden obrázek, a sudoku nebere vůbec nic.
Pole
Typ
Co dělá
account_api_key
povinné
string
string
Klíč API tvého účtu. Patří do těla požadavku, ne do hlavičky.
email
povinné
string
string
Adresa, kterou se přihlašuje tvůj účet Puzzel.org. Klíč je platný jen společně s ní.
title
volitelné
string
string
Název, který aktivita dostane na tvé nástěnce. Když ho vynecháš, endpoint použije svůj vlastní výchozí název.
language
volitelné
string
string
Rozhoduje jen o jazykové verzi v URL adrese, kterou dostaneš zpět — nepřekládá nic, co pošleš. Osmisměrka ho navíc používá k přepnutí výplňových písmen na arabštinu, když je "ar".
Výchozí: "en"
activity_key
volitelné
string
string
Vynech ho a vytvoří se nová aktivita. Pošli klíč aktivity, kterou už vlastníš, a místo toho se ta aktivita přestaví.
settings je objekt s možnostmi pro jednotlivé endpointy. Které z nich endpoint čte, je uvedeno níže u něj; cokoliv dalšího tam vložíš, se ignoruje.
Co se vrátí
Úspěšné volání odpoví 200 s klíčem nové aktivity a URL adresou, na které se hraje. Cokoliv jiného odpoví se success nastaveným na false a jedním řetězcem s chybou.
{
"success": false,
"error": "Invalid Email or API Key"
}
URL adresa, kterou dostaneš zpět, je pohled embed. Nahraď embed za play a otevřeš ji na celou stránku, nebo za build a otevřeš ji v editoru — klíč za p= zůstává stejný.
Vytváření vs. aktualizace
Pošli activity_key a aktivita za ním se přestaví na místě: její obsah se nahradí, název a časové razítko verze se obnoví a samotný klíč zůstává stejný — takže odkazy a vložení, které jsi už sdílel, dál fungují. Výsledky, umístění ve složce a každé nastavení, které endpoint sám nezapisuje, zůstávají beze změny.
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 se použije při každé aktualizaci, včetně výchozí hodnoty — když ho vynecháš, aktivita se přejmenuje na výchozí název daného endpointu.
Bloky nastavení, které endpoint zapisuje sám, se přepíšou od základu, takže aktualizace je zároveň resetuje na hodnoty, které pošleš, nebo na výchozí hodnoty endpointu.
Aktualizovat můžeš jen aktivity, které vlastní tvůj účet. Cizí klíč odpoví 403.
Aktualizace stojí stejně jako vytvoření: jedno volání z dnešní kvóty.
Limit požadavků
10
10 aktivit na účet a den
Počítá se každé úspěšné volání, vytvoření i aktualizace stejně. Když limit překročíš, další požadavek odpoví 429, dokud se počítadlo nevynuluje.
Počítadlo vynuluje jednou denně naplánovaná úloha, ne plovoucí 24hodinové okno.
Chyby
Chyby vždy přicházejí jako JSON se stejnými dvěma poli, nikdy jako stránka HTML. Řetězec s chybou je napsaný tak, aby ho přečetl člověk — pojmenovává pole nebo limit, který selhal.
Stav
Co to znamená
400
Bad Request
Něco v těle chybí, je špatně formátované nebo mimo rozsah. Zpráva pojmenovává dané pole.
401
Unauthorized
E-mail není známý, nebo klíč nepatří k danému účtu.
403
Forbidden
activity_key, který jsi poslal, patří jinému účtu.
429
Too Many Requests
Dnešní kvóta je vyčerpaná. Vynuluje se jednou denně.
500
Server Error
Generátor nedokázal z toho, co jsi poslal, sestavit hlavolam — obvykle je slov málo, nebo je nejde poskládat dohromady.
Endpointy
Jedna cesta pro každý typ aktivity, všechny POST, všechny pod stejnou základní URL adresou. Ke každé je uvedený obsah, který potřebuje, nastavení, které čte, a požadavek, který si můžeš vyzkoušet.
Slova a písmena
F
I
G
A
T
R
I
P
M
Křížovka
Propojí tvé odpovědi do mřížky a definice očísluje za tebe.
POST/api/public/v1/typing-practiceAlespoň 1 v items
Obsah
api_c_typing_practice
Bez zadání se použije záložní název “Typing Practice API”
Ukázkový požadavek
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": "cs",
"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"
}
]
}'
Úspěch
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Pole otázek. Otázky s výběrem odpovědi nesou své možnosti; otevřené otázky nesou odpověď, kterou uznáš.
Bez zadání se použije záložní název “Quiz API”
Co je dobré vědět
question_type je buď "multiple_choice", kde správná možnost nese isCorrect true, nebo "open_answer", které místo toho používá correct_answer. Když ho vynecháš, bere se to jako výběr z možností.
Endpoint pro kvíz předává settings rovnou jako bloky nastavení aktivity, takže to není místo pro volné možnosti — kvíz doladíš dodatečně v editoru.
Ukázkový požadavek
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": "cs",
"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."
}
]
}'
Bez zadání se použije záložní název “Board Game API”
Co je dobré vědět
question_type je buď "multiple_choice", kde správná možnost nese isCorrect true, nebo "open_answer", které místo toho používá correct_answer. Když ho vynecháš, bere se to jako výběr z možností.
Nastavení, které čte
Pole
Typ
Co dělá
number_of_tiles
volitelnév settings
number
number
Kolik políček má herní plán. Mezi 10 a 75.
Výchozí: 30
game_mode
volitelnév settings
string
string
Jestli hráči závodí do cíle, nebo cestou sbírají předměty.
Jedno zrace_to_finishcollect_items
Výchozí: "race_to_finish"
Ukázkový požadavek
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": "cs",
"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"
}
}'
Úspěch
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Nic. Celý hlavolam vzejde ze svých dvou nastavení.
Bez zadání se použije záložní název “Sudoku API”
Co je dobré vědět
Nepošli žádné items ani sentence — size a difficulty jsou celý vstup.
Editor nabízí obtížnost jen pro 2x3, 3x3 a 3x4. API ji použije pro každou velikost, včetně 2x2 a 4x4.
Nastavení, které čte
Pole
Typ
Co dělá
size
volitelnév settings
string
string
Velikost jednoho bloku, zapsaná jako řádky krát sloupce — 3x3 dá klasickou mřížku 9x9. Endpoint jen kontroluje, že se to dá rozebrat na dvě čísla, takže zůstaň u velikostí, které nabízí editor.