Invia i tuoi contenuti in formato JSON con una richiesta POST all'endpoint del tipo di attività scelto. L'API crea l'attività nel tuo account Puzzel.org e restituisce un URL da condividere o incorporare in un iframe.
URL di base
https://puzzel.org/api/public/v1
Autenticazione
Chiave + e-mail nel corpo
Endpoint
20 tipi di attività
Quota
10 attività al giorno
La tua prima richiesta
Invia una richiesta con un corpo JSON contenente la chiave API, l'indirizzo e-mail del tuo account e i contenuti. La risposta contiene la chiave della nuova attività e l'URL per aprirla.
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": "it",
"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"
}
]
}'
Ogni esempio di questa pagina è una richiesta completa e pronta da eseguire. Metti la tua chiave e i tuoi contenuti e funziona così com'è.
Autenticazione
Non serve un header di autenticazione né un bearer token: invia la chiave API e l'indirizzo e-mail nel corpo JSON di ogni richiesta. La chiave è valida solo per l'account associato a quell'indirizzo.
Campo
Tipo
Cosa fa
account_api_key
obbligatorio
string
string
La chiave API del tuo account. Va nel corpo, non in un header.
email
obbligatorio
string
string
L'indirizzo con cui accedi al tuo account Puzzel.org. La chiave è valida solo insieme a esso.
Trovi la chiave API nella sezione account della dashboard: fai clic su Mostra per visualizzarla.
Tratta la chiave API come una password: permette di creare e sovrascrivere attività nel tuo account. Conservala sul server e non inserirla nel codice accessibile dal browser.
Il corpo della richiesta
Tutti gli endpoint accettano gli stessi cinque campi comuni. I contenuti richiesti variano: la maggior parte usa un array items, alcuni una frase o un'immagine. Il sudoku non richiede un campo per i contenuti.
Campo
Tipo
Cosa fa
account_api_key
obbligatorio
string
string
La chiave API del tuo account. Va nel corpo, non in un header.
email
obbligatorio
string
string
L'indirizzo con cui accedi al tuo account Puzzel.org. La chiave è valida solo insieme a esso.
title
facoltativo
string
string
Il nome dell'attività nella dashboard. Se ometti questo campo, viene usato il nome predefinito dell'endpoint.
language
facoltativo
string
string
Imposta la lingua dell'URL restituito, senza tradurre i contenuti inviati. Per il crucipuzzle, il valore "ar" seleziona anche le lettere arabe con cui riempire le caselle libere.
Predefinito: "en"
activity_key
facoltativo
string
string
Ometterlo crea una nuova attività. Passa la chiave di una che possiedi già e quell'attività viene invece ricostruita.
settings contiene le opzioni specifiche dell'endpoint. Per ogni endpoint sono elencate qui sotto le impostazioni supportate; le altre vengono ignorate.
Cosa ricevi in risposta
Una chiamata riuscita risponde 200 con la chiave della nuova attività e l'URL su cui si gioca. Tutto il resto risponde con success impostato a false e una sola stringa di errore.
{
"success": false,
"error": "Invalid Email or API Key"
}
L'url che ricevi è la vista di incorporamento. Sostituisci embed con play per aprirla a pagina intera, o con build per aprirla nell'editor — la chiave dopo p= resta la stessa.
Creare o aggiornare
Invia activity_key e l'attività corrispondente viene ricostruita sul posto: i contenuti vengono sostituiti, il nome e la marca temporale della versione vengono aggiornati e la chiave resta la stessa — così i link e i codici di incorporamento che hai già condiviso continuano a funzionare. Risultati, posizione nelle cartelle e ogni impostazione che l'endpoint non scrive restano come erano.
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 viene applicato anche agli aggiornamenti. Se lo ometti, il nome dell'attività viene sostituito con quello predefinito dell'endpoint.
I blocchi di impostazioni che un endpoint scrive da sé vengono riscritti da zero, quindi anche un aggiornamento li riporta ai valori che invii, o ai valori predefiniti dell'endpoint.
Puoi aggiornare solo le attività di cui è proprietario il tuo account. La chiave di qualcun altro risponde 403.
Un aggiornamento costa quanto una creazione: una chiamata sulla quota di oggi.
Limite di frequenza
10
10 attività per account al giorno
Ogni richiesta riuscita viene conteggiata nel limite giornaliero, sia per creare sia per aggiornare un'attività. Una volta raggiunto il limite, le richieste successive restituiscono il codice 429 fino all'azzeramento del contatore.
Il contatore viene azzerato una volta al giorno da un processo pianificato, non su una finestra mobile di 24 ore.
Errori
Gli errori arrivano sempre come JSON con gli stessi due campi, mai come pagina HTML. La stringa di errore è scritta per essere letta da una persona: indica il campo o il limite che non ha funzionato.
Stato
Cosa significa
400
Bad Request
Qualcosa nel corpo manca, è malformato o fuori intervallo. Il messaggio indica il campo.
401
Unauthorized
L'e-mail è sconosciuta, oppure la chiave non appartiene a quell'account.
403
Forbidden
L'activity_key che hai inviato appartiene a un altro account.
429
Too Many Requests
La quota di oggi è esaurita. Si azzera una volta al giorno.
500
Server Error
Il generatore non è riuscito a costruire un rompicapo con quello che hai inviato — di solito troppe poche parole, o parole che non si incastrano tra loro.
Endpoint
Un percorso per ogni tipo di attività, tutti in POST, tutti sotto lo stesso URL di base. Ognuno elenca i contenuti che gli servono, le impostazioni che legge e una richiesta che puoi eseguire.
Parole e lettere
M
I
O
A
A
R
C
O
E
Cruciverba
Incastra le tue risposte in una griglia e numera le definizioni al posto tuo.
Un array di parole. Ogni voce abbina la risposta alla definizione che la indica.
Ripiega sul nome “Crossword API”
Da sapere
Le risposte con meno di due caratteri vengono escluse prima di generare la griglia. Devono restare almeno due risposte valide.
Le risposte vengono convertite in maiuscolo e il generatore ha venti tentativi per incastrarle. Se non riesce a piazzare nemmeno una parola, la chiamata risponde 500.
Richiesta di esempio
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": "it",
"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 di parole. Il testo della definizione diventa la lista di parole da cui lavorano i giocatori.
Ripiega sul nome “Wordseeker API”
Da sapere
Le risposte sotto i due caratteri vengono scartate, e ogni risposta viene convertita in maiuscolo prima di finire nella griglia.
La griglia viene riempita con lettere latine, a meno che language non sia "ar", che passa il riempimento all'arabo.
Impostazioni che legge
Campo
Tipo
Cosa fa
hidden_solution
facoltativoin settings
string
string
Le lettere rimaste dopo aver trovato tutte le parole formano questa soluzione nascosta. Se la imposti, il generatore dà priorità alla soluzione rispetto al numero di parole da inserire nella griglia.
directions
facoltativoin settings
string[]
string[]
Le direzioni in cui possono essere inserite le parole. Se ometti questa impostazione, vengono usate solo est, sud-est e sud.
Uno trawesteastnorthsouthnorthwestnortheastsouthwestsoutheast
Predefinito: ["east", "southeast", "south"]
template
facoltativoin settings
string
string
Ritaglia la griglia in una forma invece di lasciarla quadrata.
Uno trasquarecirclecrossdiamondpyramidsmileystarcross_plus
Richiesta di esempio
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": "it",
"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"
}
}'
Le attività create tramite API hanno sempre attiva l'impostazione che mescola l'ordine, quindi l'ordine che invii non è quello che ricevono i giocatori.
Impostazioni che legge
Campo
Tipo
Cosa fa
hidden_solution
facoltativoin settings
string
string
Una parola bonus facoltativa che i giocatori inseriscono quando hanno risolto il resto.
Richiesta di esempio
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": "it",
"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-practiceAlmeno 1 in items
Contenuti
api_c_typing_practice
Ripiega sul nome “Typing Practice API”
Richiesta di esempio
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": "it",
"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"
}
]
}'
Successo
{
"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 di coppie. Ogni coppia contiene le due carte che vanno insieme.
Ripiega sul nome “Memory Game API”
Da sapere
Una carta è un oggetto con un type e un value. Usa "text" per le parole, oppure "image", "audio", "youtube" o "link" con un URL in value, e aggiungi alt per una descrizione.
POST/api/public/v1/matching-pairsAlmeno 2 in items
Contenuti
api_c_matching_pairs
Ripiega sul nome “Matching Game API”
Da sapere
Una carta è un oggetto con un type e un value. Usa "text" per le parole, oppure "image", "audio", "youtube" o "link" con un URL in value, e aggiungi alt per una descrizione.
L'endpoint salva tutte le carte che invii, quindi inviane esattamente due per voce — prima il fronte, poi il retro.
Una carta è un oggetto con un type e un value. Usa "text" per le parole, oppure "image", "audio", "youtube" o "link" con un URL in value, e aggiungi alt per una descrizione.
Un array di categorie, ognuna con un nome e le carte che le appartengono.
Ripiega sul nome “Categorize Game API”
Da sapere
Una categoria inviata senza nome viene salvata come “Untitled Category”, quindi inviane sempre uno.
Una carta è un oggetto con un type e un value. Usa "text" per le parole, oppure "image", "audio", "youtube" o "link" con un URL in value, e aggiungi alt per una descrizione.
Un array di sequenze. Ognuna contiene le sue carte nell'ordine corretto.
Ripiega sul nome “Reorder Game API”
Da sapere
L'ordine che invii viene salvato come ordine corretto — il numero uno per primo.
Una carta è un oggetto con un type e un value. Usa "text" per le parole, oppure "image", "audio", "youtube" o "link" con un URL in value, e aggiungi alt per una descrizione.
Un array di domande. Ogni domanda a scelta multipla include le opzioni di risposta; ogni domanda aperta include la risposta accettata.
Ripiega sul nome “Quiz API”
Da sapere
question_type è "multiple_choice", dove l'opzione giusta ha isCorrect true, oppure "open_answer", che usa invece correct_answer. Se lo ometti, viene trattata come scelta multipla.
L'endpoint quiz passa settings direttamente come blocchi di impostazioni dell'attività, quindi non è il posto per opzioni sparse — regola il quiz nell'editor dopo.
Richiesta di esempio
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": "it",
"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 è "multiple_choice", dove l'opzione giusta ha isCorrect true, oppure "open_answer", che usa invece correct_answer. Se lo ometti, viene trattata come scelta multipla.
Impostazioni che legge
Campo
Tipo
Cosa fa
number_of_tiles
facoltativoin settings
number
number
Quante caselle ha il tabellone. Tra 10 e 75.
Predefinito: 30
game_mode
facoltativoin settings
string
string
Se i giocatori corrono al traguardo o raccolgono oggetti lungo il percorso.
Uno trarace_to_finishcollect_items
Predefinito: "race_to_finish"
Richiesta di esempio
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": "it",
"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"
}
}'
Successo
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
Niente. L'intero rompicapo nasce dalle sue due impostazioni.
Ripiega sul nome “Sudoku API”
Da sapere
Non inviare né items né sentence — dimensione e difficoltà sono tutto l'input.
L'editor offre la difficoltà solo per 2x3, 3x3 e 3x4. L'API la applica a ogni dimensione, 2x2 e 4x4 comprese.
Impostazioni che legge
Campo
Tipo
Cosa fa
size
facoltativoin settings
string
string
La dimensione di un blocco, scritta come righe per colonne — 3x3 dà la classica griglia 9x9. L'endpoint verifica solo che sia leggibile come due numeri, quindi resta sulle dimensioni che offre l'editor.
Uno tra2x22x33x33x44x4
Predefinito: "3x3"
difficulty_level
facoltativoin settings
string
string
Quanti numeri restano sulla griglia come punto di partenza.
Un solo URL di immagine, nel campo image. Questo endpoint non accetta items.
Ripiega sul nome “Jigsaw Game API”
Da sapere
L'API crea sempre un puzzle 4 per 4. Il numero di pezzi, i pezzi irregolari e i bordi dritti sono impostazioni dell'editor — inviare qui rows o columns non fa niente.
L'URL viene salvato così come lo hai inviato e il file non viene mai copiato, quindi deve restare pubblicamente raggiungibile per tutto il tempo in cui l'attività viene giocata.
Impostazioni che legge
Campo
Tipo
Cosa fa
image
obbligatorio
string
string
URL assoluto dell'immagine da tagliare. Va inviato al primo livello, non dentro settings.
Un solo URL di immagine, dentro settings. Questo endpoint non accetta items.
Ripiega sul nome “Sliding Puzzle API”
Da sapere
A differenza del puzzle, questo endpoint legge la sua immagine da settings.image. Un campo image di primo livello viene ignorato e la chiamata risponde 400.
L'URL viene salvato così come lo hai inviato e il file non viene mai copiato, quindi deve restare pubblicamente raggiungibile per tutto il tempo in cui l'attività viene giocata.
Impostazioni che legge
Campo
Tipo
Cosa fa
image
obbligatorioin settings
string
string
URL assoluto dell'immagine da mescolare. A differenza di quella del puzzle, questa sta dentro settings.