Aller au contenu
Tu découvres en avant-première le nouveau Puzzel.org Retour au site actuel
API développeur

Crée des activités depuis ton propre système

Un POST par type d'activité. Envoie ton contenu en JSON et récupère une activité dans ton compte Puzzel.org, avec une URL à donner aux joueurs ou à glisser dans une iframe.

URL de base
https://puzzel.org/api/public/v1
Auth
Clé + e-mail dans le corps
Points de terminaison
20 types d'activités
Quota
10 activités par jour

Ta première requête

Rien à installer et aucune poignée de main : envoie un corps JSON avec ta clé, ton e-mail et ton contenu. La réponse contient la clé de la nouvelle activité et l'URL où elle se joue.

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": "fr",
  "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"
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/crossword/embed?p=-Nq8sample_activity_key",
  "message": "Crossword created successfully"
}

Chaque exemple de cette page est une requête complète et exécutable. Remplace la clé et le contenu par les tiens et ça fonctionne tel quel.

Authentification

Il n'y a ni en-têtes ni jeton bearer. Les deux identifiants voyagent dans le corps JSON de chaque requête, et la clé n'est acceptée que pour le compte auquel cet e-mail appartient.

ChampTypeRôle
account_api_key
obligatoire
string
stringLa clé API de ton compte. Elle va dans le corps, pas dans un en-tête.
email
obligatoire
string
stringL'adresse avec laquelle ton compte Puzzel.org se connecte. La clé n'est valide qu'avec elle.

Ta clé se trouve dans la section compte de ton tableau de bord, derrière Afficher.

Se connecter

Les clés API sont délivrées au démarrage d'un abonnement : un compte gratuit n'en a donc pas encore.

Voir les formules

Traite la clé comme un mot de passe. Elle crée et écrase des activités dans ton compte : garde-la côté serveur, hors de portée de tout ce qu'un navigateur peut lire.

Le corps de la requête

Chaque point de terminaison prend les cinq mêmes champs. Ce qui change, c'est le champ de contenu en dessous : la plupart prennent un tableau d'items, quelques-uns une seule phrase ou une seule image, et le sudoku ne prend rien du tout.

ChampTypeRôle
account_api_key
obligatoire
string
stringLa clé API de ton compte. Elle va dans le corps, pas dans un en-tête.
email
obligatoire
string
stringL'adresse avec laquelle ton compte Puzzel.org se connecte. La clé n'est valide qu'avec elle.
title
facultatif
string
stringLe nom que l'activité reçoit dans ton tableau de bord. Omets-le et le point de terminaison utilise son propre nom de repli.
language
facultatif
string
stringDétermine seulement la langue dans l'URL renvoyée — rien de ce que tu envoies n'est traduit. Les mots mêlés le lisent aussi pour passer leurs lettres de remplissage à l'arabe quand il vaut "ar".
Par défaut: "en"
activity_key
facultatif
string
stringOmets-le pour créer une nouvelle activité. Passe la clé d'une activité que tu possèdes déjà et c'est celle-ci qui est reconstruite.

settings est un objet d'options propres à chaque point de terminaison. Celles qu'un point de terminaison lit sont listées avec lui ci-dessous ; tout le reste y est ignoré.

Ce qui est renvoyé

Un appel réussi répond 200 avec la clé de la nouvelle activité et l'URL où elle se joue. Tout le reste répond avec success à false et une seule chaîne error.

Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/crossword/embed?p=-Nq8sample_activity_key",
  "message": "Crossword created successfully"
}
Échec
{
  "success": false,
  "error": "Invalid Email or API Key"
}

L'url renvoyée est la vue intégrée. Remplace embed par play pour l'ouvrir en pleine page, ou par build pour l'ouvrir dans l'éditeur — la clé après p= ne change pas.

Créer ou mettre à jour

