One POST per activity type. Send your content as JSON, get back an activity in your Puzzel.org account and a URL you can hand to players or drop into an iframe.
Base URL
https://puzzel.org/api/public/v1
Auth
Key + email in the body
Endpoints
38 activity types
Quota
10 activities a day
Your first request
Nothing to install and no handshake: post a JSON body with your key, your email and your content. The response carries the new activity's key and the URL it plays at.
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": "en",
"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"
}
]
}'
Every example on this page is a complete, runnable request. Swap in your own key and content and it works as-is.
Authentication
There are no headers and no bearer token. Both credentials travel in the JSON body of every request, and the key is only accepted for the account that email belongs to.
Field
Type
What it does
account_api_key
required
string
string
Your account's API key. It goes in the body, not in a header.
email
required
string
string
The address your Puzzel.org account signs in with. The key is only valid together with it.
Your key sits on the account section of your dashboard, behind Show.
Treat the key like a password. It creates and overwrites activities in your account, so keep it server-side and out of anything a browser can read.
The request body
Every endpoint takes the same five fields. What differs is the content field underneath them: most take an array of items, a few take one sentence or one image, and sudoku takes nothing at all.
Field
Type
What it does
account_api_key
required
string
string
Your account's API key. It goes in the body, not in a header.
email
required
string
string
The address your Puzzel.org account signs in with. The key is only valid together with it.
title
optional
string
string
The name the activity gets in your dashboard. Leave it out and the endpoint uses its own fallback name.
language
optional
string
string
Only decides the locale in the URL you get back — it does not translate anything you send. Word search also reads it to switch its filler letters to Arabic when it is "ar".
Default: "en"
activity_key
optional
string
string
Leave it out to create a new activity. Pass the key of one you already own and that activity is rebuilt instead.
settings is an object of per-endpoint options. Which ones an endpoint reads is listed with it below; anything else you put there is ignored.
What comes back
A successful call answers 200 with the new activity's key and the URL it plays at. Anything else answers with success set to false and a single error string.
{
"success": false,
"error": "Invalid Email or API Key"
}
The url you get back is the embed view. Swap embed for play to open it full-page, or for build to open it in the builder — the key after p= stays the same.
Creating vs. updating
Send activity_key and the activity behind it is rebuilt in place: its content is replaced, its name and version stamp are refreshed, and the key itself stays the same — so links and embeds you already shared keep working. Results, folder placement and every setting the endpoint does not write itself are left as they were.
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 is applied on every update, its default included — leave it out and the activity is renamed to that endpoint's fallback name.
The setting blocks an endpoint writes itself are rewritten from scratch, so an update also resets those to the values you send, or to the endpoint's defaults.
You can only update activities your own account owns. Someone else's key answers 403.
An update costs the same as a create: one call off today's quota.
Rate limit
10
10 activities per account per day
Every successful call counts, creates and updates alike. Go over and the next request answers 429 until the counter is cleared.
The counter is wiped once a day by a scheduled job, not on a rolling 24-hour window.
Errors
Errors always arrive as JSON with the same two fields, never as an HTML page. The error string is written to be read by a person — it names the field or the limit that failed.
Status
What it means
400
Bad Request
Something in the body is missing, malformed or out of range. The message names the field.
401
Unauthorized
The email is unknown, or the key does not belong to that account.
403
Forbidden
The activity_key you sent belongs to a different account.
429
Too Many Requests
Today's quota is used up. It clears once a day.
500
Server Error
The generator could not build a puzzle from what you sent — usually too few words, or words that cannot be fitted together.
Endpoints
One path per activity type, all POST, all under the same base URL. Each one lists the content it needs, the settings it reads and a request you can run.
Words & letters
F
I
G
A
T
R
I
P
M
Crossword puzzle
Interlocks your answers into a grid and numbers the clues for you.
An array of words. Each entry pairs the answer with the clue that points at it.
Falls back to the name “Crossword API”
Worth knowing
Answers shorter than two characters are dropped before the grid is built, and at least two have to survive that.
Answers are upper-cased and the generator gets twenty attempts to fit them. If it cannot place a single word the call answers 500.
Settings it reads
Field
Type
What it does
hidden_solution
optionalin settings
string
string
An optional bonus word. Its letters are marked in cells of the finished grid, for players to collect once the crossword is solved, so every letter of it has to appear in the answers.
Example request
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": "en",
"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"
}
]
}'
POST/api/public/v1/typing-practice1 to 50 in items
Content
api_c_typing_practice
Falls back to the name “Typing Practice API”
Example request
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": "en",
"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"
}
]
}'
Success
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
An array of theme words. Together with the spangram their letters have to fill a board exactly.
Falls back to the name “Strands API”
Worth knowing
The letters of all words and the spangram together have to come to exactly 30, 35, 36, 40, 42, 45, 48, 49, 50, 54, 56, 60, 63, 64, 70, 72 or 80. Any other count answers 400 and says how many letters to add or remove.
Settings it reads
Field
Type
What it does
theme
optionalin settings
string
string
The riddle shown above the grid. Left out, players see the title.
spangram
optionalin settings
string
string
The word or phrase that names the theme and crosses the board from one edge to the other.
An entry is an object with an answer, and optionally aliases (other spellings that count), a description (the hint) and a group. Capitals, accents and punctuation are ignored when a name is checked.
Settings it reads
Field
Type
What it does
list_match_mode
optionalin settings
string
string
Whether a name counts the moment it is typed, or only on Enter.
One ofwhile_typingon_enter
Default: "while_typing"
list_slot_hint
optionalin settings
string
string
What an empty slot gives away: nothing, the length of the name, its first letter, or the hint you wrote.
One ofnonelengthfirst_letterhint
Default: "none"
list_arrange
optionalin settings
string
string
One column per group, or one list.
One ofgroupsone_list
Default: "groups"
list_allow_give_up
optionalin settings
boolean
boolean
Shows a give-up button that ends the run and reveals what was missed.
{
"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"
}
An array of pairs. Each pair holds the two cards that belong together.
Falls back to the name “Memory Game API”
Worth knowing
A card is an object with a type and a value. Use "text" for words, or "image", "audio", "youtube" or "link" with a URL in value, and add alt for a description.
A card is an object with a type and a value. Use "text" for words, or "image", "audio", "youtube" or "link" with a URL in value, and add alt for a description.
The endpoint stores as many cards as you send, so send exactly two per entry — front, then back.
A card is an object with a type and a value. Use "text" for words, or "image", "audio", "youtube" or "link" with a URL in value, and add alt for a description.
POST/api/public/v1/categorizeAt least 2 in items · at most 60 cards in all
Content
An array of categories, each with a name and the cards that belong in it.
Falls back to the name “Categorize Game API”
Worth knowing
A category sent without a name is saved as “Untitled Category”, so always send one.
A card is an object with a type and a value. Use "text" for words, or "image", "audio", "youtube" or "link" with a URL in value, and add alt for a description.
POST/api/public/v1/reorderAt least 1 in items · at most 60 cards in all
Content
An array of sequences. Each holds its cards in the correct order.
Falls back to the name “Reorder Game API”
Worth knowing
The order you send is stored as the correct order — number one first.
A card is an object with a type and a value. Use "text" for words, or "image", "audio", "youtube" or "link" with a URL in value, and add alt for a description.
An array of items the cards are drawn from. Send clearly more than one card has squares, so that cards differ.
Falls back to the name “Bingo API”
Worth knowing
An item is an object with a value, and optionally a type ("text", "image" or "audio" with a URL in value), a description (the clue the host reads out in clues mode) and alt.
Settings it reads
Field
Type
What it does
mode
optionalin settings
string
string
What fills the squares: your items, your items called by their clue, or plain numbers (which need no items).
One ofitemscluesnumbers
Default: "items"
rows
optionalin settings
number
number
Rows on each card, 2 to 5.
Default: 3
columns
optionalin settings
number
number
Columns on each card, 2 to 5.
Default: 3
highest_number
optionalin settings
number
number
In numbers mode, cards are filled from 1 up to this number, 100 at most. A plan feature: without a plan it stays 50.
Default: 50
Example request
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": "en",
"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"
}
An array of keys. The keys in the code carry their place in it.
Falls back to the name “Keypad API”
Worth knowing
A key is an object with a value, and optionally a type ("text", "image" or "audio" with a URL in value), alt, and code_position: its place in the code, 1 first. A key can be in the code once, and at least one key has to be.
Settings it reads
Field
Type
What it does
instructions
optionalin settings
string
string
The question or riddle the code answers, shown with the pad.
force_solution_in_correct_order
optionalin settings
boolean
boolean
The keys have to be pressed in order. Off, any order of the right keys opens the lock.
Default: false
randomize_order
optionalin settings
boolean
boolean
Each player gets the keys in a shuffled arrangement.
An array of sets. Each has a name and exactly four cards.
Falls back to the name “Quartets API”
Worth knowing
A card is a name, or an object with a name and a description (the fact shown on it). No card name may appear twice in the game: players ask for cards by name.
Settings it reads
Field
Type
What it does
type
optionalin settings
string
string
A plain game, or a learning game in which every card shows a fact. Left out, it is learn when any card has a description.
One ofnormallearn
Example request
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": "en",
"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"
}
}'
Success
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/quartets/embed?p=-Nq8sample_activity_key",
"message": "Quartets game created successfully"
}
An array of questions. Multiple-choice questions carry their answers; open questions carry the answer you accept.
Falls back to the name “Quiz API”
Worth knowing
question_type is "multiple_choice", where the right option carries isCorrect true; "true_false", the same with exactly two options, true first and false second; or "open_answer", which uses correct_answer instead. Left out, it is treated as multiple choice.
The quiz endpoint passes settings straight through as activity setting blocks, so it is not a place for loose options — adjust the quiz in the builder afterwards.
Example request
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": "en",
"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", where the right option carries isCorrect true; "true_false", the same with exactly two options, true first and false second; or "open_answer", which uses correct_answer instead. Left out, it is treated as multiple choice.
Settings it reads
Field
Type
What it does
number_of_tiles
optionalin settings
number
number
How many tiles the board has. Between 10 and 75.
Default: 30
game_mode
optionalin settings
string
string
Whether players race to the finish or collect items along the way.
One ofrace_to_finishcollect_items
Default: "race_to_finish"
Example request
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": "en",
"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"
}
}'
Success
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
An array of multiple-choice or true-false questions, exactly the shape the quiz endpoint takes. Open questions are refused: a door needs an answer written on it.
Falls back to the name “Maze API”
Settings it reads
Field
Type
What it does
maze_width
optionalin settings
string
string
How the halls are laid out: one column, a square, or wider.
One ofnarrownormalwide
Default: "normal"
maze_corridors
optionalin settings
string
string
How much maze lies between two questions.
One ofshortnormallong
Default: "normal"
maze_fog
optionalin settings
string
string
Show the whole maze, or only what the player has been next to.
One ofoffnear
Default: "off"
maze_wrong_door_pause
optionalin settings
string
string
How long the doors stay shut after a wrong one.
One ofnoneshortlong
Default: "short"
maze_walk_there
optionalin settings
boolean
boolean
Offers a button that walks the token to the next hall.
Default: false
maze_seed
optionalin settings
string
string
The seed the maze is generated from. The same seed and questions give the same maze; left out, a new one is drawn.
Example request
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": "en",
"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"
}
}'
An array of categories, left to right. Each has a name and its clues from the top row down.
Falls back to the name “Jeopardy API”
Worth knowing
A clue is a question as the quiz endpoint takes it, open_answer unless it says otherwise, with correct_answer and optionally aliases. It may also carry value (its own worth) and daily_double. null leaves a cell empty.
Settings it reads
Field
Type
What it does
jeopardy_buzzer_mode
optionalin settings
string
string
Who plays how: the host runs it from the console, players buzz from their phones, or each player works the board alone.
One ofhostphonessolo
Default: "host"
jeopardy_contestants
optionalin settings
string
string
Whether the console speaks of teams or of players.
One ofteamsplayers
Default: "teams"
jeopardy_value_step
optionalin settings
number
number
What a row is worth: a clue is worth this times its row number. From 50 to 500, in steps of 50.
Default: 100
jeopardy_answer_time
optionalin settings
number
number
Seconds to answer once a clue is open, up to 300. 0 is no clock.
Default: 20
jeopardy_wrong_answer_costs
optionalin settings
boolean
boolean
A wrong answer takes the clue's value off the score.
Default: false
jeopardy_reveal_on_timeout
optionalin settings
boolean
boolean
The board shows the answer itself when the clock runs out.
Default: false
jeopardy_require_question_form
optionalin settings
boolean
boolean
Reminds players to answer in the form of a question.
Default: false
Example request
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": "en",
"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 to 50 in items
Content
api_c_interactive_video
Falls back to the name “Interactive Video API”
Worth knowing
A popup is an object with time (seconds, or "1:23"), kind ("question" unless it says "note", "think" or "chapter") and description. A question is a question as the quiz endpoint takes it, and may carry rewind_to: where a wrong answer replays from.
Settings it reads
Field
Type
What it does
video_url
requiredin settings
string
string
The video: a YouTube, Vimeo or Bunny Stream page, or a direct link to an mp4, webm or mov file.
video_duration
optionalin settings
number
number
The length of the video in seconds. When given, a popup past the end is refused.
Example request
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": "en",
"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
}
}'
Success
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/interactive-video/embed?p=-Nq8sample_activity_key",
"message": "Interactive video created successfully"
}
Nothing. The whole puzzle comes out of its two settings.
Falls back to the name “Sudoku API”
Worth knowing
Send no items and no sentence — size and difficulty are the entire input.
The builder only offers the difficulty for 2x3, 3x3 and 3x4. The API applies it to every size, 2x2 and 4x4 included.
Settings it reads
Field
Type
What it does
size
optionalin settings
string
string
The size of one block, written as rows by columns — 3x3 gives the classic 9x9 grid. The endpoint only checks that it parses as two numbers, so stay with the sizes the builder offers.
One of2x22x33x33x44x4
Default: "3x3"
difficulty_level
optionalin settings
string
string
How many numbers are left on the board to start from.
POST/api/public/v1/fill-in-the-gap1 to 50 in items
Content
api_c_fill_in_the_gap
Falls back to the name “Fill in the gap API”
Worth knowing
Write the full sentence and put asterisks around each word to leave out: "Water boils at *100* degrees." Several words inside one pair are one gap. An entry may also carry an instruction shown above the sentence.
Example request
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": "en",
"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."
}
]
}'
Success
{
"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"
}
An array of sentences. Each word to label is written as [word](label).
Falls back to the name “Sentence analysis API”
Worth knowing
Write a sentence as "The [dog](noun) [barks](verb)." Words without a tag are shown and not asked. The labels noun, verb, adjective and subject are shown to each player in their own language.
Settings it reads
Field
Type
What it does
categories
optionalin settings
string[]
string[]
The labels players choose from, in order. Left out, it is the labels used in the sentences. Send it to add a label no word carries, or to fix the order.
Example request
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": "en",
"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-puzzleAt least 3 in items
Content
api_c_logic_puzzle
Falls back to the name “Logic Puzzle API”
Worth knowing
Every category needs the same number of items, 3 to 6, all different. One category may be marked ordered (prices, times, ages) with an optional unit, which lets the generator write clues about more, less and how much.
Settings it reads
Field
Type
What it does
story
optionalin settings
string
string
The background story shown above the clues.
difficulty
optionalin settings
string
string
Which kinds of clue the generator may use.
One ofeasymediumhard
Default: "easy"
hints
optionalin settings
boolean
boolean
Offers a button that shows the next step.
Default: true
auto_cross
optionalin settings
boolean
boolean
Marking a match crosses out the rest of its row and column.
Default: true
clue_mode
optionalin settings
string
string
Who writes the clues players see: generated from the table, your own sentences in free_clues, or none.
One ofgeneratedfreenone
Default: "generated"
free_clues
optionalin settings
string[]
string[]
Your own clue sentences, shown as written, with clue_mode "free". Nothing checks them.
Example request
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": "en",
"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"
}
}'
A step is an object with title, description, code and optionally accepted_codes (other spellings that count), url and link_text. A code is checked without regard to capitals and spaces. The map with pins can only be added in the builder.
Example request
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": "en",
"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 to 50 in items
Content
api_c_spatial_reasoning
Falls back to the name “Spatial Reasoning API”
Worth knowing
Objects and targets are square, triangle, circle, hexagon, pentagon, star, diamond or heart. Relations are inside, outside, behind, in_front_of, right_of, left_of, above, below, same_color_as, different_color_from, larger_than and smaller_than. A rule that can never be met answers 400.
An array of sentences. Each lists the words drawn as pictures; every other word stays as its letters.
Falls back to the name “Rebus API”
Worth knowing
A word is drawn from parts that together spell it. A part has the letters it stands for (text), an emoji, and shows: the word for what the picture shows ("broom" for a picture standing for "room"). Puzzel works out the letter changes. A part may be a symbol instead, such as 4 for "for".
Settings it reads
Field
Type
What it does
rebus_commas
optionalin settings
boolean
boolean
Draws a dropped first or last letter as a comma beside the picture.