Satu POST per jenis aktivitas. Kirim kontenmu sebagai JSON, lalu kamu mendapat satu aktivitas di akun Puzzel.org milikmu beserta URL yang bisa kamu berikan ke pemain atau kamu sematkan di iframe.
URL dasar
https://puzzel.org/api/public/v1
Autentikasi
Kunci + email di body
Endpoint
20 jenis aktivitas
Kuota
10 aktivitas per hari
Permintaan pertamamu
Tidak ada yang perlu dipasang dan tidak ada handshake: kirim body JSON berisi kuncimu, emailmu, dan kontenmu. Responsnya membawa kunci aktivitas baru itu dan URL tempat aktivitas itu dimainkan.
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": "id",
"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"
}
]
}'
Setiap contoh di halaman ini adalah permintaan lengkap yang bisa langsung dijalankan. Ganti dengan kunci dan kontenmu sendiri, dan contoh itu langsung berfungsi.
Autentikasi
Tidak ada header dan tidak ada bearer token. Kedua kredensial dikirim di body JSON setiap permintaan, dan kunci hanya diterima untuk akun yang memiliki email tersebut.
Kolom
Tipe
Fungsinya
account_api_key
wajib
string
string
Kunci API akunmu. Dikirim di body, bukan di header.
email
wajib
string
string
Alamat email yang kamu pakai untuk masuk ke akun Puzzel.org. Kunci hanya berlaku bersama alamat itu.
Kuncimu ada di bagian akun pada dasbormu, di balik tombol Tampilkan.
Perlakukan kunci itu seperti kata sandi. Kunci itu membuat dan menimpa aktivitas di akunmu, jadi simpan di sisi server dan jauhkan dari apa pun yang bisa dibaca peramban.
Body permintaan
Setiap endpoint menerima lima kolom yang sama. Yang berbeda adalah kolom konten di bawahnya: sebagian besar menerima array items, beberapa menerima satu sentence atau satu image, dan Sudoku tidak menerima apa pun.
Kolom
Tipe
Fungsinya
account_api_key
wajib
string
string
Kunci API akunmu. Dikirim di body, bukan di header.
email
wajib
string
string
Alamat email yang kamu pakai untuk masuk ke akun Puzzel.org. Kunci hanya berlaku bersama alamat itu.
title
opsional
string
string
Nama yang didapat aktivitas di dasbormu. Kosongkan dan endpoint memakai nama cadangannya sendiri.
language
opsional
string
string
Hanya menentukan lokal di URL yang kamu terima — kolom ini tidak menerjemahkan apa pun yang kamu kirim. Pencarian kata juga membacanya untuk mengganti huruf pengisinya menjadi huruf Arab bila nilainya "ar".
Bawaan: "en"
activity_key
opsional
string
string
Kosongkan untuk membuat aktivitas baru. Kirim kunci aktivitas yang sudah kamu miliki, dan aktivitas itulah yang dibangun ulang.
settings adalah objek berisi opsi per endpoint. Opsi mana yang dibaca sebuah endpoint dicantumkan bersamanya di bawah; apa pun lain yang kamu taruh di sana diabaikan.
Apa yang dikembalikan
Panggilan yang berhasil menjawab 200 dengan kunci aktivitas baru itu dan URL tempat aktivitas itu dimainkan. Selain itu, jawabannya berisi success bernilai false dan satu string error.
{
"success": false,
"error": "Invalid Email or API Key"
}
url yang kamu terima adalah tampilan sematan. Ganti embed dengan play untuk membukanya satu halaman penuh, atau dengan build untuk membukanya di editor — kunci setelah p= tetap sama.
Membuat vs. memperbarui
Kirim activity_key dan aktivitas di baliknya dibangun ulang di tempat: kontennya diganti, nama dan cap versinya disegarkan, dan kuncinya sendiri tetap sama — jadi tautan dan sematan yang sudah kamu bagikan tetap berfungsi. Hasil, penempatan folder, dan setiap pengaturan yang tidak ditulis sendiri oleh endpoint dibiarkan apa adanya.
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 diterapkan pada setiap pembaruan, termasuk nilai bawaannya — kosongkan dan aktivitas itu akan diganti namanya menjadi nama cadangan endpoint tersebut.
Blok pengaturan yang ditulis sendiri oleh sebuah endpoint ditulis ulang dari nol, jadi pembaruan juga mengembalikan blok itu ke nilai yang kamu kirim, atau ke nilai bawaan endpoint.
Kamu hanya bisa memperbarui aktivitas yang dimiliki akunmu sendiri. Kunci milik orang lain dijawab 403.
Pembaruan berbiaya sama dengan pembuatan: satu panggilan dari kuota hari ini.
Batas permintaan
10
10 aktivitas per akun per hari
Setiap panggilan yang berhasil ikut dihitung, baik pembuatan maupun pembaruan. Lewati batasnya dan permintaan berikutnya dijawab 429 sampai penghitungnya dinolkan.
Penghitung dikosongkan sekali sehari oleh tugas terjadwal, bukan pada jendela 24 jam berjalan.
Kesalahan
Kesalahan selalu datang sebagai JSON dengan dua kolom yang sama, tidak pernah sebagai halaman HTML. String error ditulis untuk dibaca manusia — string itu menyebut kolom atau batas yang gagal.
Status
Artinya
400
Bad Request
Ada isi body yang hilang, salah bentuk, atau di luar jangkauan. Pesannya menyebut kolom yang bermasalah.
401
Unauthorized
Email tidak dikenal, atau kunci bukan milik akun itu.
403
Forbidden
activity_key yang kamu kirim milik akun lain.
429
Too Many Requests
Kuota hari ini sudah habis. Kuota dikosongkan sekali sehari.
500
Server Error
Generator tidak bisa membangun teka-teki dari yang kamu kirim — biasanya karena katanya terlalu sedikit, atau kata yang tidak bisa disusun bersama.
Endpoint
Satu path per jenis aktivitas, semuanya POST, semuanya di bawah URL dasar yang sama. Masing-masing mencantumkan konten yang dibutuhkan, pengaturan yang dibaca, dan satu permintaan yang bisa kamu jalankan.
Kata & huruf
F
I
G
A
T
R
I
P
M
Teka-teki silang
Menautkan jawabanmu menjadi satu kisi dan menomori deskripsinya untukmu.
Array kata. Setiap entri memasangkan jawaban dengan deskripsi yang menunjuk ke jawaban itu.
Memakai nama cadangan “Crossword API”
Perlu diketahui
Jawaban yang lebih pendek dari dua karakter dibuang sebelum kisi dibangun, dan minimal dua jawaban harus lolos dari penyaringan itu.
Jawaban diubah menjadi huruf kapital dan generator mendapat dua puluh percobaan untuk memuatnya. Kalau satu kata pun tidak bisa ditempatkan, panggilan dijawab 500.
Contoh permintaan
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": "id",
"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"
}
]
}'
Array kata. Teks deskripsi menjadi bank kata yang dipakai pemain.
Memakai nama cadangan “Wordseeker API”
Perlu diketahui
Jawaban di bawah dua karakter dibuang, dan setiap jawaban diubah menjadi huruf kapital sebelum masuk ke kisi.
Kisi diisi dengan huruf Latin kecuali language bernilai "ar", yang mengganti huruf pengisinya menjadi huruf Arab.
Pengaturan yang dibaca
Kolom
Tipe
Fungsinya
hidden_solution
opsionaldi settings
string
string
Huruf yang tersisa mengeja kata ini. Mengisinya juga memberi tahu generator untuk memuat solusinya lebih dulu, alih-alih menjejalkan sebanyak mungkin kata.
directions
opsionaldi settings
string[]
string[]
Ke arah mana saja sebuah kata boleh membentang. Kosongkan dan kata hanya membentang ke timur, tenggara, dan selatan.
Salah satu dariwesteastnorthsouthnorthwestnortheastsouthwestsoutheast
Bawaan: ["east", "southeast", "south"]
template
opsionaldi settings
string
string
Memotong kisi menjadi sebuah bentuk alih-alih membiarkannya persegi.
Salah satu darisquarecirclecrossdiamondpyramidsmileystarcross_plus
Contoh permintaan
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": "id",
"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/typing-practiceMinimal 1 di items
Konten
api_c_typing_practice
Memakai nama cadangan “Typing Practice API”
Contoh permintaan
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": "id",
"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"
}
]
}'
Berhasil
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/typing-practice/embed?p=-Nq8sample_activity_key",
"message": "Typing Practice created successfully"
}
Array pasangan. Setiap pasangan berisi dua kartu yang saling melengkapi.
Memakai nama cadangan “Memory Game API”
Perlu diketahui
Kartu adalah objek dengan type dan value. Pakai "text" untuk kata, atau "image", "audio", "youtube" atau "link" dengan URL di value, dan tambahkan alt untuk deskripsinya.
POST/api/public/v1/matching-pairsMinimal 2 di items
Konten
api_c_matching_pairs
Memakai nama cadangan “Matching Game API”
Perlu diketahui
Kartu adalah objek dengan type dan value. Pakai "text" untuk kata, atau "image", "audio", "youtube" atau "link" dengan URL di value, dan tambahkan alt untuk deskripsinya.
Endpoint menyimpan sebanyak apa pun kartu yang kamu kirim, jadi kirim tepat dua per entri — depan, lalu belakang.
Kartu adalah objek dengan type dan value. Pakai "text" untuk kata, atau "image", "audio", "youtube" atau "link" dengan URL di value, dan tambahkan alt untuk deskripsinya.
Array kategori, masing-masing dengan nama dan kartu yang termasuk di dalamnya.
Memakai nama cadangan “Categorize Game API”
Perlu diketahui
Kategori yang dikirim tanpa nama disimpan sebagai “Untitled Category”, jadi selalu kirim namanya.
Kartu adalah objek dengan type dan value. Pakai "text" untuk kata, atau "image", "audio", "youtube" atau "link" dengan URL di value, dan tambahkan alt untuk deskripsinya.
Array rangkaian. Masing-masing memuat kartunya dalam urutan yang benar.
Memakai nama cadangan “Reorder Game API”
Perlu diketahui
Urutan yang kamu kirim disimpan sebagai urutan yang benar — nomor satu lebih dulu.
Kartu adalah objek dengan type dan value. Pakai "text" untuk kata, atau "image", "audio", "youtube" atau "link" dengan URL di value, dan tambahkan alt untuk deskripsinya.
Array pertanyaan. Pertanyaan pilihan ganda membawa pilihan jawabannya; pertanyaan terbuka membawa jawaban yang kamu terima.
Memakai nama cadangan “Quiz API”
Perlu diketahui
question_type bernilai "multiple_choice", yang opsi benarnya membawa isCorrect true, atau "open_answer", yang memakai correct_answer. Kalau dikosongkan, nilainya dianggap pilihan ganda.
Endpoint Quiz meneruskan settings apa adanya sebagai blok pengaturan aktivitas, jadi tempat ini bukan untuk opsi lepasan — sesuaikan Quiz di editor setelahnya.
Contoh permintaan
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": "id",
"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 bernilai "multiple_choice", yang opsi benarnya membawa isCorrect true, atau "open_answer", yang memakai correct_answer. Kalau dikosongkan, nilainya dianggap pilihan ganda.
Pengaturan yang dibaca
Kolom
Tipe
Fungsinya
number_of_tiles
opsionaldi settings
number
number
Berapa banyak petak yang dimiliki papan. Antara 10 dan 75.
Bawaan: 30
game_mode
opsionaldi settings
string
string
Apakah pemain berlomba ke garis akhir atau mengumpulkan benda di sepanjang jalan.
Salah satu darirace_to_finishcollect_items
Bawaan: "race_to_finish"
Contoh permintaan
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": "id",
"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"
}
}'
Berhasil
{
"success": true,
"id": "-Nq8sample_activity_key",
"url": "https://puzzel.org/en/board-game/embed?p=-Nq8sample_activity_key",
"message": "Board Game created successfully"
}
POST/api/public/v1/calculationTidak menerima items
Konten
Satu kalimat, di kolom sentence. Endpoint ini tidak menerima items.
Memakai nama cadangan “Calculation Game API”
Perlu diketahui
Kalau batasannya terlalu ketat untuk menyandikan kalimat itu, panggilan dijawab 400 yang memintamu melonggarkannya, alih-alih menyimpan teka-teki setengah jadi.
Pengaturan yang dibaca
Kolom
Tipe
Fungsinya
sentence
wajib
string
string
Kalimat yang tersingkap saat pemain menyelesaikan soal hitungnya.
difficulty_level
opsionaldi settings
number
number
Jawaban tertinggi yang boleh dimiliki sebuah soal hitung.
Salah satu dari20501001000
Bawaan: "100"
operators
opsionaldi settings
string[]
string[]
Operasi mana saja yang boleh muncul. x adalah kali, : adalah bagi.
Salah satu dari+-x:
Bawaan: ["+", "-", "x", ":"]
max_operations
opsionaldi settings
number
number
Berapa banyak operasi yang boleh dirangkai dalam satu soal hitung.
Salah satu dari123
Bawaan: 1
number_difficulty
opsionaldi settings
number
number
Membatasi setiap angka di dalam satu soal hitung. Antara 5 sampai 1000.
Tidak ada. Seluruh teka-teki lahir dari dua pengaturannya.
Memakai nama cadangan “Sudoku API”
Perlu diketahui
Jangan kirim items dan jangan kirim sentence — size dan difficulty adalah seluruh masukannya.
Editor hanya menyediakan tingkat kesulitan untuk 2x3, 3x3, dan 3x4. API menerapkannya ke semua ukuran, termasuk 2x2 dan 4x4.
Pengaturan yang dibaca
Kolom
Tipe
Fungsinya
size
opsionaldi settings
string
string
Ukuran satu blok, ditulis sebagai baris kali kolom — 3x3 menghasilkan kisi 9x9 yang klasik. Endpoint hanya memeriksa bahwa nilainya terbaca sebagai dua angka, jadi gunakan saja ukuran yang disediakan editor.
Salah satu dari2x22x33x33x44x4
Bawaan: "3x3"
difficulty_level
opsionaldi settings
string
string
Berapa banyak angka yang ditinggalkan di papan sebagai titik awal.
Satu URL gambar, di kolom image. Endpoint ini tidak menerima items.
Memakai nama cadangan “Jigsaw Game API”
Perlu diketahui
API selalu membuat Puzzle 4 kali 4. Jumlah keping, keping tak beraturan, dan tepi rata adalah pengaturan editor — mengirim rows atau columns di sini tidak berpengaruh.
URL disimpan persis seperti yang kamu kirim dan berkasnya tidak pernah disalin, jadi URL itu harus tetap bisa diakses publik selama aktivitasnya masih dimainkan.
Pengaturan yang dibaca
Kolom
Tipe
Fungsinya
image
wajib
string
string
URL absolut gambar yang akan dipotong. Dikirim di tingkat teratas, bukan di dalam settings.
POST/api/public/v1/slidingpuzzleTidak menerima items
Konten
Satu URL gambar, di dalam settings. Endpoint ini tidak menerima items.
Memakai nama cadangan “Sliding Puzzle API”
Perlu diketahui
Berbeda dengan Puzzle, endpoint ini membaca gambarnya dari settings.image. Kolom image di tingkat teratas diabaikan dan panggilan dijawab 400.
URL disimpan persis seperti yang kamu kirim dan berkasnya tidak pernah disalin, jadi URL itu harus tetap bisa diakses publik selama aktivitasnya masih dimainkan.
Pengaturan yang dibaca
Kolom
Tipe
Fungsinya
image
wajibdi settings
string
string
URL absolut gambar yang akan diacak. Berbeda dengan milik Puzzle, yang ini berada di dalam settings.