Un POST por tipo de actividad. Envía tu contenido como JSON y recibe una actividad en tu cuenta de Puzzel.org y una URL que puedes dar a los jugadores o colocar en un iframe.
URL base
https://puzzel.org/api/public/v1
Autenticación
Clave + email en el cuerpo
Endpoints
20 tipos de actividad
Cuota
10 actividades al día
Tu primera petición
Nada que instalar y ningún handshake: envía un cuerpo JSON con tu clave, tu email y tu contenido. La respuesta trae la clave de la nueva actividad y la URL en la que se juega.
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": "es",
"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"
}
]
}'
Todos los ejemplos de esta página son peticiones completas y ejecutables. Sustituye la clave y el contenido por los tuyos y funcionan tal cual.
Autenticación
No hay cabeceras ni bearer token. Las dos credenciales viajan en el cuerpo JSON de cada petición, y la clave solo se acepta para la cuenta a la que pertenece ese email.
Campo
Tipo
Qué hace
account_api_key
obligatorio
string
string
La clave de API de tu cuenta. Va en el cuerpo, no en una cabecera.
email
obligatorio
string
string
La dirección con la que inicia sesión tu cuenta de Puzzel.org. La clave solo es válida junto con ella.
Tu clave está en la sección de cuenta de tu panel, detrás de Mostrar.
Trata la clave como una contraseña. Crea y sobrescribe actividades en tu cuenta, así que mantenla en el servidor y fuera de cualquier cosa que un navegador pueda leer.
El cuerpo de la petición
Todos los endpoints aceptan los mismos cinco campos. Lo que cambia es el campo de contenido que va debajo: la mayoría aceptan un array de elementos, unos pocos una sola oración o una sola imagen, y el sudoku no acepta nada en absoluto.
Campo
Tipo
Qué hace
account_api_key
obligatorio
string
string
La clave de API de tu cuenta. Va en el cuerpo, no en una cabecera.
email
obligatorio
string
string
La dirección con la que inicia sesión tu cuenta de Puzzel.org. La clave solo es válida junto con ella.
title
opcional
string
string
El nombre que recibe la actividad en tu panel. Si lo omites, el endpoint usa su propio nombre por defecto.
language
opcional
string
string
Solo determina el idioma de la URL que recibes; no traduce nada de lo que envías. La sopa de letras también lo lee para cambiar sus letras de relleno al árabe cuando es "ar".
Por defecto: "en"
activity_key
opcional
string
string
Omítelo para crear una actividad nueva. Pasa la clave de una que ya sea tuya y esa actividad se reconstruye en su lugar.
settings es un objeto con opciones por endpoint. Cuáles lee cada endpoint se indica junto a él más abajo; cualquier otra cosa que pongas ahí se ignora.
Qué recibes de vuelta
Una llamada correcta responde 200 con la clave de la nueva actividad y la URL en la que se juega. Cualquier otra cosa responde con success en false y una única cadena de error.
{
"success": false,
"error": "Invalid Email or API Key"
}
La url que recibes es la vista para insertar. Cambia embed por play para abrirla a pantalla completa, o por build para abrirla en el editor; la clave después de p= es la misma.
Crear frente a actualizar
Envía activity_key y la actividad correspondiente se reconstruye en su sitio: su contenido se sustituye, su nombre y su marca de versión se renuevan, y la clave sigue siendo la misma, así que los enlaces e inserciones que ya compartiste siguen funcionando. Los resultados, la carpeta en la que está y todos los ajustes que el endpoint no escribe por sí mismo se quedan como estaban.
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 se aplica en cada actualización, incluido su valor por defecto: si lo omites, la actividad pasa a llamarse con el nombre por defecto de ese endpoint.
Los bloques de ajustes que un endpoint escribe por sí mismo se reescriben desde cero, así que una actualización también los restablece a los valores que envías, o a los valores por defecto del endpoint.
Solo puedes actualizar actividades que pertenezcan a tu propia cuenta. La clave de otra persona responde 403.
Una actualización cuesta lo mismo que una creación: una llamada de la cuota de hoy.
Límite de peticiones
10
10 actividades por cuenta y día
Cada llamada correcta cuenta, tanto creaciones como actualizaciones. Si te pasas, la siguiente petición responde 429 hasta que el contador se reinicia.
El contador se pone a cero una vez al día mediante una tarea programada, no en una ventana móvil de 24 horas.
Errores
Los errores llegan siempre como JSON con los mismos dos campos, nunca como una página HTML. La cadena error está escrita para que la lea una persona: indica el campo o el límite que falló.
Estado
Qué significa
400
Bad Request
Falta algo en el cuerpo, está mal formado o fuera de rango. El mensaje indica el campo.
401
Unauthorized
El email es desconocido, o la clave no pertenece a esa cuenta.
403
Forbidden
La activity_key que enviaste pertenece a otra cuenta.
429
Too Many Requests
La cuota de hoy está agotada. Se reinicia una vez al día.
500
Server Error
El generador no pudo construir un puzle con lo que enviaste; normalmente por muy pocas palabras, o por palabras que no encajan entre sí.
Endpoints
Una ruta por tipo de actividad, todas POST, todas bajo la misma URL base. Cada una indica el contenido que necesita, los ajustes que lee y una petición que puedes ejecutar.
Palabras y letras
F
I
G
A
T
R
I
P
M
Crucigrama
Entrelaza tus respuestas en una cuadrícula y numera las definiciones por ti.
Un array de palabras. Cada entrada combina la respuesta con la definición que la señala.
Usa por defecto el nombre “Crossword API”
Conviene saber
Las respuestas de menos de dos caracteres se descartan antes de construir la cuadrícula, y al menos dos tienen que sobrevivir a ese filtro.
Las respuestas se pasan a mayúsculas y el generador tiene veinte intentos para encajarlas. Si no consigue colocar ni una sola palabra, la llamada responde 500.
Petición de ejemplo
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": "es",
"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"
}
]
}'
Un array de palabras. El texto de la definición se convierte en la lista de palabras con la que trabajan los jugadores.
Usa por defecto el nombre “Wordseeker API”
Conviene saber
Las respuestas de menos de dos caracteres se descartan, y todas las respuestas se pasan a mayúsculas antes de entrar en la cuadrícula.
La cuadrícula se rellena con letras latinas salvo que language sea "ar", que cambia el relleno al árabe.
Ajustes que lee
Campo
Tipo
Qué hace
hidden_solution
opcionalen settings
string
string
Las letras sobrantes forman esta palabra. Establecerla también indica al generador que encaje primero la solución en lugar de meter tantas palabras como pueda.
directions
opcionalen settings
string[]
string[]
En qué direcciones puede ir una palabra. Si lo omites, las palabras solo van hacia el este, el sureste y el sur.
Uno dewesteastnorthsouthnorthwestnortheastsouthwestsoutheast
Por defecto: ["east", "southeast", "south"]
template
opcionalen settings
string
string
Recorta la cuadrícula con una forma en lugar de dejarla cuadrada.
Uno desquarecirclecrossdiamondpyramidsmileystarcross_plus
Petición de ejemplo
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": "es",
"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-scrambleAl menos 1 en items
Contenido
api_c_word_scramble
Usa por defecto el nombre “Word Scramble API”
Conviene saber
Las actividades creadas a través de la API siempre tienen activado el ajuste de orden aleatorio, así que el orden que envías no es el orden que reciben los jugadores.
Ajustes que lee
Campo
Tipo
Qué hace
hidden_solution
opcionalen settings
string
string
Una palabra extra opcional que los jugadores introducen cuando el resto está resuelto.
Petición de ejemplo
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": "es",
"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-practiceAl menos 1 en items
Contenido
api_c_typing_practice
Usa por defecto el nombre “Typing Practice API”
Petición de ejemplo
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": "es",
"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"
}
]
}'
Éxito
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Un array de parejas. Cada pareja contiene las dos tarjetas que van juntas.
Usa por defecto el nombre “Memory Game API”
Conviene saber
Una tarjeta es un objeto con un type y un value. Usa "text" para palabras, o "image", "audio", "youtube" o "link" con una URL en value, y añade alt para una descripción.
POST/api/public/v1/matching-pairsAl menos 2 en items
Contenido
api_c_matching_pairs
Usa por defecto el nombre “Matching Game API”
Conviene saber
Una tarjeta es un objeto con un type y un value. Usa "text" para palabras, o "image", "audio", "youtube" o "link" con una URL en value, y añade alt para una descripción.
El endpoint guarda tantas tarjetas como envíes, así que envía exactamente dos por entrada: primero el anverso, luego el reverso.
Una tarjeta es un objeto con un type y un value. Usa "text" para palabras, o "image", "audio", "youtube" o "link" con una URL en value, y añade alt para una descripción.
Un array de categorías, cada una con un nombre y las tarjetas que le pertenecen.
Usa por defecto el nombre “Categorize Game API”
Conviene saber
Una categoría enviada sin nombre se guarda como “Untitled Category”, así que envía siempre uno.
Una tarjeta es un objeto con un type y un value. Usa "text" para palabras, o "image", "audio", "youtube" o "link" con una URL en value, y añade alt para una descripción.
Un array de secuencias. Cada una contiene sus tarjetas en el orden correcto.
Usa por defecto el nombre “Reorder Game API”
Conviene saber
El orden que envías se guarda como el orden correcto: el número uno primero.
Una tarjeta es un objeto con un type y un value. Usa "text" para palabras, o "image", "audio", "youtube" o "link" con una URL en value, y añade alt para una descripción.
Un array de preguntas. Las preguntas de opción múltiple llevan sus respuestas; las abiertas llevan la respuesta que aceptas.
Usa por defecto el nombre “Quiz API”
Conviene saber
question_type es "multiple_choice", donde la opción correcta lleva isCorrect en true, o "open_answer", que usa correct_answer en su lugar. Si se omite, se trata como opción múltiple.
El endpoint del quiz pasa settings directamente como bloques de ajustes de la actividad, así que no es un sitio para opciones sueltas: ajusta el quiz en el editor después.
Petición de ejemplo
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": "es",
"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 es "multiple_choice", donde la opción correcta lleva isCorrect en true, o "open_answer", que usa correct_answer en su lugar. Si se omite, se trata como opción múltiple.
Ajustes que lee
Campo
Tipo
Qué hace
number_of_tiles
opcionalen settings
number
number
Cuántas casillas tiene el tablero. Entre 10 y 75.
Por defecto: 30
game_mode
opcionalen settings
string
string
Si los jugadores compiten por llegar a la meta o recogen objetos por el camino.
Uno derace_to_finishcollect_items
Por defecto: "race_to_finish"
Petición de ejemplo
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": "es",
"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"
}
}'
Éxito
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Una oración, en el campo sentence. Este endpoint no acepta items.
Usa por defecto el nombre “Calculation Game API”
Conviene saber
Si las restricciones son demasiado estrictas para codificar la oración, la llamada responde 400 pidiéndote que las relajes en lugar de guardar un puzle parcial.
Ajustes que lee
Campo
Tipo
Qué hace
sentence
obligatorio
string
string
La oración que los jugadores descubren al resolver las operaciones.
difficulty_level
opcionalen settings
number
number
El resultado más alto que puede tener una operación.
Uno de20501001000
Por defecto: "100"
operators
opcionalen settings
string[]
string[]
Qué operaciones pueden aparecer. x es multiplicar, : es dividir.
Uno de+-x:
Por defecto: ["+", "-", "x", ":"]
max_operations
opcionalen settings
number
number
Cuántas operaciones puede encadenar un mismo cálculo.
Uno de123
Por defecto: 1
number_difficulty
opcionalen settings
number
number
Limita los números individuales dentro de una operación. Desde 5 hasta 1000.
No envíes items ni sentence: size y difficulty son toda la entrada.
El editor solo ofrece la dificultad para 2x3, 3x3 y 3x4. La API la aplica a todos los tamaños, incluidos 2x2 y 4x4.
Ajustes que lee
Campo
Tipo
Qué hace
size
opcionalen settings
string
string
El tamaño de un bloque, escrito como filas por columnas: 3x3 da la cuadrícula clásica de 9x9. El endpoint solo comprueba que se pueda leer como dos números, así que quédate con los tamaños que ofrece el editor.
Uno de2x22x33x33x44x4
Por defecto: "3x3"
difficulty_level
opcionalen settings
string
string
Cuántos números quedan en el tablero para empezar.
Una URL de imagen, en el campo image. Este endpoint no acepta items.
Usa por defecto el nombre “Jigsaw Game API”
Conviene saber
La API siempre crea un rompecabezas de 4 por 4. El número de piezas, las piezas irregulares y los bordes rectos son ajustes del editor: enviar rows o columns aquí no hace nada.
La URL se guarda tal como la enviaste y el archivo nunca se copia, así que tiene que seguir siendo accesible públicamente mientras se juegue la actividad.
Ajustes que lee
Campo
Tipo
Qué hace
image
obligatorio
string
string
URL absoluta de la imagen que se va a recortar. Se envía en el nivel superior, no dentro de settings.
Una URL de imagen, dentro de settings. Este endpoint no acepta items.
Usa por defecto el nombre “Sliding Puzzle API”
Conviene saber
A diferencia del rompecabezas, este endpoint lee su imagen de settings.image. Un campo image en el nivel superior se ignora y la llamada responde 400.
La URL se guarda tal como la enviaste y el archivo nunca se copia, así que tiene que seguir siendo accesible públicamente mientras se juegue la actividad.
Ajustes que lee
Campo
Tipo
Qué hace
image
obligatorioen settings
string
string
URL absoluta de la imagen que se va a desordenar. A diferencia del rompecabezas, esta va dentro de settings.