Envoie activity_key et l'activité correspondante est reconstruite sur place : son contenu est remplacé, son nom et son horodatage de version sont rafraîchis, et la clé elle-même ne change pas — les liens et les intégrations déjà partagés continuent donc de fonctionner. Les résultats, le classement dans les dossiers et tous les paramètres que le point de terminaison n'écrit pas lui-même restent tels quels.

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 est appliqué à chaque mise à jour, sa valeur par défaut comprise — omets-le et l'activité est renommée avec le nom de repli de ce point de terminaison.
  • Les blocs de paramètres qu'un point de terminaison écrit lui-même sont réécrits de zéro : une mise à jour les ramène donc aux valeurs que tu envoies, ou à celles par défaut du point de terminaison.
  • Tu ne peux mettre à jour que les activités appartenant à ton propre compte. La clé de quelqu'un d'autre répond 403.
  • Une mise à jour coûte autant qu'une création : un appel sur le quota du jour.

Limite de débit

10
10 activités par compte et par jour

Chaque appel réussi compte, créations comme mises à jour. Dépasse la limite et la requête suivante répond 429 jusqu'à la remise à zéro du compteur.

Le compteur est remis à zéro une fois par jour par une tâche planifiée, et non sur une fenêtre glissante de 24 heures.

Erreurs

Les erreurs arrivent toujours en JSON avec les deux mêmes champs, jamais sous forme de page HTML. La chaîne error est écrite pour être lue par un humain : elle nomme le champ ou la limite qui a échoué.

StatutSignification
400
Bad Request
Quelque chose dans le corps manque, est mal formé ou hors limites. Le message nomme le champ.
401
Unauthorized
L'e-mail est inconnu, ou la clé n'appartient pas à ce compte.
403
Forbidden
Le activity_key que tu as envoyé appartient à un autre compte.
429
Too Many Requests
Le quota du jour est épuisé. Il se réinitialise une fois par jour.
500
Server Error
Le générateur n'a pas pu construire de casse-tête avec ce que tu as envoyé — en général trop peu de mots, ou des mots impossibles à assembler.

Points de terminaison

Un chemin par type d'activité, tous en POST, tous sous la même URL de base. Chacun indique le contenu dont il a besoin, les paramètres qu'il lit et une requête que tu peux exécuter.

Mots et lettres

Mots croisés

Imbrique tes réponses dans une grille et numérote les définitions pour toi.

#
POST /api/public/v1/crossword Au moins 2 dans items
Contenu

Un tableau de mots. Chaque entrée associe la réponse à la définition qui la désigne.

Nom de repli : “Crossword API”

Bon à savoir
  • Les réponses de moins de deux caractères sont écartées avant la construction de la grille, et il faut qu'il en reste au moins deux.
  • Les réponses sont mises en majuscules et le générateur dispose de vingt tentatives pour les placer. S'il n'arrive à placer aucun mot, l'appel répond 500.
Exemple de requête
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": "fr",
  "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"
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/crossword/embed?p=-Nq8sample_activity_key",
  "message": "Crossword created successfully"
}

Mots mêlés

Cache tes mots dans une grille de lettres, dans les directions et la forme de ton choix.

#
POST /api/public/v1/wordseeker Au moins 2 dans items
Contenu

Un tableau de mots. Le texte de la définition devient la liste de mots à partir de laquelle les joueurs travaillent.

Nom de repli : “Wordseeker API”

Bon à savoir
  • Les réponses de moins de deux caractères sont écartées, et chaque réponse est mise en majuscules avant d'entrer dans la grille.
  • La grille est complétée avec des lettres latines, sauf si language vaut "ar", ce qui bascule le remplissage en arabe.
Paramètres lus
ChampTypeRôle
hidden_solution
facultatif dans settings
string
stringLes lettres restantes forment ce texte. Le définir indique aussi au générateur de placer la solution en premier plutôt que de caser un maximum de mots.
directions
facultatif dans settings
string[]
string[]Les sens dans lesquels un mot peut se lire. Omets-le et les mots vont uniquement vers l'est, le sud-est et le sud.
Au choix westeastnorthsouthnorthwestnortheastsouthwestsoutheast
Par défaut: ["east", "southeast", "south"]
template
facultatif dans settings
string
stringDécoupe la grille en une forme au lieu de la laisser carrée.
Au choix squarecirclecrossdiamondpyramidsmileystarcross_plus
Exemple de requête
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": "fr",
  "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"
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/wordseeker/embed?p=-Nq8sample_activity_key",
  "message": "Wordseeker created successfully"
}

