{
	"api_kicker": "Developer API",
	"api_title": "Build activities from your own system",
	"api_intro": "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.",
	"api_search_placeholder": "Search endpoints, fields and settings",
	"api_search_results": "matching this page",
	"api_search_empty": "Nothing on this page matches that. Try an endpoint name, a field like activity_key, or a status code.",
	"api_search_clear": "Clear search",
	"api_nav_guide": "Getting started",
	"api_nav_endpoints": "Endpoints",
	"api_toc_label": "On this page",
	"api_hero_base_label": "Base URL",
	"api_hero_method_label": "Method",
	"api_hero_method_value": "POST, JSON body",
	"api_hero_auth_label": "Auth",
	"api_hero_auth_value": "Key + email in the body",
	"api_hero_limit_label": "Quota",
	"api_hero_limit_value": "[limit] activities a day",
	"api_hero_count_label": "Endpoints",
	"api_hero_count_value": "[count] activity types",
	"api_s_quickstart_title": "Your first request",
	"api_s_quickstart_body": "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.",
	"api_s_quickstart_note": "Every example on this page is a complete, runnable request. Swap in your own key and content and it works as-is.",
	"api_s_auth_title": "Authentication",
	"api_s_auth_body": "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.",
	"api_s_auth_where": "Your key sits on the account section of your dashboard, behind Show.",
	"api_s_auth_where_link": "Open my API key",
	"api_s_auth_premium": "API keys are handed out when a subscription starts, so a free account does not have one yet.",
	"api_s_auth_plans": "See the plans",
	"api_s_auth_secret": "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.",
	"api_prefill_kicker": "Examples",
	"api_prefill_label": "Fill the examples with my own API key",
	"api_prefill_signed_out": "Sign in and your key drops into every example on this page.",
	"api_prefill_sign_in": "Sign in",
	"api_prefill_none": "No API key on this account yet.",
	"api_prefill_warning": "Every example now holds your real key. Don't paste one into a chat, an issue or a public repo.",
	"api_s_request_title": "The request body",
	"api_s_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.",
	"api_s_request_settings": "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.",
	"api_col_field": "Field",
	"api_col_type": "Type",
	"api_col_notes": "What it does",
	"api_col_status": "Status",
	"api_col_meaning": "What it means",
	"api_required": "required",
	"api_optional": "optional",
	"api_default_label": "Default",
	"api_allowed_label": "One of",
	"api_in_settings": "in settings",
	"api_f_account_api_key": "Your account's API key. It goes in the body, not in a header.",
	"api_f_email": "The address your Puzzel.org account signs in with. The key is only valid together with it.",
	"api_f_title": "The name the activity gets in your dashboard. Leave it out and the endpoint uses its own fallback name.",
	"api_f_language": "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\".",
	"api_f_activity_key": "Leave it out to create a new activity. Pass the key of one you already own and that activity is rebuilt instead.",
	"api_f_sentence_cryptogram": "The sentence to encrypt. Players decode it character by character.",
	"api_f_sentence_calculation": "The sentence players uncover by solving the sums.",
	"api_f_image": "Absolute URL of the picture to cut up. Sent at the top level, not inside settings.",
	"api_f_image_setting": "Absolute URL of the picture to scramble. Unlike the jigsaw's, this one lives inside settings.",
	"api_s_response_title": "What comes back",
	"api_s_response_body": "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.",
	"api_response_success": "Success",
	"api_response_error": "Failure",
	"api_s_response_urls": "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.",
	"api_s_updating_title": "Creating vs. updating",
	"api_s_updating_body": "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.",
	"api_s_updating_own": "You can only update activities your own account owns. Someone else's key answers 403.",
	"api_s_updating_name": "title is applied on every update, its default included — leave it out and the activity is renamed to that endpoint's fallback name.",
	"api_s_updating_settings": "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.",
	"api_s_updating_quota": "An update costs the same as a create: one call off today's quota.",
	"api_s_limits_title": "Rate limit",
	"api_s_limits_body": "Every successful call counts, creates and updates alike. Go over and the next request answers 429 until the counter is cleared.",
	"api_s_limits_counter": "[limit] activities per account per day",
	"api_s_limits_reset": "The counter is wiped once a day by a scheduled job, not on a rolling 24-hour window.",
	"api_s_errors_title": "Errors",
	"api_s_errors_body": "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.",
	"api_err_400": "Something in the body is missing, malformed or out of range. The message names the field.",
	"api_err_401": "The email is unknown, or the key does not belong to that account.",
	"api_err_403": "The activity_key you sent belongs to a different account.",
	"api_err_429": "Today's quota is used up. It clears once a day.",
	"api_err_500": "The generator could not build a puzzle from what you sent — usually too few words, or words that cannot be fitted together.",
	"api_endpoints_title": "Endpoints",
	"api_endpoints_intro": "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.",
	"api_group_words": "Words & letters",
	"api_group_cards": "Cards & pairs",
	"api_group_questions": "Questions & answers",
	"api_group_text": "Sentences & numbers",
	"api_group_images": "Pictures",
	"api_ep_content_label": "Content",
	"api_ep_settings_label": "Settings it reads",
	"api_ep_settings_none": "This endpoint reads no settings.",
	"api_ep_example_label": "Example request",
	"api_ep_notes_label": "Worth knowing",
	"api_ep_min_items": "At least [count] in items",
	"api_ep_no_items": "Takes no items",
	"api_ep_default_title": "Falls back to the name “[title]”",
	"api_copy": "Copy",
	"api_copied": "Copied",
	"api_toast_copied": "Copied to clipboard",
	"api_ep_open_builder": "Open the builder",
	"api_ep_back_to_top": "Back to top",
	"api_e_crossword": "Interlocks your answers into a grid and numbers the clues for you.",
	"api_c_crossword": "An array of words. Each entry pairs the answer with the clue that points at it.",
	"api_note_crossword_length": "Answers shorter than two characters are dropped before the grid is built, and at least two have to survive that.",
	"api_note_crossword_layout": "Answers are upper-cased and the generator gets twenty attempts to fit them. If it cannot place a single word the call answers 500.",
	"api_e_wordseeker": "Hides your words in a letter grid, in the directions and the shape you choose.",
	"api_c_wordseeker": "An array of words. The clue text becomes the word list players work from.",
	"api_note_wordseeker_length": "Answers under two characters are dropped, and every answer is upper-cased before it goes into the grid.",
	"api_note_wordseeker_arabic": "The grid is padded with Latin letters unless language is \"ar\", which switches the filler to Arabic.",
	"api_set_wordseeker_hidden_solution": "The leftover letters spell this out. Setting it also tells the generator to fit the solution first rather than pack in as many words as it can.",
	"api_set_wordseeker_directions": "Which ways a word may run. Leave it out and words run east, south-east and south only.",
	"api_set_wordseeker_template": "Cuts the grid into a shape instead of leaving it square.",
	"api_e_acrostic": "Stacks your answers so one column spells a hidden word.",
	"api_c_acrostic": "An array of words. Between them they have to supply every letter of the hidden word.",
	"api_set_acrostic_hidden_solution": "The word the highlighted column spells out. This endpoint will not run without it.",
	"api_note_acrostic_letters": "If the answers cannot supply the letters the solution needs, the call answers 500 rather than saving a half-built grid.",
	"api_note_acrostic_order": "The generator reorders your answers to make the column work, so the order you send is not the order players see.",
	"api_e_word-scramble": "Jumbles each answer's letters for players to sort out.",
	"api_c_word-scramble": "An array of words. The clue is shown next to the jumbled letters.",
	"api_set_scramble_hidden_solution": "An optional bonus word players enter once the rest is solved.",
	"api_note_scramble_random": "Activities made through the API always have the shuffle-the-order setting on, so the order you send is not the order players get.",
	"api_e_hangman": "Turns your words or phrases into guess-the-letter rounds.",
	"api_c_hangman": "An array of words or short phrases. The clue is the hint players see.",
	"api_e_wordle": "Makes a guess-the-word game out of every word you send.",
	"api_c_wordle": "An array of words. Players get one round per word.",
	"api_note_wordle_dictionary": "Made with the check-that-guesses-are-real-words setting on. Switch it off in the builder if your words are names or invented.",
	"api_e_typing-practice": "Turns sentences into typing drills.",
	"api_c_typing-practice": "An array of words or sentences to type out. The clue field doubles as an instruction.",
	"api_e_wheel-of-fortune": "Fills a spinning wheel with your own segments.",
	"api_c_wheel-of-fortune": "An array of segments. Each answer becomes one wedge.",
	"api_note_wheel_outcome": "Made with “show the outcome in the wheel only”, so the result is read off the wheel rather than announced beside it.",
	"api_e_memory": "Face-down cards to turn over and match in pairs.",
	"api_c_memory": "An array of pairs. Each pair holds the two cards that belong together.",
	"api_note_cards_media": "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.",
	"api_e_matching-pairs": "Two columns of cards to drag together.",
	"api_c_matching-pairs": "An array of pairs. The first card of each pair lands on one side, its partner on the other.",
	"api_e_flash-cards": "Two-sided cards to flip through.",
	"api_c_flash-cards": "An array of cards. The first card is the front, the second the back.",
	"api_note_flashcards_sides": "The endpoint stores as many cards as you send, so send exactly two per entry — front, then back.",
	"api_e_categorize": "Cards to sort into the bucket they belong in.",
	"api_c_categorize": "An array of categories, each with a name and the cards that belong in it.",
	"api_note_categorize_name": "A category sent without a name is saved as “Untitled Category”, so always send one.",
	"api_e_reorder": "A sequence players have to put back in order.",
	"api_c_reorder": "An array of sequences. Each holds its cards in the correct order.",
	"api_note_reorder_order": "The order you send is stored as the correct order — number one first.",
	"api_e_quiz": "Multiple-choice and open questions, scored as players go.",
	"api_c_quiz": "An array of questions. Multiple-choice questions carry their answers; open questions carry the answer you accept.",
	"api_note_question_types": "question_type is either \"multiple_choice\", where the right option carries isCorrect true, or \"open_answer\", which uses correct_answer instead. Left out, it is treated as multiple choice.",
	"api_note_quiz_settings": "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.",
	"api_e_board-game": "A board to race across, with your questions on the tiles.",
	"api_c_board-game": "An array of questions, exactly the shape the quiz endpoint takes.",
	"api_set_board_tiles": "How many tiles the board has. Between 10 and 75.",
	"api_set_board_mode": "Whether players race to the finish or collect items along the way.",
	"api_e_cryptogram": "Turns a sentence into a code to crack, one character at a time.",
	"api_c_cryptogram": "One sentence, in the sentence field. This endpoint takes no items.",
	"api_note_cryptogram_no_items": "Anything you send in items is ignored — the puzzle is built from the sentence alone.",
	"api_set_cryptogram_helpers": "Which characters are given away for free as a way in: none, the most common ones, the vowels, or the ones you list yourself.",
	"api_set_cryptogram_character_list": "The alphabet the cipher is built from. Left empty, the encryption picks its own.",
	"api_set_cryptogram_extra_letters": "The characters given away when helpers is \"custom\". Ignored for the other helper modes.",
	"api_set_cryptogram_hide_unused": "Leaves characters the sentence never uses out of the key.",
	"api_e_calculation": "Hides a sentence behind sums — solve the sum, reveal the letter.",
	"api_c_calculation": "One sentence, in the sentence field. This endpoint takes no items.",
	"api_set_calc_difficulty": "The highest answer a sum is allowed to have.",
	"api_set_calc_operators": "Which operations may appear. x is multiply, : is divide.",
	"api_set_calc_max_operations": "How many operations one sum may chain together.",
	"api_set_calc_number_difficulty": "Caps the individual numbers inside a sum. Anywhere from 5 to 1000.",
	"api_note_calculation_fit": "If the constraints are too tight to encode the sentence, the call answers 400 asking you to loosen them rather than saving a partial puzzle.",
	"api_e_sudoku": "Generates a solved grid, then takes numbers back out.",
	"api_c_sudoku": "Nothing. The whole puzzle comes out of its two settings.",
	"api_note_sudoku_no_items": "Send no items and no sentence — size and difficulty are the entire input.",
	"api_note_sudoku_difficulty_sizes": "The builder only offers the difficulty for 2x3, 3x3 and 3x4. The API applies it to every size, 2x2 and 4x4 included.",
	"api_set_sudoku_size": "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.",
	"api_set_sudoku_difficulty": "How many numbers are left on the board to start from.",
	"api_e_jigsaw": "Cuts a picture into pieces to drag back together.",
	"api_c_jigsaw": "One image URL, in the image field. This endpoint takes no items.",
	"api_note_jigsaw_grid": "The API always makes a 4 by 4 jigsaw. Piece count, irregular pieces and flat edges are builder settings — sending rows or columns here does nothing.",
	"api_note_image_reachable": "The URL is stored as you sent it and the file is never copied, so it has to stay publicly reachable for as long as the activity is played.",
	"api_e_slidingpuzzle": "Scrambles a picture into tiles that slide into place.",
	"api_c_slidingpuzzle": "One image URL, inside settings. This endpoint takes no items.",
	"api_note_sliding_image_slot": "Unlike the jigsaw, this endpoint reads its picture from settings.image. A top-level image field is ignored and the call answers 400.",
	"api_help_title": "Something not behaving?",
	"api_help_body": "Send the request you tried and the error you got back and you'll get a real answer, from the person who wrote the endpoint.",
	"api_help_cta": "Email support"
}
