Um POST para cada tipo de atividade. Envie seu conteúdo em JSON e receba de volta uma atividade na sua conta do Puzzel.org e uma URL que você pode entregar aos jogadores ou colocar em um iframe.
URL base
https://puzzel.org/api/public/v1
Autenticação
Chave + e-mail no corpo
Endpoints
20 tipos de atividade
Cota
10 atividades por dia
Sua primeira requisição
Nada para instalar e nenhum handshake: envie um corpo JSON com sua chave, seu e-mail e seu conteúdo. A resposta traz a chave da nova atividade e a URL onde ela é jogada.
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": "br",
"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"
}
]
}'
Todo exemplo nesta página é uma requisição completa e executável. Basta trocar pela sua própria chave e conteúdo, e funciona sem alterações.
Autenticação
Não há headers nem bearer token. As duas credenciais viajam no corpo JSON de cada requisição, e a chave só é aceita para a conta à qual aquele e-mail pertence.
Campo
Tipo
O que faz
account_api_key
obrigatório
string
string
A chave de API da sua conta. Ela vai no corpo, não em um header.
email
obrigatório
string
string
O endereço com o qual sua conta do Puzzel.org entra. A chave só é válida junto com ele.
Sua chave fica na seção de conta do seu painel, atrás de Mostrar.
Trate a chave como uma senha. Ela cria e sobrescreve atividades na sua conta, então mantenha-a no servidor e fora de qualquer coisa que um navegador possa ler.
O corpo da requisição
Todo endpoint recebe os mesmos cinco campos. O que muda é o campo de conteúdo abaixo deles: a maioria recebe um array de items, alguns recebem uma sentence ou uma image, e o sudoku não recebe nada.
Campo
Tipo
O que faz
account_api_key
obrigatório
string
string
A chave de API da sua conta. Ela vai no corpo, não em um header.
email
obrigatório
string
string
O endereço com o qual sua conta do Puzzel.org entra. A chave só é válida junto com ele.
title
opcional
string
string
O nome que a atividade recebe no seu painel. Deixe de fora e o endpoint usa seu próprio nome padrão.
language
opcional
string
string
Decide apenas o locale na URL que você recebe de volta — não traduz nada do que você envia. O caça-palavras também usa esse campo para trocar as letras de preenchimento para árabe quando o valor é "ar".
Padrão: "en"
activity_key
opcional
string
string
Deixe de fora para criar uma nova atividade. Informe a chave de uma que você já possui e essa atividade é reconstruída em vez disso.
settings é um objeto com opções específicas de cada endpoint. Quais delas um endpoint lê está listado logo abaixo; qualquer outra coisa que você colocar ali é ignorada.
O que volta
Uma chamada bem-sucedida responde 200 com a chave da nova atividade e a URL onde ela é jogada. Qualquer outra coisa responde com success definido como false e uma única string de erro.
{
"success": false,
"error": "Invalid Email or API Key"
}
A url que você recebe é a visualização de incorporação. Troque embed por play para abri-la em página inteira, ou por build para abri-la no editor — a chave depois de p= permanece a mesma.
Criar x atualizar
Envie activity_key e a atividade por trás dela é reconstruída no lugar: o conteúdo é substituído, o nome e o carimbo de versão são atualizados, e a própria chave permanece a mesma — então links e incorporações que você já compartilhou continuam funcionando. Resultados, posição na pasta e toda configuração que o endpoint não escreve por conta própria permanecem como estavam.
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 é aplicado em toda atualização, inclusive seu padrão — deixe de fora e a atividade é renomeada para o nome padrão daquele endpoint.
Os blocos de configuração que um endpoint escreve por conta própria são reescritos do zero, então uma atualização também os redefine para os valores que você envia, ou para os padrões do endpoint.
Você só pode atualizar atividades que a sua própria conta possui. A chave de outra pessoa responde 403.
Uma atualização custa o mesmo que uma criação: uma chamada a menos na cota de hoje.
Limite de taxa
10
10 atividades por conta por dia
Toda chamada bem-sucedida conta, tanto criações quanto atualizações. Ultrapasse o limite e a próxima requisição responde 429 até o contador ser zerado.
O contador é zerado uma vez por dia por uma tarefa agendada, não em uma janela contínua de 24 horas.
Erros
Erros sempre chegam como JSON com os mesmos dois campos, nunca como uma página HTML. A string de erro é escrita para ser lida por uma pessoa — ela nomeia o campo ou o limite que falhou.
Status
O que significa
400
Bad Request
Algo no corpo está faltando, malformado ou fora do intervalo. A mensagem nomeia o campo.
401
Unauthorized
O e-mail é desconhecido, ou a chave não pertence àquela conta.
403
Forbidden
A activity_key que você enviou pertence a uma conta diferente.
429
Too Many Requests
A cota de hoje foi esgotada. Ela é zerada uma vez por dia.
500
Server Error
O gerador não conseguiu montar um passatempo a partir do que você enviou — geralmente poucas palavras, ou palavras que não se encaixam.
Endpoints
Um caminho para cada tipo de atividade, todos POST, todos sob a mesma URL base. Cada um lista o conteúdo que precisa, as configurações que lê e uma requisição que você pode executar.
Palavras e letras
F
I
G
A
T
R
I
P
M
Palavras cruzadas
Encaixa suas respostas em uma grade e numera as definições para você.
Um array de palavras. Cada item combina a resposta com a definição que aponta para ela.
Usa como padrão o nome “Crossword API”
Vale saber
Respostas com menos de dois caracteres são descartadas antes da grade ser montada, e pelo menos duas precisam sobrar depois disso.
As respostas são colocadas em maiúsculas e o gerador tem vinte tentativas para encaixá-las. Se não conseguir posicionar uma única palavra, a chamada responde 500.
Exemplo de requisição
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": "br",
"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/wordseekerPelo menos 2 em items
Conteúdo
Um array de palavras. O texto da definição se torna a lista de palavras que os jogadores usam.
Usa como padrão o nome “Wordseeker API”
Vale saber
Respostas com menos de dois caracteres são descartadas, e toda resposta é colocada em maiúsculas antes de entrar na grade.
A grade é preenchida com letras latinas, a menos que language seja "ar", o que troca o preenchimento para árabe.
Configurações que lê
Campo
Tipo
O que faz
hidden_solution
opcionalem settings
string
string
As letras restantes formam isso. Defini-lo também diz ao gerador para encaixar a solução primeiro, em vez de tentar caber o máximo de palavras possível.
directions
opcionalem settings
string[]
string[]
Em quais direções uma palavra pode correr. Deixe de fora e as palavras correm apenas para leste, sudeste e sul.
Um dewesteastnorthsouthnorthwestnortheastsouthwestsoutheast
Padrão: ["east", "southeast", "south"]
template
opcionalem settings
string
string
Recorta a grade em um formato, em vez de deixá-la quadrada.
Um desquarecirclecrossdiamondpyramidsmileystarcross_plus
Exemplo de requisição
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": "br",
"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"
}
}'
POST/api/public/v1/word-scramblePelo menos 1 em items
Conteúdo
api_c_word_scramble
Usa como padrão o nome “Word Scramble API”
Vale saber
Atividades criadas pela API sempre têm a configuração de embaralhar a ordem ativada, então a ordem que você envia não é a ordem que os jogadores recebem.
Configurações que lê
Campo
Tipo
O que faz
hidden_solution
opcionalem settings
string
string
Uma palavra bônus opcional que os jogadores digitam depois de resolver o restante.
Exemplo de requisição
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": "br",
"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"
}
}'
POST/api/public/v1/typing-practicePelo menos 1 em items
Conteúdo
api_c_typing_practice
Usa como padrão o nome “Typing Practice API”
Exemplo de requisição
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": "br",
"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"
}
]
}'
Sucesso
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Um array de pares. Cada par contém os dois cartões que combinam entre si.
Usa como padrão o nome “Memory Game API”
Vale saber
Um cartão é um objeto com um type e um value. Use "text" para palavras, ou "image", "audio", "youtube" ou "link" com uma URL em value, e adicione alt para uma descrição.
POST/api/public/v1/matching-pairsPelo menos 2 em items
Conteúdo
api_c_matching_pairs
Usa como padrão o nome “Matching Game API”
Vale saber
Um cartão é um objeto com um type e um value. Use "text" para palavras, ou "image", "audio", "youtube" ou "link" com uma URL em value, e adicione alt para uma descrição.
POST/api/public/v1/flash-cardsPelo menos 1 em items
Conteúdo
api_c_flash_cards
Usa como padrão o nome “Flash Cards API”
Vale saber
O endpoint armazena quantos cartões você enviar, então envie exatamente dois por item — frente, depois verso.
Um cartão é um objeto com um type e um value. Use "text" para palavras, ou "image", "audio", "youtube" ou "link" com uma URL em value, e adicione alt para uma descrição.
POST/api/public/v1/categorizePelo menos 2 em items
Conteúdo
Um array de categorias, cada uma com um nome e os cartões que pertencem a ela.
Usa como padrão o nome “Categorize Game API”
Vale saber
Uma categoria enviada sem nome é salva como “Untitled Category”, então sempre envie um.
Um cartão é um objeto com um type e um value. Use "text" para palavras, ou "image", "audio", "youtube" ou "link" com uma URL em value, e adicione alt para uma descrição.
Um array de sequências. Cada uma contém seus cartões na ordem correta.
Usa como padrão o nome “Reorder Game API”
Vale saber
A ordem que você envia é armazenada como a ordem correta — o número um primeiro.
Um cartão é um objeto com um type e um value. Use "text" para palavras, ou "image", "audio", "youtube" ou "link" com uma URL em value, e adicione alt para uma descrição.
Um array de perguntas. Perguntas de múltipla escolha trazem suas respostas; perguntas abertas trazem a resposta que você aceita.
Usa como padrão o nome “Quiz API”
Vale saber
question_type é "multiple_choice", em que a opção certa traz isCorrect true, ou "open_answer", que usa correct_answer no lugar. Se for omitido, é tratado como múltipla escolha.
O endpoint do quiz repassa settings diretamente como blocos de configuração da atividade, então não é um lugar para opções soltas — ajuste o quiz no editor depois.
Exemplo de requisição
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": "br",
"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."
}
]
}'
POST/api/public/v1/board-gamePelo menos 1 em items
Conteúdo
api_c_board_game
Usa como padrão o nome “Board Game API”
Vale saber
question_type é "multiple_choice", em que a opção certa traz isCorrect true, ou "open_answer", que usa correct_answer no lugar. Se for omitido, é tratado como múltipla escolha.
Configurações que lê
Campo
Tipo
O que faz
number_of_tiles
opcionalem settings
number
number
Quantas casas o tabuleiro tem. Entre 10 e 75.
Padrão: 30
game_mode
opcionalem settings
string
string
Se os jogadores correm até a chegada ou coletam itens pelo caminho.
Um derace_to_finishcollect_items
Padrão: "race_to_finish"
Exemplo de requisição
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": "br",
"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"
}
}'
Sucesso
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Uma frase, no campo sentence. Este endpoint não recebe items.
Usa como padrão o nome “Calculation Game API”
Vale saber
Se as restrições forem apertadas demais para codificar a frase, a chamada responde 400 pedindo para afrouxá-las, em vez de salvar um passatempo parcial.
Configurações que lê
Campo
Tipo
O que faz
sentence
obrigatório
string
string
A frase que os jogadores revelam ao resolver as contas.
difficulty_level
opcionalem settings
number
number
O maior resultado que uma conta pode ter.
Um de20501001000
Padrão: "100"
operators
opcionalem settings
string[]
string[]
Quais operações podem aparecer. x é multiplicação, : é divisão.
Um de+-x:
Padrão: ["+", "-", "x", ":"]
max_operations
opcionalem settings
number
number
Quantas operações uma conta pode encadear.
Um de123
Padrão: 1
number_difficulty
opcionalem settings
number
number
Limita os números individuais dentro de uma conta. De 5 a 1000.
Nada. Todo o passatempo vem de suas duas configurações.
Usa como padrão o nome “Sudoku API”
Vale saber
Não envie items nem sentence — size e difficulty são toda a entrada.
O editor só oferece a dificuldade para 2x3, 3x3 e 3x4. A API a aplica a todos os tamanhos, incluindo 2x2 e 4x4.
Configurações que lê
Campo
Tipo
O que faz
size
opcionalem settings
string
string
O tamanho de um bloco, escrito como linhas por colunas — 3x3 dá a clássica grade 9x9. O endpoint só verifica se ele pode ser interpretado como dois números, então fique com os tamanhos que o editor oferece.
Uma URL de imagem, no campo image. Este endpoint não recebe items.
Usa como padrão o nome “Jigsaw Game API”
Vale saber
A API sempre cria um quebra-cabeça 4 por 4. Quantidade de peças, peças irregulares e bordas retas são configurações do editor — enviar rows ou columns aqui não tem efeito.
A URL é armazenada exatamente como você a enviou e o arquivo nunca é copiado, então ela precisa continuar publicamente acessível durante todo o tempo em que a atividade for jogada.
Configurações que lê
Campo
Tipo
O que faz
image
obrigatório
string
string
URL absoluta da imagem a ser recortada. Enviada no nível superior, não dentro de settings.
Uma URL de imagem, dentro de settings. Este endpoint não recebe items.
Usa como padrão o nome “Sliding Puzzle API”
Vale saber
Diferente do quebra-cabeça, este endpoint lê sua imagem de settings.image. Um campo image no nível superior é ignorado e a chamada responde 400.
A URL é armazenada exatamente como você a enviou e o arquivo nunca é copiado, então ela precisa continuar publicamente acessível durante todo o tempo em que a atividade for jogada.
Configurações que lê
Campo
Tipo
O que faz
image
obrigatórioem settings
string
string
URL absoluta da imagem a ser embaralhada. Diferente da do quebra-cabeça, esta fica dentro de settings.