Acrostiche

Empile tes réponses pour qu'une colonne forme un mot caché.

#
POST /api/public/v1/acrostic Au moins 1 dans items
Contenu

Un tableau de mots. À eux tous, ils doivent fournir chaque lettre du mot caché.

Nom de repli : “Acrostic API”

Bon à savoir
  • Si les réponses ne peuvent pas fournir les lettres dont la solution a besoin, l'appel répond 500 plutôt que d'enregistrer une grille à moitié construite.
  • Le générateur réordonne tes réponses pour que la colonne fonctionne : l'ordre que tu envoies n'est donc pas celui que voient les joueurs.
Paramètres lus
ChampTypeRôle
hidden_solution
obligatoire dans settings
string
stringLe mot que forme la colonne mise en évidence. Ce point de terminaison ne fonctionne pas sans lui.
Exemple de requête
POST acrostic
curl -X POST https://puzzel.org/api/public/v1/acrostic \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Acrostic",
  "language": "fr",
  "items": [
    {
      "answer": "PEACH",
      "description": "Fuzzy skin, sweet flesh",
      "type": "text"
    },
    {
      "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": "PLUM"
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/acrostic/embed?p=-Nq8sample_activity_key",
  "message": "Acrostic created successfully"
}

Lettres mélangées

api_e_word_scramble

#
POST /api/public/v1/word-scramble Au moins 1 dans items
Contenu

api_c_word_scramble

Nom de repli : “Word Scramble API”

Bon à savoir
  • Les activités créées via l'API ont toujours le paramètre de mélange de l'ordre activé : l'ordre que tu envoies n'est donc pas celui que reçoivent les joueurs.
Paramètres lus
ChampTypeRôle
hidden_solution
facultatif dans settings
string
stringUn mot bonus facultatif que les joueurs saisissent une fois le reste résolu.
Exemple de requête
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": "fr",
  "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"
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/word-scramble/embed?p=-Nq8sample_activity_key",
  "message": "Word Scramble created successfully"
}

Pendu

Transforme tes mots ou expressions en manches où l'on devine lettre par lettre.

#
POST /api/public/v1/hangman Au moins 1 dans items
Contenu

Un tableau de mots ou d'expressions courtes. La définition est l'indice que voient les joueurs.

Nom de repli : “Hangman API”

