Ein POST pro Aktivitätstyp. Schick deine Inhalte als JSON und du bekommst eine Aktivität in deinem Puzzel.org-Konto zurück, dazu eine URL, die du an Spieler weitergeben oder in ein iframe setzen kannst.
Basis-URL
https://puzzel.org/api/public/v1
Auth
Schlüssel + E-Mail im Body
Endpunkte
38 Aktivitätstypen
Kontingent
10 Aktivitäten pro Tag
Deine erste Anfrage
Du musst nichts installieren. Sende eine POST-Anfrage mit deinem API-Schlüssel, deiner E-Mail-Adresse und deinen Inhalten als JSON-Body. Die Antwort enthält den Schlüssel der neuen Aktivität und ihre Spiel-URL.
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": "de",
"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"
}
]
}'
Jedes Beispiel auf dieser Seite ist eine vollständige, lauffähige Anfrage. Setz deinen eigenen Schlüssel und deine eigenen Inhalte ein und es funktioniert genau so.
Authentifizierung
Du brauchst keinen Authentifizierungs-Header und kein Bearer-Token. API-Schlüssel und E-Mail-Adresse stehen im JSON-Body jeder Anfrage. Der Schlüssel muss zu dem Konto mit dieser E-Mail-Adresse gehören.
Feld
Typ
Was es macht
account_api_key
erforderlich
string
string
Der API-Schlüssel deines Kontos. Er gehört in den Body, nicht in einen Header.
email
erforderlich
string
string
Die Adresse, mit der sich dein Puzzel.org-Konto anmeldet. Der Schlüssel ist nur zusammen mit ihr gültig.
Deinen Schlüssel findest du im Kontobereich deines Dashboards, hinter Anzeigen.
Behandle den Schlüssel wie ein Passwort. Er erstellt und überschreibt Aktivitäten in deinem Konto, halte ihn also serverseitig und aus allem heraus, was ein Browser lesen kann.
Der Request-Body
Alle Endpunkte verwenden dieselben fünf gemeinsamen Felder. Die zusätzlichen Inhaltsfelder unterscheiden sich je nach Aktivität: meist ein Array mit Einträgen, manchmal ein einzelner Satz oder ein Bild. Für Sudoku brauchst du keine Inhalte mitzusenden.
Feld
Typ
Was es macht
account_api_key
erforderlich
string
string
Der API-Schlüssel deines Kontos. Er gehört in den Body, nicht in einen Header.
email
erforderlich
string
string
Die Adresse, mit der sich dein Puzzel.org-Konto anmeldet. Der Schlüssel ist nur zusammen mit ihr gültig.
title
optional
string
string
Der Name, den die Aktivität in deinem Dashboard bekommt. Lässt du ihn weg, nimmt der Endpunkt seinen eigenen Ersatznamen.
language
optional
string
string
Bestimmt nur die Sprache in der URL, die du zurückbekommst — es übersetzt nichts von dem, was du schickst. Das Wortsuchrätsel liest es außerdem, um seine Füllbuchstaben auf Arabisch umzustellen, wenn es "ar" ist.
Standard: "en"
activity_key
optional
string
string
Lass es weg, um eine neue Aktivität zu erstellen. Gib den Schlüssel einer Aktivität an, die dir schon gehört, und diese wird stattdessen neu aufgebaut.
settings ist ein Objekt mit Optionen pro Endpunkt. Welche ein Endpunkt liest, steht unten bei ihm; alles andere, was du dort hineinschreibst, wird ignoriert.
Was zurückkommt
Ein erfolgreicher Aufruf antwortet mit 200, dem Schlüssel der neuen Aktivität und der URL, unter der sie gespielt wird. Alles andere antwortet mit success auf false und einem einzelnen error-String.
{
"success": false,
"error": "Invalid Email or API Key"
}
Die url, die du zurückbekommst, ist die Einbettungsansicht. Ersetz embed durch play, um sie als ganze Seite zu öffnen, oder durch build, um sie im Editor zu öffnen — der Schlüssel hinter p= bleibt gleich.
Erstellen vs. Aktualisieren
Wenn du activity_key mitsendest, wird die bestehende Aktivität aktualisiert: Ihr Inhalt wird ersetzt, Name und Versionsstempel werden aktualisiert. Der Schlüssel bleibt gleich, sodass bereits geteilte Links und Einbettungen weiter funktionieren. Ergebnisse, die Zuordnung zu einem Ordner und Einstellungen, die der Endpunkt nicht überschreibt, bleiben erhalten.
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 wird bei jeder Aktualisierung angewendet, sein Standard eingeschlossen — lässt du es weg, wird die Aktivität in den Ersatznamen dieses Endpunkts umbenannt.
Die Einstellungsblöcke, die ein Endpunkt selbst schreibt, werden von Grund auf neu geschrieben. Eine Aktualisierung setzt sie also ebenfalls auf die Werte, die du schickst, oder auf die Standardwerte des Endpunkts.
Du kannst nur Aktivitäten aktualisieren, die deinem eigenen Konto gehören. Der Schlüssel einer fremden Aktivität antwortet mit 403.
Eine Aktualisierung kostet genauso viel wie ein Erstellen: einen Aufruf vom heutigen Kontingent.
Rate-Limit
10
10 Aktivitäten pro Konto und Tag
Jeder erfolgreiche Aufruf zählt, erstellen wie aktualisieren. Gehst du darüber, antwortet die nächste Anfrage mit 429, bis der Zähler zurückgesetzt ist.
Der Zähler wird einmal am Tag von einem geplanten Job geleert, nicht in einem gleitenden 24-Stunden-Fenster.
Fehler
Fehler kommen immer als JSON mit denselben zwei Feldern, nie als HTML-Seite. Der error-String ist so geschrieben, dass ein Mensch ihn lesen kann — er nennt das Feld oder das Limit, an dem es gescheitert ist.
Status
Was es bedeutet
400
Bad Request
Im Body fehlt etwas, ist fehlerhaft oder außerhalb des zulässigen Bereichs. Die Meldung nennt das Feld.
401
Unauthorized
Die E-Mail-Adresse ist unbekannt oder der Schlüssel gehört nicht zu diesem Konto.
403
Forbidden
Der activity_key, den du geschickt hast, gehört zu einem anderen Konto.
429
Too Many Requests
Das heutige Kontingent ist aufgebraucht. Es wird einmal am Tag zurückgesetzt.
500
Server Error
Der Generator konnte aus dem, was du geschickt hast, kein Rätsel bauen — meist zu wenige Wörter oder Wörter, die sich nicht zusammenfügen lassen.
Endpunkte
Ein Pfad pro Aktivitätstyp, alle POST, alle unter derselben Basis-URL. Bei jedem stehen die Inhalte, die er braucht, die Einstellungen, die er liest, und eine Anfrage, die du ausführen kannst.
Wörter & Buchstaben
R
O
T
A
H
U
N
D
M
Kreuzworträtsel
Verzahnt deine Antworten zu einem Raster und nummeriert die Hinweise für dich.
Ein Array aus Wörtern. Jeder Eintrag verbindet die Antwort mit dem Hinweis, der auf sie zeigt.
Nutzt ersatzweise den Namen “Crossword API”
Gut zu wissen
Antworten mit weniger als zwei Zeichen fallen raus, bevor das Raster gebaut wird, und mindestens zwei müssen das überstehen.
Antworten werden in Großbuchstaben umgewandelt und der Generator hat zwanzig Versuche, sie unterzubringen. Kann er kein einziges Wort platzieren, antwortet der Aufruf mit 500.
Einstellungen, die er liest
Feld
Typ
Was es macht
hidden_solution
optionalin den Einstellungen
string
string
Ein optionales Bonuswort. Seine Buchstaben werden in Feldern des fertigen Rasters markiert, damit die Spieler sie einsammeln, sobald das Kreuzworträtsel gelöst ist. Jeder Buchstabe davon muss also in den Antworten vorkommen.
Beispielanfrage
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": "de",
"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"
}
]
}'
Ein Array aus Wörtern. Der Hinweistext wird zur Wortliste, mit der die Spieler arbeiten.
Nutzt ersatzweise den Namen “Wordseeker API”
Gut zu wissen
Antworten unter zwei Zeichen fallen raus, und jede Antwort wird in Großbuchstaben umgewandelt, bevor sie ins Raster kommt.
Das Raster wird mit lateinischen Buchstaben aufgefüllt, es sei denn, language ist "ar" — dann sind die Füllbuchstaben arabisch.
Einstellungen, die er liest
Feld
Typ
Was es macht
hidden_solution
optionalin den Einstellungen
string
string
Die übrigen Buchstaben ergeben diese Lösung. Setzt du sie, baut der Generator außerdem zuerst die Lösung ein, statt so viele Wörter wie möglich unterzubringen.
directions
optionalin den Einstellungen
string[]
string[]
In welche Richtungen ein Wort verlaufen darf. Lässt du es weg, verlaufen Wörter nur nach Osten, Südosten und Süden.
Eines vonwesteastnorthsouthnorthwestnortheastsouthwestsoutheast
Standard: ["east", "southeast", "south"]
template
optionalin den Einstellungen
string
string
Schneidet das Raster in eine Form, statt es quadratisch zu lassen.
Eines vonsquarecirclecrossdiamondpyramidsmileystarcross_plus
Beispielanfrage
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": "de",
"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"
}
}'
Über die API erstellte Aktivitäten haben die Einstellung zum Mischen der Reihenfolge immer an, die Reihenfolge, die du schickst, ist also nicht die, die Spieler bekommen.
Einstellungen, die er liest
Feld
Typ
Was es macht
hidden_solution
optionalin den Einstellungen
string
string
Ein optionales Bonuswort, das Spieler eingeben, sobald der Rest gelöst ist.
Beispielanfrage
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": "de",
"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"
}
}'
Ein Array aus Wörtern. Spieler bekommen eine Runde pro Wort.
Nutzt ersatzweise den Namen “Wordle API”
Gut zu wissen
Wird mit der Einstellung erstellt, die prüft, ob die geratenen Wörter echt sind. Schalte sie im Editor aus, wenn deine Wörter Namen oder erfunden sind.
POST/api/public/v1/typing-practice1 bis 50 in items
Inhalt
api_c_typing_practice
Nutzt ersatzweise den Namen “Typing Practice API”
Beispielanfrage
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": "de",
"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"
}
]
}'
Erfolg
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Ein Array aus Wörtern. Jeder Eintrag verbindet die Antwort mit einem Hinweis, der kurz genug für ein einzelnes Feld ist.
Nutzt ersatzweise den Namen “Arrowword API”
Einstellungen, die er liest
Feld
Typ
Was es macht
hidden_solution
optionalin den Einstellungen
string
string
Ein optionales Bonuswort. Seine Buchstaben werden in Feldern des fertigen Rasters markiert, jeder Buchstabe davon muss also in den Antworten vorkommen.
Ein Array aus Themenwörtern. Zusammen mit dem Spangram müssen ihre Buchstaben ein Spielfeld genau füllen.
Nutzt ersatzweise den Namen “Strands API”
Gut zu wissen
Die Buchstaben aller Wörter und des Spangrams zusammen müssen genau 30, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72 oder 80 ergeben. Bei jeder anderen Anzahl antwortet der Aufruf mit 400 und nennt, wie viele Buchstaben du ergänzen oder entfernen musst.
Einstellungen, die er liest
Feld
Typ
Was es macht
theme
optionalin den Einstellungen
string
string
Das Rätsel, das über dem Raster steht. Lässt du es weg, sehen die Spieler den Titel.
spangram
optionalin den Einstellungen
string
string
Das Wort oder die Wortgruppe, die das Thema benennt und das Spielfeld von einem Rand zum anderen durchquert.
POST/api/public/v1/name-them-all1 bis 250 in items
Inhalt
api_c_name_them_all
Nutzt ersatzweise den Namen “Name Them All API”
Gut zu wissen
Ein Eintrag ist ein Objekt mit answer und optional aliases (andere Schreibweisen, die zählen), description (der Tipp) und group. Beim Prüfen eines Namens werden Groß- und Kleinschreibung, Akzente und Satzzeichen ignoriert.
Einstellungen, die er liest
Feld
Typ
Was es macht
list_match_mode
optionalin den Einstellungen
string
string
Ob ein Name zählt, sobald er getippt ist, oder erst mit Enter.
Eines vonwhile_typingon_enter
Standard: "while_typing"
list_slot_hint
optionalin den Einstellungen
string
string
Was ein leerer Platz verrät: nichts, die Länge des Namens, seinen ersten Buchstaben oder den Tipp, den du geschrieben hast.
Eines vonnonelengthfirst_letterhint
Standard: "none"
list_arrange
optionalin den Einstellungen
string
string
Eine Spalte pro Gruppe oder eine einzige Liste.
Eines vongroupsone_list
Standard: "groups"
list_allow_give_up
optionalin den Einstellungen
boolean
boolean
Zeigt eine Schaltfläche zum Aufgeben, die den Durchgang beendet und zeigt, was gefehlt hat.
{
"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"
}
Ein Array aus Paaren. Jedes Paar enthält die zwei Karten, die zusammengehören.
Nutzt ersatzweise den Namen “Memory Game API”
Gut zu wissen
Eine Karte ist ein Objekt mit type und value. Nimm "text" für Wörter oder "image", "audio", "youtube" bzw. "link" mit einer URL in value, und ergänze alt für eine Beschreibung.
POST/api/public/v1/matching-pairs2 bis 30 in items
Inhalt
api_c_matching_pairs
Nutzt ersatzweise den Namen “Matching Game API”
Gut zu wissen
Eine Karte ist ein Objekt mit type und value. Nimm "text" für Wörter oder "image", "audio", "youtube" bzw. "link" mit einer URL in value, und ergänze alt für eine Beschreibung.
Der Endpunkt speichert so viele Karten, wie du schickst, schick also genau zwei pro Eintrag — Vorderseite, dann Rückseite.
Eine Karte ist ein Objekt mit type und value. Nimm "text" für Wörter oder "image", "audio", "youtube" bzw. "link" mit einer URL in value, und ergänze alt für eine Beschreibung.
POST/api/public/v1/categorizeMindestens 2 in items · höchstens 60 Karten insgesamt
Inhalt
Ein Array aus Kategorien, jede mit einem Namen und den Karten, die dazugehören.
Nutzt ersatzweise den Namen “Categorize Game API”
Gut zu wissen
Eine Kategorie ohne Namen wird als “Untitled Category” gespeichert, schick also immer einen.
Eine Karte ist ein Objekt mit type und value. Nimm "text" für Wörter oder "image", "audio", "youtube" bzw. "link" mit einer URL in value, und ergänze alt für eine Beschreibung.
POST/api/public/v1/reorderMindestens 1 in items · höchstens 60 Karten insgesamt
Inhalt
Ein Array aus Reihenfolgen. Jede enthält ihre Karten in der richtigen Reihenfolge.
Nutzt ersatzweise den Namen “Reorder Game API”
Gut zu wissen
Die Reihenfolge, die du schickst, wird als die richtige gespeichert — Nummer eins zuerst.
Eine Karte ist ein Objekt mit type und value. Nimm "text" für Wörter oder "image", "audio", "youtube" bzw. "link" mit einer URL in value, und ergänze alt für eine Beschreibung.
Ein Array aus Einträgen, aus denen die Karten gezogen werden. Schick deutlich mehr, als eine Karte Felder hat, damit sich die Karten unterscheiden.
Nutzt ersatzweise den Namen “Bingo API”
Gut zu wissen
Ein Eintrag ist ein Objekt mit value und optional type ("text", "image" oder "audio" mit einer URL in value), description (der Hinweis, den der Spielleiter im Modus "clues" vorliest) und alt.
Einstellungen, die er liest
Feld
Typ
Was es macht
mode
optionalin den Einstellungen
string
string
Was die Felder füllt: deine Einträge, deine Einträge, aufgerufen über ihren Hinweis, oder reine Zahlen (die keine items brauchen).
Eines vonitemscluesnumbers
Standard: "items"
rows
optionalin den Einstellungen
number
number
Zeilen pro Karte, 2 bis 5.
Standard: 3
columns
optionalin den Einstellungen
number
number
Spalten pro Karte, 2 bis 5.
Standard: 3
highest_number
optionalin den Einstellungen
number
number
Im Modus "numbers" werden die Karten mit Zahlen von 1 bis zu dieser Zahl gefüllt, höchstens 100. Gibt es nur mit einem Tarif: ohne bleibt es bei 50.
Standard: 50
Beispielanfrage
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": "de",
"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"
}
Ein Array aus Karten. Die Karten, die zum Code gehören, tragen ihren Platz darin.
Nutzt ersatzweise den Namen “Keypad API”
Gut zu wissen
Eine Karte ist ein Objekt mit value und optional type ("text", "image" oder "audio" mit einer URL in value), alt und code_position: ihrem Platz im Code, 1 ist der erste. Eine Karte kann nur einmal im Code stehen, und mindestens eine muss darin stehen.
Einstellungen, die er liest
Feld
Typ
Was es macht
instructions
optionalin den Einstellungen
string
string
Die Frage oder das Rätsel, auf das der Code die Antwort ist, angezeigt zusammen mit den Karten.
force_solution_in_correct_order
optionalin den Einstellungen
boolean
boolean
Die Karten müssen der Reihe nach gedrückt werden. Ausgeschaltet öffnet jede Reihenfolge der richtigen Karten das Schloss.
Standard: false
randomize_order
optionalin den Einstellungen
boolean
boolean
Jeder Spieler bekommt die Karten in einer gemischten Anordnung.
Ein Array aus Quartetten. Jedes hat einen Namen und genau vier Karten.
Nutzt ersatzweise den Namen “Quartets API”
Gut zu wissen
Eine Karte ist ein Name oder ein Objekt mit name und description (die Tatsache, die auf ihr steht). Kein Kartenname darf im Spiel doppelt vorkommen: Die Spieler fragen nach Karten über ihren Namen.
Einstellungen, die er liest
Feld
Typ
Was es macht
type
optionalin den Einstellungen
string
string
Ein einfaches Spiel oder ein Lernspiel, in dem jede Karte eine Tatsache zeigt. Lässt du es weg, ist es learn, sobald eine Karte eine description hat.
Eines vonnormallearn
Beispielanfrage
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": "de",
"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"
}
}'
Erfolg
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/quartets/embed?p=-Nq8sample_activity_key",
"message": "Quartets game created successfully"
}
Ein Array aus Fragen. Multiple-Choice-Fragen bringen ihre Antworten mit, offene Fragen die Antwort, die du gelten lässt.
Nutzt ersatzweise den Namen “Quiz API”
Gut zu wissen
question_type kann "multiple_choice" sein, wobei die richtige Option isCorrect: true trägt, außerdem "true_false", das Gleiche mit genau zwei Optionen, erst true, dann false, oder "open_answer", das stattdessen correct_answer verwendet. Ohne question_type wird die Frage als Multiple Choice behandelt.
Der quiz-Endpunkt reicht settings direkt als Einstellungsblöcke der Aktivität durch, es ist also kein Ort für lose Optionen — pass das Quiz danach im Editor an.
Beispielanfrage
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": "de",
"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 kann "multiple_choice" sein, wobei die richtige Option isCorrect: true trägt, außerdem "true_false", das Gleiche mit genau zwei Optionen, erst true, dann false, oder "open_answer", das stattdessen correct_answer verwendet. Ohne question_type wird die Frage als Multiple Choice behandelt.
Einstellungen, die er liest
Feld
Typ
Was es macht
number_of_tiles
optionalin den Einstellungen
number
number
Wie viele Felder das Brett hat. Zwischen 10 und 75.
Standard: 30
game_mode
optionalin den Einstellungen
string
string
Ob Spieler zum Ziel rennen oder unterwegs Gegenstände sammeln.
Eines vonrace_to_finishcollect_items
Standard: "race_to_finish"
Beispielanfrage
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": "de",
"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"
}
}'
Erfolg
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Ein Array aus Multiple-Choice- oder Richtig-oder-falsch-Fragen, genau in der Form, die der quiz-Endpunkt nimmt. Offene Fragen werden abgelehnt: Auf einer Tür muss eine Antwort stehen.
Nutzt ersatzweise den Namen “Maze API”
Einstellungen, die er liest
Feld
Typ
Was es macht
maze_width
optionalin den Einstellungen
string
string
Wie die Kammern angeordnet sind: eine Spalte, ein Quadrat oder breiter.
Eines vonnarrownormalwide
Standard: "normal"
maze_corridors
optionalin den Einstellungen
string
string
Wie viel Labyrinth zwischen zwei Fragen liegt.
Eines vonshortnormallong
Standard: "normal"
maze_fog
optionalin den Einstellungen
string
string
Das ganze Labyrinth zeigen oder nur die Stellen, an denen der Spieler schon vorbeigekommen ist.
Eines vonoffnear
Standard: "off"
maze_wrong_door_pause
optionalin den Einstellungen
string
string
Wie lange die Türen nach einer falschen verschlossen bleiben.
Eines vonnoneshortlong
Standard: "short"
maze_walk_there
optionalin den Einstellungen
boolean
boolean
Bietet eine Schaltfläche, die die Spielfigur zur nächsten Kammer laufen lässt.
Standard: false
maze_seed
optionalin den Einstellungen
string
string
Der Startwert, aus dem das Labyrinth erzeugt wird. Derselbe Startwert und dieselben Fragen ergeben dasselbe Labyrinth; lässt du ihn weg, wird ein neuer gezogen.
Beispielanfrage
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": "de",
"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"
}
}'
Ein Array aus Kategorien, von links nach rechts. Jede hat einen Namen und ihre Hinweise, von der obersten Zeile abwärts.
Nutzt ersatzweise den Namen “Jeopardy API”
Gut zu wissen
Ein Hinweis ist eine Frage, so wie der quiz-Endpunkt sie nimmt, open_answer, sofern nichts anderes dasteht, mit correct_answer und optional aliases. Er kann außerdem value (seinen eigenen Wert) und daily_double tragen. null lässt ein Feld leer.
Einstellungen, die er liest
Feld
Typ
Was es macht
jeopardy_buzzer_mode
optionalin den Einstellungen
string
string
Wer wie spielt: Du steuerst es von der Konsole aus, die Spieler melden sich per Handy, oder jeder Spieler spielt das Board allein.
Eines vonhostphonessolo
Standard: "host"
jeopardy_contestants
optionalin den Einstellungen
string
string
Ob die Konsole von Teams oder von Spielern spricht.
Eines vonteamsplayers
Standard: "teams"
jeopardy_value_step
optionalin den Einstellungen
number
number
Was eine Zeile wert ist: Ein Hinweis ist so viel wert wie dieser Wert mal seine Zeilennummer. Von 50 bis 500, in Schritten von 50.
Standard: 100
jeopardy_answer_time
optionalin den Einstellungen
number
number
Sekunden zum Antworten, sobald ein Hinweis geöffnet ist, höchstens 300. 0 bedeutet keine Uhr.
Standard: 20
jeopardy_wrong_answer_costs
optionalin den Einstellungen
boolean
boolean
Eine falsche Antwort zieht den Wert des Hinweises von der Punktzahl ab.
Standard: false
jeopardy_reveal_on_timeout
optionalin den Einstellungen
boolean
boolean
Das Board zeigt die Antwort selbst, wenn die Zeit abläuft.
Standard: false
jeopardy_require_question_form
optionalin den Einstellungen
boolean
boolean
Erinnert die Spieler daran, in der Form einer Frage zu antworten.
Standard: false
Beispielanfrage
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": "de",
"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 bis 50 in items
Inhalt
api_c_interactive_video
Nutzt ersatzweise den Namen “Interactive Video API”
Gut zu wissen
Ein Pop-up ist ein Objekt mit time (Sekunden oder "1:23"), kind ("question", sofern nicht "note", "think" oder "chapter" dasteht) und description. Eine Frage ist eine Frage, so wie der quiz-Endpunkt sie nimmt, und kann rewind_to tragen: die Stelle, ab der nach einer falschen Antwort neu abgespielt wird.
Einstellungen, die er liest
Feld
Typ
Was es macht
video_url
erforderlichin den Einstellungen
string
string
Das Video: eine YouTube-, Vimeo- oder Bunny-Stream-Seite oder ein direkter Link zu einer mp4-, webm- oder mov-Datei.
video_duration
optionalin den Einstellungen
number
number
Die Länge des Videos in Sekunden. Ist sie angegeben, wird ein Pop-up hinter dem Ende abgelehnt.
Beispielanfrage
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": "de",
"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
}
}'
Erfolg
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/interactive-video/embed?p=-Nq8sample_activity_key",
"message": "Interactive video created successfully"
}
Ein Satz, im Feld sentence. Dieser Endpunkt nimmt keine items.
Nutzt ersatzweise den Namen “Calculation Game API”
Gut zu wissen
Sind die Vorgaben zu eng, um den Satz zu verschlüsseln, antwortet der Aufruf mit 400 und bittet dich, sie zu lockern, statt ein halbes Rätsel zu speichern.
Einstellungen, die er liest
Feld
Typ
Was es macht
sentence
erforderlich
string
string
Der Satz, den Spieler aufdecken, indem sie die Rechenaufgaben lösen.
difficulty_level
optionalin den Einstellungen
number
number
Das höchste Ergebnis, das eine Rechenaufgabe haben darf.
Eines von20501001000
Standard: "100"
operators
optionalin den Einstellungen
string[]
string[]
Welche Rechenarten vorkommen dürfen. x ist mal, : ist geteilt.
Eines von+-x:
Standard: ["+", "-", "x", ":"]
max_operations
optionalin den Einstellungen
number
number
Wie viele Rechenschritte eine Aufgabe aneinanderreihen darf.
Eines von123
Standard: 1
number_difficulty
optionalin den Einstellungen
number
number
Begrenzt die einzelnen Zahlen in einer Aufgabe. Von 5 bis 1000.
Nichts. Das ganze Rätsel entsteht aus seinen zwei Einstellungen.
Nutzt ersatzweise den Namen “Sudoku API”
Gut zu wissen
Schick keine items und kein sentence — size und difficulty sind die gesamte Eingabe.
Der Editor bietet die Schwierigkeit nur für 2x3, 3x3 und 3x4 an. Die API wendet sie auf jede Größe an, 2x2 und 4x4 eingeschlossen.
Einstellungen, die er liest
Feld
Typ
Was es macht
size
optionalin den Einstellungen
string
string
Die Größe eines Blocks, geschrieben als Zeilen mal Spalten — 3x3 ergibt das klassische 9x9-Raster. Der Endpunkt prüft nur, ob sich das als zwei Zahlen lesen lässt, bleib also bei den Größen, die der Editor anbietet.
Eines von2x22x33x33x44x4
Standard: "3x3"
difficulty_level
optionalin den Einstellungen
string
string
Wie viele Zahlen zu Beginn im Raster stehen bleiben.
POST/api/public/v1/fill-in-the-gap1 bis 50 in items
Inhalt
api_c_fill_in_the_gap
Nutzt ersatzweise den Namen “Fill in the gap API”
Gut zu wissen
Schreib den vollständigen Satz und setz Sternchen um jedes Wort, das wegfallen soll: "Water boils at *100* degrees." Mehrere Wörter innerhalb eines Paars sind eine Lücke. Ein Eintrag kann außerdem eine Anweisung tragen, die über dem Satz steht.
Beispielanfrage
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": "de",
"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."
}
]
}'
Erfolg
{
"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"
}
Ein Array aus Sätzen. Jedes Wort, das bestimmt werden soll, wird als [word](label) geschrieben.
Nutzt ersatzweise den Namen “Sentence analysis API”
Gut zu wissen
Schreib einen Satz als "The [dog](noun) [barks](verb)." Wörter ohne Tag werden angezeigt, aber nicht abgefragt. Die Bezeichnungen noun, verb, adjective und subject sieht jeder Spieler in seiner eigenen Sprache.
Einstellungen, die er liest
Feld
Typ
Was es macht
categories
optionalin den Einstellungen
string[]
string[]
Die Bezeichnungen, aus denen die Spieler wählen, in dieser Reihenfolge. Lässt du es weg, sind es die Bezeichnungen, die in den Sätzen vorkommen. Schick es, um eine Bezeichnung hinzuzufügen, die kein Wort trägt, oder um die Reihenfolge festzulegen.
Beispielanfrage
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": "de",
"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-puzzleMindestens 3 in items
Inhalt
api_c_logic_puzzle
Nutzt ersatzweise den Namen “Logic Puzzle API”
Gut zu wissen
Jede Kategorie braucht gleich viele Einträge, 3 bis 6, alle verschieden. Eine Kategorie kann als ordered markiert werden (Preise, Zeiten, Alter), optional mit einer unit. So kann der Generator Hinweise über mehr, weniger und um wie viel schreiben.
Einstellungen, die er liest
Feld
Typ
Was es macht
story
optionalin den Einstellungen
string
string
Die Hintergrundgeschichte, die über den Hinweisen steht.
difficulty
optionalin den Einstellungen
string
string
Welche Arten von Hinweisen der Generator verwenden darf.
Eines voneasymediumhard
Standard: "easy"
hints
optionalin den Einstellungen
boolean
boolean
Bietet eine Schaltfläche, die den nächsten Schritt zeigt.
Standard: true
auto_cross
optionalin den Einstellungen
boolean
boolean
Wer eine Zuordnung markiert, streicht den Rest ihrer Zeile und Spalte durch.
Standard: true
clue_mode
optionalin den Einstellungen
string
string
Wer die Hinweise schreibt, die die Spieler sehen: aus der Tabelle erzeugt, deine eigenen Sätze in free_clues oder keine.
Eines vongeneratedfreenone
Standard: "generated"
free_clues
optionalin den Einstellungen
string[]
string[]
Deine eigenen Hinweissätze, angezeigt wie geschrieben, bei clue_mode "free". Nichts prüft sie.
Beispielanfrage
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": "de",
"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 bis 50 in items
Inhalt
api_c_scavenger_hunt
Nutzt ersatzweise den Namen “Scavenger Hunt API”
Gut zu wissen
Ein Schritt ist ein Objekt mit title, description, code und optional accepted_codes (andere Schreibweisen, die zählen), url und link_text. Ein Code wird ohne Rücksicht auf Groß- und Kleinschreibung und Leerzeichen geprüft. Die Karte mit Markierungen kann nur im Editor hinzugefügt werden.
Beispielanfrage
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": "de",
"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 bis 50 in items
Inhalt
api_c_spatial_reasoning
Nutzt ersatzweise den Namen “Spatial Reasoning API”
Gut zu wissen
Objekte und Ziele sind square, triangle, circle, hexagon, pentagon, star, diamond oder heart. Beziehungen sind inside, outside, behind, in_front_of, right_of, left_of, above, below, same_color_as, different_color_from, larger_than und smaller_than. Eine Regel, die nie erfüllt werden kann, antwortet mit 400.
Ein Array aus Sätzen. Jeder listet die Wörter auf, die als Bilder gezeichnet werden; jedes andere Wort bleibt als seine Buchstaben stehen.
Nutzt ersatzweise den Namen “Rebus API”
Gut zu wissen
Ein Wort wird aus Teilen gezeichnet, die zusammen sein Schriftbild ergeben. Ein Teil hat die Buchstaben, für die er steht (text), ein emoji und shows: das Wort für das, was das Bild zeigt ("broom" für ein Bild, das für "room" steht). Puzzel rechnet die Buchstabenänderungen selbst aus. Ein Teil kann stattdessen ein Symbol sein, zum Beispiel 4 für "for".
Einstellungen, die er liest
Feld
Typ
Was es macht
rebus_commas
optionalin den Einstellungen
boolean
boolean
Zeichnet einen weggelassenen ersten oder letzten Buchstaben als Komma neben dem Bild.
Eine Bild-URL, im Feld image. Dieser Endpunkt nimmt keine items.
Nutzt ersatzweise den Namen “Jigsaw Game API”
Gut zu wissen
Die API erstellt immer ein Puzzle mit 4 mal 4 Teilen. Teilezahl, unregelmäßige Teile und glatte Ränder sind Einstellungen im Editor — rows oder columns hierher zu schicken bewirkt nichts.
Die URL wird so gespeichert, wie du sie geschickt hast, und die Datei wird nie kopiert. Sie muss also öffentlich erreichbar bleiben, solange die Aktivität gespielt wird.
Einstellungen, die er liest
Feld
Typ
Was es macht
image
erforderlich
string
string
Absolute URL des Bildes, das zerschnitten wird. Wird auf oberster Ebene geschickt, nicht in settings.
Eine Bild-URL, in settings. Dieser Endpunkt nimmt keine items.
Nutzt ersatzweise den Namen “Sliding Puzzle API”
Gut zu wissen
Anders als beim Puzzle liest dieser Endpunkt sein Bild aus settings.image. Ein image-Feld auf oberster Ebene wird ignoriert und der Aufruf antwortet mit 400.
Die URL wird so gespeichert, wie du sie geschickt hast, und die Datei wird nie kopiert. Sie muss also öffentlich erreichbar bleiben, solange die Aktivität gespielt wird.
Einstellungen, die er liest
Feld
Typ
Was es macht
image
erforderlichin den Einstellungen
string
string
Absolute URL des Bildes, das zerlegt wird. Anders als beim Puzzle steht es hier in settings.