Eén POST per activiteitstype. Stuur je inhoud als JSON en je krijgt een activiteit in je Puzzel.org-account terug, plus een URL die je aan spelers kunt geven of in een iframe kunt zetten.
Base URL
https://puzzel.org/api/public/v1
Auth
Sleutel + e-mailadres in de body
Endpoints
38 activiteitstypen
Quotum
10 activiteiten per dag
Je eerste request
Stuur een POST-request met je API-sleutel, e-mailadres en inhoud als JSON. Je hoeft niets te installeren of vooraf verbinding te maken. De response bevat de sleutel van de nieuwe activiteit en de URL om deze te spelen.
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": "nl",
"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"
}
]
}'
Elk voorbeeld op deze pagina is een compleet, uitvoerbaar request. Vul je eigen sleutel en inhoud in en het werkt meteen.
Authenticatie
Je stuurt de API-sleutel en het e-mailadres mee in de JSON-body van elk request. Authenticatieheaders of een bearer token zijn niet nodig. De sleutel moet horen bij het account met dat e-mailadres.
Veld
Type
Wat het doet
account_api_key
verplicht
string
string
De API-sleutel van je account. Die gaat in de body, niet in een header.
email
verplicht
string
string
Het e-mailadres waarmee je Puzzel.org-account inlogt. De sleutel is alleen geldig in combinatie hiermee.
Je sleutel staat in het accountgedeelte van je dashboard, achter Tonen.
Behandel de sleutel als een wachtwoord. Hij maakt en overschrijft activiteiten in je account, dus houd hem server-side en buiten alles wat een browser kan lezen.
De request-body
Elk endpoint gebruikt dezelfde vijf basisvelden. Het veld voor de inhoud verschilt per activiteitstype: meestal stuur je een array met items, soms één zin of afbeelding. Voor sudoku hoef je geen inhoud mee te sturen.
Veld
Type
Wat het doet
account_api_key
verplicht
string
string
De API-sleutel van je account. Die gaat in de body, niet in een header.
email
verplicht
string
string
Het e-mailadres waarmee je Puzzel.org-account inlogt. De sleutel is alleen geldig in combinatie hiermee.
title
optioneel
string
string
De naam die de activiteit in je dashboard krijgt. Laat je hem weg, dan gebruikt het endpoint zijn eigen standaardnaam.
language
optioneel
string
string
Bepaalt de taalcode in de URL van de response; je inhoud wordt niet vertaald. Bij een woordzoeker bepaalt deze waarde ook de vulletters: bij "ar" worden Arabische letters gebruikt.
Standaard: "en"
activity_key
optioneel
string
string
Laat je dit weg, dan wordt er een nieuwe activiteit gemaakt. Stuur je de key van een activiteit die je al bezit, dan wordt die in plaats daarvan opnieuw opgebouwd.
settings is een object met opties per endpoint. Welke een endpoint leest staat er hieronder bij vermeld; al het andere dat je erin zet wordt genegeerd.
Wat je terugkrijgt
Een geslaagde aanroep geeft statuscode 200 terug, samen met de sleutel van de nieuwe activiteit en de URL om deze te spelen. Bij een fout bevat de response success: false en een foutmelding als string.
{
"success": false,
"error": "Invalid Email or API Key"
}
De url die je terugkrijgt is de insluitweergave. Vervang embed door play om hem paginavullend te openen, of door build om hem in de editor te openen — de key achter p= blijft hetzelfde.
Aanmaken versus bijwerken
Stuur activity_key mee om een bestaande activiteit opnieuw op te bouwen. De inhoud wordt vervangen en de naam en het versiestempel worden bijgewerkt. De sleutel blijft gelijk, dus gedeelde links en ingesloten activiteiten blijven werken. Resultaten, de map en instellingen die het endpoint niet aanpast, blijven behouden.
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 wordt bij elke update toegepast, ook de standaardwaarde — laat je hem weg, dan wordt de activiteit hernoemd naar de standaardnaam van dat endpoint.
Instellingenblokken die het endpoint aanpast, worden volledig opnieuw opgebouwd. Ze krijgen de waarden uit je request of, als je die weglaat, de standaardwaarden van het endpoint.
Je kunt alleen activiteiten bijwerken die je eigen account bezit. De key van iemand anders antwoordt met 403.
Een update kost hetzelfde als een aanmaak: één aanroep van het quotum van vandaag.
Rate limit
10
10 activiteiten per account per dag
Elke geslaagde aanroep telt mee, aanmaken en bijwerken allebei. Ga je eroverheen, dan antwoordt het volgende request met 429 tot de teller is gewist.
De teller wordt één keer per dag gewist door een geplande taak, niet op basis van een voortschrijdend venster van 24 uur.
Fouten
Een foutresponse is altijd JSON met dezelfde twee velden. Het veld error bevat een leesbare melding die aangeeft welk veld of welke limiet het probleem veroorzaakt.
Status
Wat het betekent
400
Bad Request
Er ontbreekt iets in de body, of het is verkeerd gevormd of buiten bereik. De melding noemt het veld.
401
Unauthorized
Het e-mailadres is onbekend, of de sleutel hoort niet bij dat account.
403
Forbidden
De activity_key die je stuurde hoort bij een ander account.
429
Too Many Requests
Het quotum van vandaag is op. Het wordt één keer per dag gewist.
500
Server Error
De generator kon geen puzzel maken van wat je stuurde — meestal te weinig woorden, of woorden die niet in elkaar passen.
Endpoints
Eén pad per activiteitstype, allemaal POST, allemaal onder dezelfde base URL. Bij elk staat welke inhoud het nodig heeft, welke instellingen het leest en een request dat je kunt uitvoeren.
Woorden & letters
R
I
J
A
K
A
A
S
M
Kruiswoordpuzzel
Vlecht je antwoorden in elkaar tot een raster en nummert de omschrijvingen voor je.
Een array van woorden. Elk item koppelt het antwoord aan de omschrijving die ernaar verwijst.
Valt terug op de naam “Crossword API”
Goed om te weten
Antwoorden korter dan twee tekens worden weggelaten voordat het raster wordt gebouwd, en er moeten er minstens twee overblijven.
Antwoorden worden in hoofdletters gezet en de generator krijgt twintig pogingen om ze te plaatsen. Lukt het niet om ook maar één woord te plaatsen, dan antwoordt de aanroep met 500.
Instellingen die het leest
Veld
Type
Wat het doet
hidden_solution
optioneelin settings
string
string
Een optioneel bonuswoord. De letters ervan worden gemarkeerd in vakjes van het voltooide raster, zodat spelers ze kunnen verzamelen als de kruiswoordpuzzel is opgelost. Elke letter ervan moet dus in de antwoorden voorkomen.
Voorbeeldrequest
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": "nl",
"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"
}
]
}'
Een array van woorden. Samen moeten ze elke letter van het verborgen woord leveren.
Valt terug op de naam “Acrostic API”
Goed om te weten
Als de antwoorden niet de letters kunnen leveren die de oplossing nodig heeft, antwoordt de aanroep met 500 in plaats van een half opgebouwd raster op te slaan.
De generator zet je antwoorden in een andere volgorde om de kolom te laten kloppen, dus de volgorde die je stuurt is niet de volgorde die spelers zien.
Instellingen die het leest
Veld
Type
Wat het doet
hidden_solution
verplichtin settings
string
string
Het woord dat de gemarkeerde kolom vormt. Zonder dit doet dit endpoint niets.
Voorbeeldrequest
POST acrostic
curl -X POST https://puzzel.org/api/public/v1/acrostic \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Acrostic",
"language": "nl",
"items": [
{
"answer": "PEACH",
"description": "Fuzzy skin, sweet flesh",
"type": "text"
},
{
"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": "PLUM"
}
}'
Activiteiten die via de API zijn gemaakt hebben de instelling voor willekeurige volgorde altijd aan, dus de volgorde die je stuurt is niet de volgorde die spelers krijgen.
Instellingen die het leest
Veld
Type
Wat het doet
hidden_solution
optioneelin settings
string
string
Een optioneel bonuswoord dat spelers invullen zodra de rest is opgelost.
Voorbeeldrequest
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": "nl",
"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"
}
}'
Een array van woorden. Spelers krijgen één ronde per woord.
Valt terug op de naam “Wordle API”
Goed om te weten
Standaard wordt gecontroleerd of ingevoerde woorden in de woordenlijst staan. Zet deze instelling uit in de editor als je namen of zelfbedachte woorden gebruikt.
POST/api/public/v1/typing-practice1 tot 50 in items
Inhoud
api_c_typing_practice
Valt terug op de naam “Typing Practice API”
Voorbeeldrequest
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": "nl",
"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"
}
]
}'
Geslaagd
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Een array van woorden. Elk item koppelt het antwoord aan een omschrijving die kort genoeg is voor één vakje.
Valt terug op de naam “Arrowword API”
Instellingen die het leest
Veld
Type
Wat het doet
hidden_solution
optioneelin settings
string
string
Een optioneel bonuswoord. De letters ervan worden gemarkeerd in vakjes van het voltooide raster. Elke letter ervan moet dus in de antwoorden voorkomen.
Een array van themawoorden. Samen met het spangram moeten hun letters een bord precies vullen.
Valt terug op de naam “Strands API”
Goed om te weten
De letters van alle woorden en het spangram samen moeten precies 30, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72 of 80 zijn. Bij elk ander aantal antwoordt de aanroep met 400 en zegt hij hoeveel letters je moet toevoegen of weghalen.
Instellingen die het leest
Veld
Type
Wat het doet
theme
optioneelin settings
string
string
Het raadsel boven het raster. Laat je dit weg, dan zien spelers de titel.
spangram
optioneelin settings
string
string
Het woord of de zin die het thema noemt en het bord van de ene rand naar de andere doorkruist.
POST/api/public/v1/name-them-all1 tot 250 in items
Inhoud
api_c_name_them_all
Valt terug op de naam “Name Them All API”
Goed om te weten
Een item is een object met een answer, en eventueel aliases (andere spellingen die ook tellen), een description (de hint) en een group. Hoofdletters, accenten en leestekens worden genegeerd wanneer een naam wordt gecontroleerd.
Instellingen die het leest
Veld
Type
Wat het doet
list_match_mode
optioneelin settings
string
string
Of een naam telt op het moment dat hij wordt getypt, of pas bij Enter.
Een vanwhile_typingon_enter
Standaard: "while_typing"
list_slot_hint
optioneelin settings
string
string
Wat een leeg vakje weggeeft: niets, de lengte van de naam, de eerste letter, of de hint die je hebt geschreven.
Een vannonelengthfirst_letterhint
Standaard: "none"
list_arrange
optioneelin settings
string
string
Eén kolom per groep, of één lijst.
Een vangroupsone_list
Standaard: "groups"
list_allow_give_up
optioneelin settings
boolean
boolean
Toont een knop om op te geven, die de ronde beëindigt en laat zien wat gemist is.
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/name-them-all/embed?p=-Nq8sample_activity_key",
"message": "Name them all list created successfully"
}
Een array van paren. Elk paar bevat de twee kaarten die bij elkaar horen.
Valt terug op de naam “Memory Game API”
Goed om te weten
Een kaart is een object met een type en een value. Gebruik "text" voor woorden, of "image", "audio", "youtube" of "link" met een URL in value, en voeg alt toe voor een beschrijving.
POST/api/public/v1/matching-pairs2 tot 30 in items
Inhoud
api_c_matching_pairs
Valt terug op de naam “Matching Game API”
Goed om te weten
Een kaart is een object met een type en een value. Gebruik "text" voor woorden, of "image", "audio", "youtube" of "link" met een URL in value, en voeg alt toe voor een beschrijving.
Het endpoint slaat zoveel kaarten op als je stuurt, dus stuur er precies twee per item — eerst de voorkant, dan de achterkant.
Een kaart is een object met een type en een value. Gebruik "text" voor woorden, of "image", "audio", "youtube" of "link" met een URL in value, en voeg alt toe voor een beschrijving.
POST/api/public/v1/categorizeMinimaal 2 in items · Hoogstens 60 kaarten in totaal
Inhoud
Een array van categorieën, elk met een naam en de kaarten die erin horen.
Valt terug op de naam “Categorize Game API”
Goed om te weten
Een categorie die zonder naam wordt gestuurd, wordt opgeslagen als “Untitled Category”, dus stuur er altijd een mee.
Een kaart is een object met een type en een value. Gebruik "text" voor woorden, of "image", "audio", "youtube" of "link" met een URL in value, en voeg alt toe voor een beschrijving.
POST/api/public/v1/reorderMinimaal 1 in items · Hoogstens 60 kaarten in totaal
Inhoud
Een array van reeksen. Elke reeks bevat zijn kaarten in de juiste volgorde.
Valt terug op de naam “Reorder Game API”
Goed om te weten
De volgorde die je stuurt wordt opgeslagen als de juiste volgorde — nummer één eerst.
Een kaart is een object met een type en een value. Gebruik "text" voor woorden, of "image", "audio", "youtube" of "link" met een URL in value, en voeg alt toe voor een beschrijving.
Een array van items waaruit de kaarten worden getrokken. Stuur er duidelijk meer dan één kaart vakjes heeft, zodat de kaarten van elkaar verschillen.
Valt terug op de naam “Bingo API”
Goed om te weten
Een item is een object met een value, en eventueel een type ("text", "image" of "audio" met een URL in value), een description (de omschrijving die de host voorleest in de modus met omschrijvingen) en alt.
Instellingen die het leest
Veld
Type
Wat het doet
mode
optioneelin settings
string
string
Wat de vakjes vult: je items, je items afgeroepen met hun omschrijving, of gewone getallen (daarvoor zijn geen items nodig).
Een vanitemscluesnumbers
Standaard: "items"
rows
optioneelin settings
number
number
Rijen op elke kaart, 2 tot 5.
Standaard: 3
columns
optioneelin settings
number
number
Kolommen op elke kaart, 2 tot 5.
Standaard: 3
highest_number
optioneelin settings
number
number
In de modus met getallen worden de kaarten gevuld vanaf 1 tot dit getal, hoogstens 100. Een functie van een abonnement: zonder abonnement blijft het 50.
Standaard: 50
Voorbeeldrequest
POST bingo
curl -X POST https://puzzel.org/api/public/v1/bingo \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Bingo",
"language": "nl",
"items": [
{
"type": "text",
"value": "Paris",
"description": "The capital of France"
},
{
"type": "text",
"value": "Berlin",
"description": "The capital of Germany"
},
{
"type": "text",
"value": "Madrid",
"description": "The capital of Spain"
}
],
"settings": {
"mode": "clues",
"rows": 3,
"columns": 4,
"highest_number": 75
}
}'
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/i-have-who-has/embed?p=-Nq8sample_activity_key",
"message": "I have, who has created successfully"
}
Een array van toetsen. De toetsen die in de code zitten, geven hun plek erin aan.
Valt terug op de naam “Keypad API”
Goed om te weten
Een toets is een object met een value, en eventueel een type ("text", "image" of "audio" met een URL in value), alt en code_position: zijn plek in de code, 1 is de eerste. Een toets kan één keer in de code zitten, en er moet minstens één toets in zitten.
Instellingen die het leest
Veld
Type
Wat het doet
instructions
optioneelin settings
string
string
De vraag of het raadsel waarop de code het antwoord is, getoond bij het paneel.
force_solution_in_correct_order
optioneelin settings
boolean
boolean
De toetsen moeten op volgorde worden ingedrukt. Staat dit uit, dan opent elke volgorde van de juiste toetsen het slot.
Standaard: false
randomize_order
optioneelin settings
boolean
boolean
Elke speler krijgt de toetsen in een andere, door elkaar gehusselde opstelling.
Een array van sets. Elke set heeft een naam en precies vier kaarten.
Valt terug op de naam “Quartets API”
Goed om te weten
Een kaart is een naam, of een object met een name en een description (het feit dat erop staat). Geen enkele kaartnaam mag twee keer in het spel voorkomen: spelers vragen om kaarten bij hun naam.
Instellingen die het leest
Veld
Type
Wat het doet
type
optioneelin settings
string
string
Een gewoon spel, of een leerspel waarin elke kaart een feit toont. Laat je dit weg, dan is het learn als een kaart een description heeft.
Een vannormallearn
Voorbeeldrequest
POST quartets
curl -X POST https://puzzel.org/api/public/v1/quartets \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Quartets",
"language": "nl",
"items": [
{
"name": "Birds",
"cards": [
{
"name": "Owl",
"description": "Hunts at night and turns its head three quarters of the way round."
},
{
"name": "Robin",
"description": "Sings through the winter."
},
{
"name": "Woodpecker",
"description": "Drums on trees up to twenty times a second."
},
{
"name": "Jay",
"description": "Buries thousands of acorns each autumn."
}
]
},
{
"name": "Mammals",
"cards": [
{
"name": "Hedgehog",
"description": "Carries about five thousand spines."
},
{
"name": "Fox",
"description": "Hears a mouse under the snow."
},
{
"name": "Badger",
"description": "Lives in a sett with its clan."
},
{
"name": "Otter",
"description": "Sleeps holding hands so it does not drift off."
}
]
}
],
"settings": {
"type": "learn"
}
}'
Geslaagd
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/quartets/embed?p=-Nq8sample_activity_key",
"message": "Quartets game created successfully"
}
Een array van vragen. Meerkeuzevragen bevatten hun antwoordopties; open vragen bevatten het antwoord dat je goedkeurt.
Valt terug op de naam “Quiz API”
Goed om te weten
question_type is "multiple_choice", waarbij de juiste optie isCorrect true heeft; "true_false", hetzelfde met precies twee opties, eerst true en dan false; of "open_answer", die in plaats daarvan correct_answer gebruikt. Als je het weglaat, wordt het behandeld als meerkeuze.
Het quiz-endpoint geeft settings rechtstreeks door als instellingenblokken van de activiteit, dus dit is geen plek voor losse opties — stel de quiz achteraf bij in de editor.
Voorbeeldrequest
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": "nl",
"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 is "multiple_choice", waarbij de juiste optie isCorrect true heeft; "true_false", hetzelfde met precies twee opties, eerst true en dan false; of "open_answer", die in plaats daarvan correct_answer gebruikt. Als je het weglaat, wordt het behandeld als meerkeuze.
Instellingen die het leest
Veld
Type
Wat het doet
number_of_tiles
optioneelin settings
number
number
Hoeveel vakjes het bord heeft. Tussen 10 en 75.
Standaard: 30
game_mode
optioneelin settings
string
string
Of spelers naar de finish racen of onderweg voorwerpen verzamelen.
Een vanrace_to_finishcollect_items
Standaard: "race_to_finish"
Voorbeeldrequest
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": "nl",
"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"
}
}'
Geslaagd
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Een array van meerkeuzevragen of waar-of-niet-waarvragen, precies in de vorm die het quiz-endpoint neemt. Open vragen worden geweigerd: op een deur moet een antwoord staan.
Valt terug op de naam “Maze API”
Instellingen die het leest
Veld
Type
Wat het doet
maze_width
optioneelin settings
string
string
Hoe de kamers zijn ingedeeld: in één kolom, een vierkant, of breder.
Een vannarrownormalwide
Standaard: "normal"
maze_corridors
optioneelin settings
string
string
Hoeveel doolhof er tussen twee vragen ligt.
Een vanshortnormallong
Standaard: "normal"
maze_fog
optioneelin settings
string
string
Toon het hele doolhof, of alleen wat de speler is gepasseerd.
Een vanoffnear
Standaard: "off"
maze_wrong_door_pause
optioneelin settings
string
string
Hoe lang de deuren dicht blijven na een verkeerde deur.
Een vannoneshortlong
Standaard: "short"
maze_walk_there
optioneelin settings
boolean
boolean
Biedt een knop die het stipje naar de volgende kamer laat lopen.
Standaard: false
maze_seed
optioneelin settings
string
string
De seed waaruit het doolhof wordt gegenereerd. Dezelfde seed en vragen geven hetzelfde doolhof; laat je hem weg, dan wordt er een nieuwe getrokken.
Voorbeeldrequest
POST maze
curl -X POST https://puzzel.org/api/public/v1/maze \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Maze",
"language": "nl",
"items": [
{
"question_type": "multiple_choice",
"description": "What is it called when water vapour turns back into liquid droplets?",
"answers": [
{
"type": "text",
"description": "Evaporation",
"isCorrect": false
},
{
"type": "text",
"description": "Condensation",
"isCorrect": true
},
{
"type": "text",
"description": "Transpiration",
"isCorrect": false
}
],
"explanation": "Cooling vapour condenses into the droplets that make clouds."
},
{
"question_type": "true_false",
"description": "Most of the water on Earth is fresh water.",
"answers": [
{
"type": "text",
"description": "True",
"isCorrect": false
},
{
"type": "text",
"description": "False",
"isCorrect": true
}
]
}
],
"settings": {
"maze_width": "wide",
"maze_corridors": "short",
"maze_seed": "water123",
"maze_fog": "near"
}
}'
Een array van categorieën, van links naar rechts. Elke categorie heeft een naam en zijn omschrijvingen van de bovenste rij naar beneden.
Valt terug op de naam “Jeopardy API”
Goed om te weten
Een omschrijving is een vraag zoals het quiz-endpoint die neemt, open_answer tenzij er iets anders staat, met correct_answer en eventueel aliases. Hij kan ook value (zijn eigen waarde) en daily_double bevatten. null laat een vakje leeg.
Instellingen die het leest
Veld
Type
Wat het doet
jeopardy_buzzer_mode
optioneelin settings
string
string
Wie hoe speelt: de host bedient het vanaf de console, spelers buzzeren via hun telefoon, of elke speler werkt zijn eentje aan het bord.
Een vanhostphonessolo
Standaard: "host"
jeopardy_contestants
optioneelin settings
string
string
Of de console het over teams of over spelers heeft.
Een vanteamsplayers
Standaard: "teams"
jeopardy_value_step
optioneelin settings
number
number
Wat een rij waard is: een omschrijving is dit bedrag keer zijn rijnummer waard. Van 50 tot 500, in stappen van 50.
Standaard: 100
jeopardy_answer_time
optioneelin settings
number
number
Seconden om te antwoorden zodra een omschrijving open is, tot 300. 0 is geen klok.
Standaard: 20
jeopardy_wrong_answer_costs
optioneelin settings
boolean
boolean
Een fout antwoord haalt de waarde van de omschrijving van de score af.
Standaard: false
jeopardy_reveal_on_timeout
optioneelin settings
boolean
boolean
Het bord toont zelf het antwoord als de klok afloopt.
Standaard: false
jeopardy_require_question_form
optioneelin settings
boolean
boolean
Herinnert spelers eraan om in de vorm van een vraag te antwoorden.
Standaard: false
Voorbeeldrequest
POST jeopardy
curl -X POST https://puzzel.org/api/public/v1/jeopardy \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Jeopardy",
"language": "nl",
"items": [
{
"name": "Planets",
"questions": [
{
"question_type": "open_answer",
"description": "The planet closest to the Sun.",
"correct_answer": "Mercury"
},
{
"question_type": "open_answer",
"description": "It is known as the red planet.",
"correct_answer": "Mars",
"explanation": "Iron oxide in its soil gives it the colour."
},
{
"question_type": "multiple_choice",
"description": "This planet has the most confirmed moons.",
"answers": [
{
"description": "Jupiter",
"isCorrect": false
},
{
"description": "Saturn",
"isCorrect": true
},
{
"description": "Neptune",
"isCorrect": false
}
],
"daily_double": true
}
]
},
{
"name": "Moons",
"questions": [
{
"question_type": "open_answer",
"description": "The only world besides Earth that people have walked on.",
"correct_answer": "The Moon",
"aliases": [
"Luna"
]
},
null,
{
"question_type": "name_them_all",
"description": "Name the four Galilean satellites.",
"answers": [
{
"description": "Io"
},
{
"description": "Europa"
},
{
"description": "Ganymede",
"aliases": [
"Ganymedes"
]
},
{
"description": "Callisto"
}
],
"required_count": 3,
"value": 500
}
]
}
],
"settings": {
"jeopardy_buzzer_mode": "solo",
"jeopardy_value_step": 200,
"jeopardy_wrong_answer_costs": true
}
}'
POST/api/public/v1/interactive-video1 tot 50 in items
Inhoud
api_c_interactive_video
Valt terug op de naam “Interactive Video API”
Goed om te weten
Een pop-up is een object met time (seconden, of "1:23"), kind ("question" tenzij er "note", "think" of "chapter" staat) en description. Een vraag is een vraag zoals het quiz-endpoint die neemt, en kan rewind_to bevatten: waar de video na een fout antwoord opnieuw begint.
Instellingen die het leest
Veld
Type
Wat het doet
video_url
verplichtin settings
string
string
De video: een pagina van YouTube, Vimeo of Bunny Stream, of een directe link naar een mp4-, webm- of mov-bestand.
video_duration
optioneelin settings
number
number
De lengte van de video in seconden. Als je die opgeeft, wordt een pop-up na het einde geweigerd.
Voorbeeldrequest
POST interactive-video
curl -X POST https://puzzel.org/api/public/v1/interactive-video \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Interactive Video",
"language": "nl",
"items": [
{
"time": 5,
"kind": "chapter",
"description": "Evaporation"
},
{
"time": 42.5,
"kind": "question",
"question_type": "multiple_choice",
"description": "What turns liquid water into vapour?",
"answers": [
{
"type": "text",
"description": "Heat from the sun",
"isCorrect": true
},
{
"type": "text",
"description": "Wind from the north",
"isCorrect": false
},
{
"type": "text",
"description": "Salt in the sea",
"isCorrect": false
}
],
"explanation": "The sun warms the surface and the water evaporates.",
"rewind_to": 20
}
],
"settings": {
"video_url": "https://www.youtube.com/watch?v=al-do-HGuIk",
"video_duration": 180,
"video_allow_skipping": true
}
}'
Geslaagd
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/interactive-video/embed?p=-Nq8sample_activity_key",
"message": "Interactive video created successfully"
}
Eén zin, in het veld sentence. Dit endpoint neemt geen items.
Valt terug op de naam “Calculation Game API”
Goed om te weten
Als de beperkingen te strak zijn om de zin te coderen, antwoordt de aanroep met 400 en het verzoek ze te versoepelen, in plaats van een halve puzzel op te slaan.
Instellingen die het leest
Veld
Type
Wat het doet
sentence
verplicht
string
string
De zin die spelers onthullen door de sommen op te lossen.
difficulty_level
optioneelin settings
number
number
De hoogste uitkomst die een som mag hebben.
Een van20501001000
Standaard: "100"
operators
optioneelin settings
string[]
string[]
Welke bewerkingen mogen voorkomen. x is vermenigvuldigen, : is delen.
Een van+-x:
Standaard: ["+", "-", "x", ":"]
max_operations
optioneelin settings
number
number
Hoeveel bewerkingen één som achter elkaar mag zetten.
Een van123
Standaard: 1
number_difficulty
optioneelin settings
number
number
Begrenst de losse getallen binnen een som. Ergens tussen 5 en 1000.
Niets. De hele puzzel komt voort uit zijn twee instellingen.
Valt terug op de naam “Sudoku API”
Goed om te weten
Stuur geen items en geen sentence — size en difficulty zijn de volledige invoer.
De editor biedt de moeilijkheidsgraad alleen aan voor 2x3, 3x3 en 3x4. De API past hem toe op elke grootte, 2x2 en 4x4 inbegrepen.
Instellingen die het leest
Veld
Type
Wat het doet
size
optioneelin settings
string
string
De grootte van één blok, geschreven als rijen bij kolommen — 3x3 geeft het klassieke 9x9-raster. Het endpoint controleert alleen of het als twee getallen te lezen is, dus houd het bij de groottes die de editor aanbiedt.
Een van2x22x33x33x44x4
Standaard: "3x3"
difficulty_level
optioneelin settings
string
string
Hoeveel getallen er op het bord blijven staan om mee te beginnen.
POST/api/public/v1/fill-in-the-gap1 tot 50 in items
Inhoud
api_c_fill_in_the_gap
Valt terug op de naam “Fill in the gap API”
Goed om te weten
Schrijf de hele zin en zet asterisken om elk woord dat wegvalt: "Water boils at *100* degrees." Meerdere woorden binnen één paar zijn één gat. Een item kan ook een instructie bevatten die boven de zin wordt getoond.
Voorbeeldrequest
POST fill-in-the-gap
curl -X POST https://puzzel.org/api/public/v1/fill-in-the-gap \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Fill in the gap",
"language": "nl",
"items": [
{
"sentence": "The capital of France is *Paris*, and the river that runs through it is the *Seine*."
},
{
"sentence": "*Amsterdam* is the capital of the Netherlands, but the government sits in *The Hague*.",
"instruction": "Two cities, one of them two words."
},
{
"sentence": "The *Danube* flows through Vienna, Bratislava, *Budapest* and Belgrade."
}
]
}'
Geslaagd
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/fill-in-the-gap/embed?p=-Nq8sample_activity_key",
"message": "Fill in the gap created successfully"
}
Een array van zinnen. Elk woord dat gelabeld moet worden schrijf je als [word](label).
Valt terug op de naam “Sentence analysis API”
Goed om te weten
Schrijf een zin als "The [dog](noun) [barks](verb)." Woorden zonder tag worden getoond maar niet gevraagd. De labels noun, verb, adjective en subject worden aan elke speler in zijn eigen taal getoond.
Instellingen die het leest
Veld
Type
Wat het doet
categories
optioneelin settings
string[]
string[]
De labels waaruit spelers kiezen, op volgorde. Laat je dit weg, dan zijn het de labels die in de zinnen voorkomen. Stuur het mee om een label toe te voegen dat bij geen enkel woord hoort, of om de volgorde vast te leggen.
Voorbeeldrequest
POST deconstruct
curl -X POST https://puzzel.org/api/public/v1/deconstruct \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Sentence analysis",
"language": "nl",
"items": [
{
"sentence": "The [old](adjective) [farmer](noun) [feeds](verb) the [hungry](adjective) [chickens](noun) [early](adverb).",
"instruction": "Label the nouns, verbs, adjectives and adverbs."
},
{
"sentence": "A [brown](adjective) [horse](noun) [jumped](verb) [quickly](adverb) over the [fence](noun)."
},
{
"sentence": "[Two small lambs](subject) [sleep](verb) in the [barn](noun), and the [dog](noun) [watches](verb) [quietly](adverb)."
}
],
"settings": {
"categories": [
"noun",
"verb",
"adjective",
"adverb",
{
"name": "subject",
"color": "#224466"
},
"preposition"
]
}
}'
POST/api/public/v1/logic-puzzleMinimaal 3 in items
Inhoud
api_c_logic_puzzle
Valt terug op de naam “Logic Puzzle API”
Goed om te weten
Elke categorie heeft evenveel items nodig, 3 tot 6, allemaal verschillend. Eén categorie mag als ordered worden gemarkeerd (prijzen, tijden, leeftijden), met een optionele unit, zodat de generator omschrijvingen kan schrijven over meer, minder en hoeveel.
Instellingen die het leest
Veld
Type
Wat het doet
story
optioneelin settings
string
string
Het achtergrondverhaal dat boven de omschrijvingen staat.
difficulty
optioneelin settings
string
string
Welke soorten omschrijvingen de generator mag gebruiken.
Een vaneasymediumhard
Standaard: "easy"
hints
optioneelin settings
boolean
boolean
Biedt een knop die de volgende stap toont.
Standaard: true
auto_cross
optioneelin settings
boolean
boolean
Als je een combinatie markeert, wordt de rest van de rij en kolom doorgestreept.
Standaard: true
clue_mode
optioneelin settings
string
string
Wie de omschrijvingen schrijft die spelers zien: gegenereerd uit de tabel, je eigen zinnen in free_clues, of geen.
Een vangeneratedfreenone
Standaard: "generated"
free_clues
optioneelin settings
string[]
string[]
Je eigen omschrijvingen, getoond zoals je ze schrijft, met clue_mode "free". Er wordt niets aan gecontroleerd.
Voorbeeldrequest
POST logic-puzzle
curl -X POST https://puzzel.org/api/public/v1/logic-puzzle \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Logic Puzzle",
"language": "nl",
"items": [
{
"name": "Baker",
"items": [
"Amira",
"Jonas",
"Priya",
"Tobias"
]
},
{
"name": "Cake",
"items": [
"Lemon drizzle",
"Carrot cake",
"Brownies",
"Apple pie"
]
},
{
"name": "Price",
"items": [
"$2",
"$4",
"$6",
"$8"
],
"ordered": true,
"unit": "dollars"
}
],
"settings": {
"story": "Four friends each baked one thing for the school bake sale and each set a different price. Who baked what, and what did it cost?",
"difficulty": "medium"
}
}'
POST/api/public/v1/scavenger-hunt1 tot 50 in items
Inhoud
api_c_scavenger_hunt
Valt terug op de naam “Scavenger Hunt API”
Goed om te weten
Een stap is een object met title, description, code en eventueel accepted_codes (andere spellingen die ook tellen), url en link_text. Een code wordt gecontroleerd zonder rekening te houden met hoofdletters en spaties. De kaart met pins kun je alleen in de editor toevoegen.
Voorbeeldrequest
POST scavenger-hunt
curl -X POST https://puzzel.org/api/public/v1/scavenger-hunt \
-H "Content-Type: application/json" \
-d '{
"account_api_key": "YOUR_API_KEY",
"email": "you@example.com",
"title": "Scavenger Hunt",
"language": "nl",
"items": [
{
"title": "Start at the front desk",
"description": "Which year is carved above the entrance?",
"code": "1897",
"accepted_codes": [
"eighteen ninety-seven"
]
},
{
"title": "The quiet corner",
"description": "Find the atlas shelf. What colour is the biggest atlas?",
"code": "crimson",
"accepted_codes": [
"dark red"
]
}
]
}'
POST/api/public/v1/spatial-reasoning1 tot 50 in items
Inhoud
api_c_spatial_reasoning
Valt terug op de naam “Spatial Reasoning API”
Goed om te weten
Objecten en doelen zijn square, triangle, circle, hexagon, pentagon, star, diamond of heart. Relaties zijn inside, outside, behind, in_front_of, right_of, left_of, above, below, same_color_as, different_color_from, larger_than en smaller_than. Een regel die nooit kan kloppen, antwoordt met 400.
Een array van zinnen. Elke zin somt de woorden op die als plaatje zijn getekend; elk ander woord blijft als zijn letters staan.
Valt terug op de naam “Rebus API”
Goed om te weten
Een woord wordt getekend uit delen die samen het woord spellen. Een deel heeft de letters waar het voor staat (text), een emoji, en shows: het woord voor wat het plaatje laat zien ("broom" voor een plaatje dat voor "room" staat). Puzzel berekent de letterwijzigingen. Een deel kan ook een symbool zijn, zoals 4 voor "for".
Instellingen die het leest
Veld
Type
Wat het doet
rebus_commas
optioneelin settings
boolean
boolean
Tekent een weggelaten eerste of laatste letter als komma naast het plaatje.
Eén afbeeldings-URL, in het veld image. Dit endpoint neemt geen items.
Valt terug op de naam “Jigsaw Game API”
Goed om te weten
De API maakt altijd een legpuzzel van 4 bij 4. Aantal stukjes, onregelmatige stukjes en rechte randen zijn instellingen in de editor — rows of columns hier meesturen doet niets.
De URL wordt opgeslagen zoals je hem stuurde en het bestand wordt nooit gekopieerd, dus hij moet openbaar bereikbaar blijven zolang de activiteit gespeeld wordt.
Instellingen die het leest
Veld
Type
Wat het doet
image
verplicht
string
string
Absolute URL van de afbeelding die in stukken wordt geknipt. Wordt op het hoogste niveau gestuurd, niet binnen settings.
Eén afbeeldings-URL, binnen settings. Dit endpoint neemt geen items.
Valt terug op de naam “Sliding Puzzle API”
Goed om te weten
Anders dan de legpuzzel leest dit endpoint zijn afbeelding uit settings.image. Een image-veld op het hoogste niveau wordt genegeerd en de aanroep antwoordt met 400.
De URL wordt opgeslagen zoals je hem stuurde en het bestand wordt nooit gekopieerd, dus hij moet openbaar bereikbaar blijven zolang de activiteit gespeeld wordt.
Instellingen die het leest
Veld
Type
Wat het doet
image
verplichtin settings
string
string
Absolute URL van de afbeelding die door elkaar wordt geschoven. Anders dan bij de legpuzzel staat deze binnen settings.