Exemple de requête
POST hangman
curl -X POST https://puzzel.org/api/public/v1/hangman \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Hangman",
  "language": "fr",
  "items": [
    {
      "answer": "BANANA",
      "description": "A long yellow fruit",
      "type": "text"
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/hangman/embed?p=-Nq8sample_activity_key",
  "message": "Hangman created successfully"
}

Wordle

Fait un jeu de mot à deviner de chaque mot que tu envoies.

#
POST /api/public/v1/wordle Au moins 1 dans items
Contenu

Un tableau de mots. Les joueurs ont une manche par mot.

Nom de repli : “Wordle API”

Bon à savoir
  • Créé avec le paramètre qui vérifie que les mots proposés existent vraiment. Désactive-le dans l'éditeur si tes mots sont des noms propres ou inventés.
Exemple de requête
POST wordle
curl -X POST https://puzzel.org/api/public/v1/wordle \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Wordle",
  "language": "fr",
  "items": [
    {
      "answer": "MELON",
      "description": "Sweet and green",
      "type": "text"
    },
    {
      "answer": "PEACH",
      "description": "Fuzzy and orange",
      "type": "text"
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/wordle/embed?p=-Nq8sample_activity_key",
  "message": "Wordle created successfully"
}

Entraînement au clavier

api_e_typing_practice

#
POST /api/public/v1/typing-practice Au moins 1 dans items
Contenu

api_c_typing_practice

Nom de repli : “Typing Practice API”

Exemple de requête
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": "fr",
  "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"
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
  "message": "Typing Practice created successfully"
}

Roue de la fortune

api_e_wheel_of_fortune

#
POST /api/public/v1/wheel-of-fortune Au moins 1 dans items
Contenu

api_c_wheel_of_fortune

Nom de repli : “Wheel of Fortune API”

Bon à savoir
  • Créé avec “afficher le résultat uniquement dans la roue” : le résultat se lit donc sur la roue au lieu d'être annoncé à côté.
Exemple de requête
POST wheel-of-fortune
curl -X POST https://puzzel.org/api/public/v1/wheel-of-fortune \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Wheel of Fortune",
  "language": "fr",
  "items": [
    {
      "answer": "Read a page aloud",
      "description": "Segment 1",
      "type": "text"
    },
    {
      "answer": "Name three fruits",
      "description": "Segment 2",
      "type": "text"
    },
    {
      "answer": "Spell it backwards",
      "description": "Segment 3",
      "type": "text"
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/wheel-of-fortune/embed?p=-Nq8sample_activity_key",
  "message": "Wheel of Fortune created successfully"
}
Cartes et paires

Memory

Des cartes face cachée à retourner pour former des paires.

#
POST /api/public/v1/memory Au moins 2 dans items
Contenu

Un tableau de paires. Chaque paire contient les deux cartes qui vont ensemble.

Nom de repli : “Memory Game API”

Bon à savoir
  • Une carte est un objet avec un champ type et un champ value. Utilise "text" pour des mots, ou "image", "audio", "youtube" ou "link" avec une URL dans value, et ajoute alt pour une description.
Exemple de requête
POST memory
curl -X POST https://puzzel.org/api/public/v1/memory \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Memory Game",
  "language": "fr",
  "items": [
    {
      "cards": [
        {
          "type": "text",
          "value": "Apple"
        },
        {
          "type": "text",
          "value": "A red fruit"
        }
      ]
    },
    {
      "cards": [
        {
          "type": "text",
          "value": "Banana"
        },
        {
          "type": "text",
          "value": "A yellow fruit"
        }
      ]
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/memory/embed?p=-Nq8sample_activity_key",
  "message": "Memory game created successfully"
}

Jeu d'association

api_e_matching_pairs

#
POST /api/public/v1/matching-pairs Au moins 2 dans items
Contenu

api_c_matching_pairs

Nom de repli : “Matching Game API”

Bon à savoir
  • Une carte est un objet avec un champ type et un champ value. Utilise "text" pour des mots, ou "image", "audio", "youtube" ou "link" avec une URL dans value, et ajoute alt pour une description.
Exemple de requête
POST matching-pairs
curl -X POST https://puzzel.org/api/public/v1/matching-pairs \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Matching Game",
  "language": "fr",
  "items": [
    {
      "cards": [
        {
          "type": "text",
          "value": "Apple"
        },
        {
          "type": "text",
          "value": "A red fruit"
        }
      ]
    },
    {
      "cards": [
        {
          "type": "text",
          "value": "Banana"
        },
        {
          "type": "text",
          "value": "A yellow fruit"
        }
      ]
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/matching-pairs/embed?p=-Nq8sample_activity_key",
  "message": "Matching pairs game created successfully"
}

Cartes de révision

api_e_flash_cards

#
POST /api/public/v1/flash-cards Au moins 1 dans items
Contenu

api_c_flash_cards

Nom de repli : “Flash Cards API”

Bon à savoir
  • Le point de terminaison enregistre autant de cartes que tu en envoies : envoie-en donc exactement deux par entrée — le recto, puis le verso.
  • Une carte est un objet avec un champ type et un champ value. Utilise "text" pour des mots, ou "image", "audio", "youtube" ou "link" avec une URL dans value, et ajoute alt pour une description.
Exemple de requête
POST flash-cards
curl -X POST https://puzzel.org/api/public/v1/flash-cards \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Flash Cards",
  "language": "fr",
  "items": [
    {
      "cards": [
        {
          "type": "text",
          "value": "Apple"
        },
        {
          "type": "text",
          "value": "A red fruit"
        }
      ]
    },
    {
      "cards": [
        {
          "type": "text",
          "value": "Banana"
        },
        {
          "type": "text",
          "value": "A yellow fruit"
        }
      ]
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/flash-cards/embed?p=-Nq8sample_activity_key",
  "message": "Flash Cards created successfully"
}

Tri par catégories

Des cartes à trier dans la catégorie à laquelle elles appartiennent.

#
POST /api/public/v1/categorize Au moins 2 dans items
Contenu

Un tableau de catégories, chacune avec un nom et les cartes qui lui appartiennent.

Nom de repli : “Categorize Game API”

Bon à savoir
  • Une catégorie envoyée sans nom est enregistrée sous “Untitled Category” : envoie-en donc toujours un.
  • Une carte est un objet avec un champ type et un champ value. Utilise "text" pour des mots, ou "image", "audio", "youtube" ou "link" avec une URL dans value, et ajoute alt pour une description.
Exemple de requête
POST categorize
curl -X POST https://puzzel.org/api/public/v1/categorize \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Categorize Game",
  "language": "fr",
  "items": [
    {
      "name": "Red fruits",
      "cards": [
        {
          "type": "text",
          "value": "Strawberry"
        },
        {
          "type": "text",
          "value": "Cherry"
        }
      ]
    },
    {
      "name": "Yellow fruits",
      "cards": [
        {
          "type": "text",
          "value": "Banana"
        },
        {
          "type": "text",
          "value": "Lemon"
        }
      ]
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/categorize/embed?p=-Nq8sample_activity_key",
  "message": "Categorize game created successfully"
}

Remise en ordre

Une séquence que les joueurs doivent remettre dans l'ordre.

#
POST /api/public/v1/reorder Au moins 1 dans items
Contenu

Un tableau de séquences. Chacune contient ses cartes dans le bon ordre.

Nom de repli : “Reorder Game API”

Bon à savoir
  • L'ordre que tu envoies est enregistré comme l'ordre correct — le numéro un en premier.
  • Une carte est un objet avec un champ type et un champ value. Utilise "text" pour des mots, ou "image", "audio", "youtube" ou "link" avec une URL dans value, et ajoute alt pour une description.
Exemple de requête
POST reorder
curl -X POST https://puzzel.org/api/public/v1/reorder \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Reorder Game",
  "language": "fr",
  "items": [
    {
      "name": "From seed to fruit",
      "cards": [
        {
          "type": "text",
          "value": "Plant the seed"
        },
        {
          "type": "text",
          "value": "Water it"
        },
        {
          "type": "text",
          "value": "Watch it grow"
        },
        {
          "type": "text",
          "value": "Pick the fruit"
        }
      ]
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/reorder/embed?p=-Nq8sample_activity_key",
  "message": "Reorder game created successfully"
}
Questions et réponses

Quiz

Des questions à choix multiple et des questions ouvertes, notées au fil du jeu.

#
POST /api/public/v1/quiz Au moins 1 dans items
Contenu

Un tableau de questions. Les questions à choix multiple portent leurs réponses ; les questions ouvertes portent la réponse que tu acceptes.

Nom de repli : “Quiz API”

Bon à savoir
  • question_type vaut soit "multiple_choice", où la bonne option porte isCorrect à true, soit "open_answer", qui utilise correct_answer à la place. Omis, il est traité comme un choix multiple.
  • Le point de terminaison quiz transmet settings tel quel sous forme de blocs de paramètres d'activité : ce n'est donc pas l'endroit pour des options en vrac — ajuste le quiz dans l'éditeur ensuite.
Exemple de requête
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": "fr",
  "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."
    }
  ]
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/quiz/embed?p=-Nq8sample_activity_key",
  "message": "Quiz created successfully"
}

Jeu de plateau

api_e_board_game

#
POST /api/public/v1/board-game Au moins 1 dans items
Contenu

api_c_board_game

Nom de repli : “Board Game API”

Bon à savoir
  • question_type vaut soit "multiple_choice", où la bonne option porte isCorrect à true, soit "open_answer", qui utilise correct_answer à la place. Omis, il est traité comme un choix multiple.
Paramètres lus
ChampTypeRôle
number_of_tiles
facultatif dans settings
number
numberLe nombre de cases du plateau. Entre 10 et 75.
Par défaut: 30
game_mode
facultatif dans settings
string
stringSi les joueurs foncent vers l'arrivée ou collectent des objets en chemin.
Au choix race_to_finishcollect_items
Par défaut: "race_to_finish"
Exemple de requête
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": "fr",
  "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"
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
  "message": "Board Game created successfully"
}
Phrases et nombres

Cryptogramme

Transforme une phrase en un code à casser, un caractère à la fois.

#
POST /api/public/v1/cryptogram Ne prend pas d'items
Contenu

Une phrase, dans le champ sentence. Ce point de terminaison ne prend pas d'items.

Nom de repli : “Cryptogram API”

Bon à savoir
  • Tout ce que tu envoies dans items est ignoré — le casse-tête est construit à partir de la seule phrase.
Paramètres lus
ChampTypeRôle
sentence
obligatoire
string
stringLa phrase à chiffrer. Les joueurs la décodent caractère par caractère.
helpers
facultatif dans settings
string
stringLes caractères offerts d'emblée pour donner un point d'entrée : aucun, les plus fréquents, les voyelles, ou ceux que tu listes toi-même.
Au choix nonemost_commonvowelscustom
Par défaut: "none"
character_list
facultatif dans settings
string
stringL'alphabet à partir duquel le chiffre est construit. Laissé vide, le chiffrement choisit le sien.
extra_letters
facultatif dans settings
string
stringLes caractères offerts quand helpers vaut "custom". Ignoré pour les autres modes d'aide.
hide_unused_characters
facultatif dans settings
boolean
booleanLaisse hors de la clé les caractères que la phrase n'utilise jamais.
Par défaut: false
Exemple de requête
POST cryptogram
curl -X POST https://puzzel.org/api/public/v1/cryptogram \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Cryptogram",
  "language": "fr",
  "sentence": "An apple a day keeps the doctor away",
  "settings": {
    "helpers": "vowels",
    "hide_unused_characters": false
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/cryptogram/embed?p=-Nq8sample_activity_key",
  "message": "Cryptogram created successfully"
}

Exercice de calcul

Cache une phrase derrière des calculs — résous le calcul, révèle la lettre.

#
POST /api/public/v1/calculation Ne prend pas d'items
Contenu

Une phrase, dans le champ sentence. Ce point de terminaison ne prend pas d'items.

Nom de repli : “Calculation Game API”

Bon à savoir
  • Si les contraintes sont trop strictes pour encoder la phrase, l'appel répond 400 en te demandant de les assouplir plutôt que d'enregistrer un casse-tête partiel.
Paramètres lus
ChampTypeRôle
sentence
obligatoire
string
stringLa phrase que les joueurs découvrent en résolvant les calculs.
difficulty_level
facultatif dans settings
number
numberLe résultat le plus élevé qu'un calcul peut avoir.
Au choix 20501001000
Par défaut: "100"
operators
facultatif dans settings
string[]
string[]Les opérations autorisées. x correspond à la multiplication, : à la division.
Au choix +-x:
Par défaut: ["+", "-", "x", ":"]
max_operations
facultatif dans settings
number
numberLe nombre d'opérations qu'un même calcul peut enchaîner.
Au choix 123
Par défaut: 1
number_difficulty
facultatif dans settings
number
numberPlafonne les nombres à l'intérieur d'un calcul. De 5 à 1000, au choix.
Par défaut: 100
Exemple de requête
POST calculation
curl -X POST https://puzzel.org/api/public/v1/calculation \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Calculation Game",
  "language": "fr",
  "sentence": "Fruit salad for everyone",
  "settings": {
    "difficulty_level": "100",
    "operators": [
      "+",
      "-",
      "x",
      ":"
    ],
    "max_operations": 1,
    "number_difficulty": 100
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/calculation/embed?p=-Nq8sample_activity_key",
  "message": "Calculation game created successfully"
}

Sudoku

Génère une grille résolue, puis en retire des chiffres.

#
POST /api/public/v1/sudoku Ne prend pas d'items
Contenu

Rien. Tout le casse-tête découle de ses deux paramètres.

Nom de repli : “Sudoku API”

Bon à savoir
  • N'envoie ni items ni sentence — la taille et la difficulté sont toute l'entrée.
  • L'éditeur ne propose la difficulté que pour 2x3, 3x3 et 3x4. L'API l'applique à toutes les tailles, 2x2 et 4x4 compris.
Paramètres lus
ChampTypeRôle
size
facultatif dans settings
string
stringLa taille d'un bloc, écrite en lignes par colonnes — 3x3 donne la grille classique 9x9. Le point de terminaison vérifie seulement que ça se lit comme deux nombres : reste donc sur les tailles proposées par l'éditeur.
Au choix 2x22x33x33x44x4
Par défaut: "3x3"
difficulty_level
facultatif dans settings
string
stringLe nombre de chiffres laissés sur la grille au départ.
Au choix easynormalhard
Par défaut: "normal"
Exemple de requête
POST sudoku
curl -X POST https://puzzel.org/api/public/v1/sudoku \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Sudoku",
  "language": "fr",
  "settings": {
    "size": "3x3",
    "difficulty_level": "normal"
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/sudoku/embed?p=-Nq8sample_activity_key",
  "message": "Sudoku created successfully"
}
Images

Puzzle

Découpe une image en pièces à rassembler par glisser-déposer.

#
POST /api/public/v1/jigsaw Ne prend pas d'items
Contenu

Une URL d'image, dans le champ image. Ce point de terminaison ne prend pas d'items.

Nom de repli : “Jigsaw Game API”

Bon à savoir
  • L'API crée toujours un puzzle de 4 sur 4. Le nombre de pièces, les pièces irrégulières et les bords droits sont des paramètres de l'éditeur — envoyer rows ou columns ici ne fait rien.
  • L'URL est enregistrée telle que tu l'as envoyée et le fichier n'est jamais copié : elle doit donc rester accessible publiquement aussi longtemps que l'activité est jouée.
Paramètres lus
ChampTypeRôle
image
obligatoire
string
stringURL absolue de l'image à découper. Envoyée au premier niveau, pas dans settings.
Exemple de requête
POST jigsaw
curl -X POST https://puzzel.org/api/public/v1/jigsaw \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Jigsaw Game",
  "language": "fr",
  "image": "https://example.com/orchard.jpg"
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/jigsaw/embed?p=-Nq8sample_activity_key",
  "message": "Jigsaw game created successfully"
}

Taquin

Mélange une image en tuiles qui glissent jusqu'à leur place.

#
POST /api/public/v1/slidingpuzzle Ne prend pas d'items
Contenu

Une URL d'image, dans settings. Ce point de terminaison ne prend pas d'items.

Nom de repli : “Sliding Puzzle API”

Bon à savoir
  • Contrairement au puzzle, ce point de terminaison lit son image dans settings.image. Un champ image au premier niveau est ignoré et l'appel répond 400.
  • L'URL est enregistrée telle que tu l'as envoyée et le fichier n'est jamais copié : elle doit donc rester accessible publiquement aussi longtemps que l'activité est jouée.
Paramètres lus
ChampTypeRôle
image
obligatoire dans settings
string
stringURL absolue de l'image à mélanger. Contrairement à celle du puzzle, celle-ci se place dans settings.
Exemple de requête
POST slidingpuzzle
curl -X POST https://puzzel.org/api/public/v1/slidingpuzzle \
  -H "Content-Type: application/json" \
  -d '{
  "account_api_key": "YOUR_API_KEY",
  "email": "you@example.com",
  "title": "Sliding Puzzle",
  "language": "fr",
  "settings": {
    "image": "https://example.com/orchard.jpg"
  }
}'
Succès
{
  "success": true,
  "id": "-Nq8sample_activity_key",
  "url": "https://puzzel.org/en/slidingpuzzle/embed?p=-Nq8sample_activity_key",
  "message": "Sliding puzzle created successfully"
}

Quelque chose ne se comporte pas comme prévu ?

Envoie la requête que tu as tentée et l'erreur reçue, et tu auras une vraie réponse, de la personne qui a écrit le point de terminaison.

Écrire au support