Knowledge API
Buka di CMSKnowledge API memungkinkan sistem Anda sendiri mengelola dokumen knowledge sebuah agent tanpa membuka CMS. Script, job terjadwal, atau aplikasi lain yang memegang salah satu API key agent dapat menampilkan daftar dokumen, meng-upload dokumen baru, memantau pemrosesannya, mengaktifkan atau menonaktifkannya, dan menghapusnya.
Gunakan fitur ini jika dokumen Anda sudah tersimpan di tempat lain dan Anda ingin agent selalu sinkron dengan sumber tersebut, misalnya:
- Sistem manajemen dokumen (DMS) yang mengirim setiap SOP yang baru disetujui ke agent.
- Job ekspor SharePoint setiap malam yang meng-upload kebijakan yang berubah dan memensiunkan versi lama.
- Pipeline CI yang menerbitkan manual produk atau release notes ke agent setiap kali di-merge.
API ini bekerja pada dokumen yang sama dengan yang Anda lihat di Knowledge โ Documents: dokumen yang di-upload lewat API juga muncul di sana dan melalui pemrosesan yang sama. API ini hanya mencakup dokumen (PDF, Markdown, dan teks biasa), tidak termasuk website atau video.
Dalam contoh Mengajari Agent Anda, Kirana Group menyimpan SOP-nya di DMS sendiri. Alih-alih meng-upload SOP-FIN-007 "Project and Capex Approval Policy" ke Atlas secara manual, DMS mengirimkannya lewat Knowledge API begitu Finance menyetujui versi baru.
Sebelum memulai
- Hanya untuk service agent. Knowledge API tersedia untuk service agent. Personal agent tidak bisa menyalakannya, dan mengubah agent dari Service ke Personal akan mematikan API serta mencabut semua key-nya. Lihat Personal Agent vs Service Agent jika Anda belum yakin jenis agent Anda.
- Siapa yang bisa menyalakannya. Contributor agent serta Owner dan Admin organisasi.
- Mati secara default. Setiap agent dimulai dengan Knowledge API dalam keadaan mati. Tidak ada yang bisa memanggilnya sampai seseorang menyalakannya dan membuat key.
- Baca Dokumen terlebih dahulu. API mengikuti aturan yang sama untuk status, mode pemrosesan, author, dan permission.
- Periksa Knowledge โ Retrieval: agent hanya menjawab dari dokumen jika Enable reference menyala. Lihat Retrieval.
Menyalakan API dan membuat key
Di CMS, buka Knowledge โ Knowledge API di sidebar agent Anda.
-
Nyalakan Knowledge API. Halaman ini menampilkan base URL untuk agent ini; salin, karena Anda membutuhkannya di setiap request.
-
Agent punya dua slot key, Primary dan Secondary. Di salah satunya, buat key dan isi:
Field Yang diisi Name Label yang menunjukkan sistem mana yang memakai key, misalnya Kirana DMS sync. Maksimal 80 karakter.Scopes Apa saja yang boleh dilakukan key ini (lihat di bawah). Expiry 7, 14, 30, 90, 180, atau 365 hari, atau tidak pernah. Setelah tanggal itu key berhenti bekerja. -
Buat key lalu segera salin. Key lengkap (diawali
qk_) hanya ditampilkan satu kali. Qlar hanya menyimpan sidik jarinya, sehingga baik Anda maupun tim support Qlar tidak bisa melihatnya lagi. Setelah itu halaman hanya menampilkan empat karakter terakhir, scope, tanggal kedaluwarsa, dan kapan key terakhir dipakai. -
Simpan key di tempat penyimpanan rahasia sistem Anda (misalnya vault, secret pipeline, atau environment variable di server yang menjalankan sinkronisasi).
Scope
| Scope | Mengizinkan | Catatan |
|---|---|---|
read | Menampilkan daftar dokumen, membaca status dokumen, dan membaca log pemrosesannya. | Selalu disertakan. |
write | Meng-upload dokumen, mengaktifkan, menonaktifkan, memproses ulang, membatalkan, dan menghapusnya. | Menyala secara default. Matikan untuk key yang hanya memantau. |
purge | Menghapus dokumen secara permanen. | Mati secara default. Purge tidak bisa dibatalkan. Berikan hanya pada key yang memang perlu membersihkan dokumen. |
Mengganti atau mencabut key
- Key hilang? Key tidak bisa dilihat lagi. Buat key baru di slot yang sama. Key baru langsung menggantikan key lama, sehingga sistem yang masih memakai key lama akan mendapat error
401. - Revoke (cabut) key untuk menghentikannya saat itu juga, misalnya jika key mungkin bocor atau sebuah sistem sudah tidak dipakai. Key yang sudah dicabut tidak bisa dinyalakan lagi; buat key baru jika Anda membutuhkan akses lagi.
- Matikan API untuk menghentikan semua key agent sekaligus. Saat dinyalakan lagi, key yang masih berlaku akan bekerja kembali.
Merotasi key tanpa downtime
Dua slot ini ada supaya Anda bisa mengganti key tanpa mengganggu sinkronisasi:
- Sistem Anda memakai key Primary.
- Buat key di slot Secondary.
- Perbarui sistem Anda agar memakai key Secondary, lalu pastikan panggilannya berhasil (waktu terakhir dipakai pada key dan log aktivitas menunjukkannya).
- Revoke key Primary.
Rotasi berikutnya, lakukan hal yang sama ke arah sebaliknya. Dikombinasikan dengan expiry, cara ini membuat setiap key berumur pendek.
Base URL dan autentikasi
Semua endpoint berada di bawah base URL agent. URL ini juga tampil, siap disalin, di halaman Knowledge โ Knowledge API:
{base-url} = https://api.qlar.ai/cms/api/knowledge/v1/agents/{agentId}
Contoh di halaman ini memakai dua variabel shell, sehingga key tidak pernah tertulis langsung di perintah:
export QLAR_BASE_URL="https://api.qlar.ai/cms/api/knowledge/v1/agents/YOUR_AGENT_ID"
export QLAR_KNOWLEDGE_KEY="qk_..." # ambil dari tempat penyimpanan rahasia Anda
Kirim key di header X-Api-Key pada setiap request:
X-Api-Key: qk_...
Key Primary dan Secondary bekerja dengan cara yang sama; pakai yang sedang aktif. Sebuah key hanya berlaku untuk agent tempat key itu dibuat.
Key yang tidak ada, salah, kedaluwarsa, atau sudah dicabut, agent yang tidak dikenal, dan agent yang Knowledge API-nya dimatikan, semuanya mendapat jawaban yang sama: 401 unauthorized. Ini disengaja: API tidak membocorkan agent mana yang ada atau bagian mana dari key yang salah.
Endpoint
| Method | Path | Scope | Fungsi |
|---|---|---|---|
GET | /documents | read | Menampilkan daftar dokumen |
POST | /documents | write | Meng-upload dokumen |
GET | /documents/{documentId} | read | Mengambil satu dokumen beserta statusnya |
GET | /documents/{documentId}/logs | read | Mengambil log pemrosesan |
POST | /documents/{documentId}/activate | write | Mengaktifkan dokumen |
POST | /documents/{documentId}/deactivate | write | Menonaktifkan dokumen |
POST | /documents/{documentId}/retry | write | Memproses ulang dokumen yang gagal atau dibatalkan |
POST | /documents/{documentId}/cancel | write | Menghentikan pemrosesan |
DELETE | /documents/{documentId} | write | Menghapus dokumen (tetap terdaftar sebagai Deleted) |
POST | /documents/{documentId}/purge | purge | Menghapus dokumen secara permanen |
Semua path relatif terhadap {base-url}. Respons berformat JSON. Waktu dalam UTC dengan format ISO 8601.
Objek dokumen
Sebagian besar endpoint mengembalikan sebuah dokumen:
{
"id": "5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b",
"code": "SOP-FIN-007",
"title": "Project and Capex Approval Policy",
"fileType": "PDF",
"status": "Active",
"inProgress": false,
"statusMessage": "Done processing. Text Chunks: 12, Table Chunks: 2. Total: 14",
"chunkingStrategy": "adaptive",
"tag": "finance",
"sourceUri": "https://dms.kirana.example/sop/SOP-FIN-007",
"permissions": [],
"totalChunks": 14,
"activeChunks": 14,
"updatedAt": "2026-11-06T03:15:42Z"
}
| Field | Keterangan |
|---|---|
id | ID dokumen. Pakai di path endpoint lainnya. |
code | Kode unik dokumen di dalam agent, misalnya nomor SOP. |
title | Judul dokumen. |
fileType | PDF, TXT, atau MD. |
status | Status saat ini. Lihat Status dokumen. |
inProgress | true selama status masih berubah dengan sendirinya. Lanjutkan polling sampai bernilai false. |
statusMessage | Pesan pemrosesan terakhir. |
chunkingStrategy | Mode pemrosesan yang dipakai (lihat parameter upload). |
tag | Tag bebas milik Anda. |
sourceUri | Tautan ke dokumen asli. |
permissions | Kode permission yang membatasi siapa yang bisa mendapat jawaban dari dokumen ini. Kosong berarti semua orang. |
totalChunks, activeChunks | Jumlah chunk hasil pemecahan dokumen, dan berapa yang aktif. |
updatedAt | Kapan dokumen terakhir berubah. |
Daftar dokumen
Mengembalikan dokumen agent, yang terbaru lebih dulu.
GET {base-url}/documents
Query parameter:
| Parameter | Tipe | Keterangan |
|---|---|---|
status | string | Hanya dokumen dengan status ini, misalnya Active, Processing, atau Failed. |
search | string | Teks yang terdapat di judul. |
code | string | Teks yang terdapat di kode. |
limit | integer | Ukuran halaman, 1 sampai 100. Default: 20. |
cursor | string | Nilai nextCursor dari halaman sebelumnya. |
Contoh request:
curl "$QLAR_BASE_URL/documents?code=SOP-FIN&limit=20" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Contoh respons:
{
"items": [
{
"id": "5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b",
"code": "SOP-FIN-007",
"title": "Project and Capex Approval Policy",
"fileType": "PDF",
"status": "Active",
"inProgress": false,
"statusMessage": "Done processing. Text Chunks: 12, Table Chunks: 2. Total: 14",
"chunkingStrategy": "adaptive",
"tag": "finance",
"sourceUri": "https://dms.kirana.example/sop/SOP-FIN-007",
"permissions": [],
"totalChunks": 14,
"activeChunks": 14,
"updatedAt": "2026-11-06T03:15:42Z"
}
],
"nextCursor": null
}
Jika nextCursor tidak null, kirim nilainya sebagai cursor untuk mengambil halaman berikutnya. Di halaman terakhir nilainya null.
Upload dokumen
Meng-upload file dan langsung memulai pemrosesannya. Setelah pemrosesan selesai, dokumen menjadi Active dengan sendirinya; Anda tidak perlu memanggil activate.
POST {base-url}/documents
Content-Type: multipart/form-data
Field form:
| Field | Wajib | Keterangan |
|---|---|---|
file | Ya | Dokumennya: PDF (.pdf), teks biasa (.txt), atau Markdown (.md). Maksimal 25 MB. Jenis file ditentukan dari ekstensi nama file. |
title | Tidak | Judul dokumen, maksimal 300 karakter. Default: nama file tanpa ekstensi. |
code | Tidak | Kode unik di dalam agent, maksimal 100 karakter, misalnya SOP-FIN-007. Kode acak dibuat jika dikosongkan. Kode yang sudah dipakai ditolak dengan 409 duplicate_code. |
authorCode | Tidak | Kode author yang sudah ada di agent (lihat Sitasi). Default: author Knowledge API (kode KNOWLEDGE-API), yang dibuat otomatis pada pemakaian pertama. |
chunkingStrategy | Tidak | Mode pemrosesan: adaptive (default, Automatic di CMS), semantic (Fast and basic), skimming (Long structured content), regulatory (Legal documents), atau fact-sheet (Short fact sheets). Lihat Mode pemrosesan. |
tag | Tidak | Tag bebas. |
sourceUri | Tidak | Tautan ke dokumen asli, ditampilkan bersama sitasi. |
permissions | Tidak | Kode permission yang boleh melihat dokumen, sebagai array JSON (["finance","management"]) atau daftar dipisah koma (finance,management). Setiap kode harus sudah ada di agent. Lihat Knowledge Permissions. |
parameters | Tidak | Pengaturan pemrosesan lanjutan sebagai objek JSON. Kosongkan untuk memakai default, yang cocok untuk sebagian besar dokumen. |
Contoh request:
curl -X POST "$QLAR_BASE_URL/documents" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY" \
-F file=@sop-fin-007.pdf \
-F code=SOP-FIN-007 \
-F "title=Project and Capex Approval Policy" \
-F authorCode=KG-FIN \
-F tag=finance \
-F sourceUri=https://dms.kirana.example/sop/SOP-FIN-007
Respons: 201 Created dengan dokumen baru, biasanya berstatus Processing:
{
"id": "5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b",
"code": "SOP-FIN-007",
"title": "Project and Capex Approval Policy",
"fileType": "PDF",
"status": "Processing",
"inProgress": true,
"statusMessage": "",
"chunkingStrategy": "adaptive",
"tag": "finance",
"sourceUri": "https://dms.kirana.example/sop/SOP-FIN-007",
"permissions": [],
"totalChunks": 0,
"activeChunks": 0,
"updatedAt": "2026-11-06T03:12:08Z"
}
Simpan id-nya: Anda membutuhkannya untuk memantau dokumen dan mengubahnya nanti.
Catatan: memproses dokumen memakai AI dan menggunakan credit, sama seperti upload di CMS. Jika credit organisasi Anda habis, upload ditolak dengan
402 insufficient_credit. Pemeriksaan ini tidak berlaku jika organisasi memproses knowledge dengan model AI miliknya sendiri. Lihat Cara Kerja Credit.
Mengambil dokumen
Mengembalikan satu dokumen beserta status terkininya. Pakai untuk polling setelah upload atau perubahan.
GET {base-url}/documents/{documentId}
Contoh request:
curl "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: objek dokumen.
Mengambil log pemrosesan
Mengembalikan log pemrosesan (chunking) sebuah dokumen, entri terlama lebih dulu. Ini log yang sama dengan View log di halaman detail dokumen di CMS, dan tempat pertama yang perlu diperiksa jika dokumen berakhir Failed.
GET {base-url}/documents/{documentId}/logs
Contoh request:
curl "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b/logs" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Contoh respons:
{
"documentId": "5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b",
"status": "Active",
"entries": [
{ "timestamp": "2026-11-06T03:12:10Z", "message": "Routing to document processor" },
{ "timestamp": "2026-11-06T03:12:11Z", "message": "Detected file type: PDF" },
{ "timestamp": "2026-11-06T03:15:40Z", "message": "Done processing. Text Chunks: 12, Table Chunks: 2. Total: 14" }
]
}
Mengaktifkan dokumen
Memakai (kembali) dokumen yang berstatus Pending atau Inactive. Memanggilnya pada dokumen yang sudah Active (atau sedang diaktifkan) tidak mengubah apa pun dan bukan error.
POST {base-url}/documents/{documentId}/activate
Contoh request:
curl -X POST "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b/activate" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: dokumen, biasanya berstatus Activating atau Reactivating dengan inProgress: true. Lakukan polling sampai menjadi Active. Status lain ditolak dengan 409 invalid_state.
Menonaktifkan dokumen
Menghentikan agent memakai dokumen yang Active tanpa menghapusnya. Anda bisa mengaktifkannya lagi nanti. Memanggilnya pada dokumen yang sudah Inactive tidak mengubah apa pun.
POST {base-url}/documents/{documentId}/deactivate
Contoh request:
curl -X POST "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b/deactivate" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: dokumen, berstatus Deactivating lalu Inactive. Status lain ditolak dengan 409 invalid_state.
Memproses ulang dokumen
Memproses lagi dokumen yang Failed atau Cancelled, dengan file dan pengaturan yang sama.
POST {base-url}/documents/{documentId}/retry
Contoh request:
curl -X POST "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b/retry" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: dokumen, kembali berstatus Processing.
Membatalkan pemrosesan
Menghentikan dokumen yang masih Processing. Dokumen berakhir Cancelled; setelah itu Anda bisa memproses ulang atau mem-purge-nya.
POST {base-url}/documents/{documentId}/cancel
Contoh request:
curl -X POST "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b/cancel" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: dokumen, berstatus Cancelled.
Menghapus dokumen
Mengeluarkan dokumen dari pemakaian dan menandainya Deleted. Record-nya tetap ada di daftar (juga di CMS), sehingga Anda masih bisa melihatnya dan mem-purge-nya nanti.
DELETE {base-url}/documents/{documentId}
- Dokumen Active dinonaktifkan terlebih dahulu. Panggilan ini menunggu hingga 30 detik; jika setelah itu dokumen masih dalam proses dinonaktifkan, Anda mendapat
409 invalid_statedan cukup mencoba lagi. - Dokumen Failed atau Cancelled tidak punya apa pun untuk dihapus dan ditolak dengan
409 invalid_state: purge saja. - Dokumen yang masih berubah (misalnya Processing) ditolak dengan
409 invalid_state; tunggu sampai stabil, atau batalkan. - Menghapus dokumen yang sudah Deleted tidak mengubah apa pun.
Contoh request:
curl -X DELETE "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: dokumen, berstatus Deleted.
Purge dokumen
Menghapus dokumen secara permanen: record-nya, chunk-nya, log pemrosesannya, cover-nya, dan file sumbernya. Ini tidak bisa dibatalkan. Membutuhkan key dengan scope purge.
POST {base-url}/documents/{documentId}/purge
- Dokumen Active, Inactive, atau Pending dinonaktifkan dan dihapus terlebih dahulu, lalu di-purge, dalam satu panggilan.
- Dokumen yang masih Processing ditolak dengan
409 invalid_state. Batalkan dulu, atau tunggu sampai selesai.
Contoh request:
curl -X POST "$QLAR_BASE_URL/documents/5b7f0e2a-1c3d-4e8f-9a6b-2d4c8e0f1a3b/purge" \
-H "X-Api-Key: $QLAR_KNOWLEDGE_KEY"
Respons: 204 No Content.
Status dokumen
Field status memakai status yang sama dengan badge di halaman Documents.
| Status | inProgress | Artinya |
|---|---|---|
Initial | true | Record sudah ada dan file masih sedang disimpan. |
Processing | true | Dokumen sedang dipecah menjadi chunk. Agent belum bisa memakainya. |
Pending | true | Pemrosesan selesai; dokumen akan segera diaktifkan. |
Activating | true | Dokumen sedang mulai dipakai. |
Active | false | Agent memakai dokumen ini dalam jawabannya. |
Deactivating | true | Dokumen sedang dikeluarkan dari pemakaian. |
Inactive | false | Agent mengabaikan dokumen ini sampai diaktifkan lagi. |
Reactivating | true | Dokumen yang nonaktif sedang dipakai kembali. |
Failed | false | Pemrosesan gagal. Baca log pemrosesan, lalu proses ulang atau purge. |
Cancelled | false | Pemrosesan dibatalkan. Proses ulang atau purge. |
Deleted | false | Dokumen sudah dihapus dan tidak lagi dipakai. Masih bisa di-purge. |
Perjalanan umum sebuah dokumen:
- Upload โ
Processing - Pemrosesan selesai โ
PendingโActivatingโActive(semuanya otomatis) - Deactivate โ
DeactivatingโInactive; Activate โReactivatingโActive - Delete โ
Deleted - Purge โ hilang
Jika pemrosesan gagal atau dibatalkan, dokumen berhenti di Failed atau Cancelled. Dari sana, retry kembali ke langkah 1, dan purge menghapusnya.
Polling
Webhook belum tersedia. Untuk mengetahui kapan dokumen siap, lakukan polling ke Mengambil dokumen setiap 5 sampai 10 detik selama inProgress bernilai true. Berhenti saat nilainya false, lalu periksa status: Active berarti agent bisa memakainya, Failed berarti Anda perlu membaca log. PDF besar yang diproses dengan mode adaptive bisa memakan waktu beberapa menit.
Polling yang jauh lebih sering tidak mempercepat pemrosesan; itu hanya menghabiskan batas request Anda.
Delete dan purge
| Delete | Purge | |
|---|---|---|
| Endpoint | DELETE /documents/{documentId} | POST /documents/{documentId}/purge |
| Scope | write | purge |
| Agent memakai dokumen | Tidak | Tidak |
| Dokumen tetap ada di daftar | Ya, sebagai Deleted | Tidak |
| Chunk, log, dan file disimpan | Ya | Tidak, semuanya dihapus |
| Bisa dibatalkan | Record-nya tetap ada, tetapi dokumen yang sudah dihapus tidak bisa diaktifkan lagi; upload ulang file-nya untuk memakainya | Tidak, sama sekali |
| Dipakai untuk | Memensiunkan dokumen sambil tetap menyimpan jejaknya | Menghapus selamanya, misalnya konten usang atau salah upload, atau untuk membebaskan code-nya |
Pola sinkronisasi yang umum: saat versi baru sebuah SOP disetujui, upload dengan kode baru (misalnya SOP-FIN-007-v4), tunggu sampai Active, lalu hapus (delete) versi sebelumnya. Purge versi lama belakangan, di job pembersihan terpisah yang punya key sendiri dengan scope purge.
Batas
| Batas | Nilai | Jika terlampaui |
|---|---|---|
| Ukuran file | 25 MB per file | 413 file_too_large |
| Jenis file | PDF, TXT, MD | 415 unsupported_file_type |
| Request | 120 per menit per key | 429 rate_limited |
| Autentikasi gagal | 20 per menit per alamat IP | 429 rate_limited untuk alamat IP tersebut |
| Upload | 500 per hari per agent (reset pukul 00:00 UTC) | 429 rate_limited |
Setiap jawaban 429 menyertakan header Retry-After berisi jumlah detik yang harus ditunggu. Tunggu setidaknya selama itu sebelum mencoba lagi; jangan mengulang dalam loop yang rapat.
Upload memakai credit; jika credit organisasi habis, upload ditolak dengan 402 insufficient_credit (lihat Upload dokumen).
Error
Error memakai kode status HTTP dan body JSON berisi code yang bisa dibaca mesin serta message yang bisa dibaca manusia:
{
"error": {
"code": "invalid_state",
"message": "Only an Active document can be deactivated; it is Processing."
}
}
Bangun logika Anda berdasarkan code. Isi message bisa berubah dan ditujukan untuk manusia (dalam bahasa Inggris).
| Status HTTP | code | Artinya |
|---|---|---|
| 400 | invalid_request | Parameter tidak ada atau tidak valid, misalnya tanpa file, chunkingStrategy yang tidak dikenal, kode author atau permission yang tidak ada di agent, atau cursor yang tidak valid. |
| 401 | unauthorized | Key tidak ada, salah, kedaluwarsa, atau sudah dicabut, agent tidak ada, atau Knowledge API-nya dimatikan. |
| 402 | insufficient_credit | Credit organisasi habis. Isi ulang, lalu upload lagi. |
| 403 | insufficient_scope | Key tidak punya scope yang dibutuhkan endpoint ini (misalnya purge). |
| 403 | forbidden | Tindakan ini tidak diizinkan untuk agent ini. |
| 404 | not_found | Tidak ada dokumen dengan ID ini di agent ini. |
| 409 | duplicate_code | Dokumen lain di agent ini sudah memakai code tersebut. |
| 409 | invalid_state | Tindakan tidak sesuai dengan status dokumen saat ini, misalnya menonaktifkan dokumen yang masih Processing. |
| 413 | file_too_large | File lebih besar dari 25 MB. |
| 415 | unsupported_file_type | File bukan PDF, TXT, atau MD. |
| 429 | rate_limited | Batas terlampaui. Tunggu sejumlah detik di Retry-After. |
| 500 | internal_error | Terjadi masalah di sisi Qlar. Coba lagi nanti. |
Log aktivitas
Setiap panggilan API, berhasil maupun gagal, dan setiap perubahan pengaturan dicatat di log aktivitas agent. Contributor melihatnya di halaman Knowledge โ Knowledge API, dan bisa memfilternya berdasarkan jenis (panggilan API atau perubahan pengaturan), hasil (berhasil atau gagal), dokumen, dan tanggal.
| Dicatat untuk panggilan API | Dicatat untuk perubahan pengaturan |
|---|---|
Waktu, aksi (misalnya documents.add), dan hasil | Waktu dan aksi: API dinyalakan atau dimatikan, key dibuat, diganti, atau dicabut |
| Method HTTP, path, kode status, dan durasi | User yang melakukan perubahan |
| Slot key, nama key, dan empat karakter terakhir key | Slot, nama, scope, dan expiry key |
| Alamat IP dan user agent pemanggil | |
| ID dan kode dokumen, kode error dan pesannya |
Entri disimpan selama 90 hari. Log tidak pernah berisi API key maupun isi file Anda.
Pakai log ini untuk memastikan key baru bekerja setelah rotasi, melihat sistem mana yang meng-upload sebuah dokumen, dan mendeteksi panggilan dari alamat IP yang tidak terduga.
Praktik keamanan terbaik
- Simpan key di server. Panggil Knowledge API hanya dari kode back-end, job terjadwal, atau pipeline. Jangan pernah menaruh key di halaman browser, aplikasi mobile, aplikasi desktop yang Anda distribusikan, atau repository publik: siapa pun yang bisa membaca kodenya bisa memakai key tersebut.
- Simpan sebagai rahasia. Pakai vault atau secret variable pipeline Anda, bukan file konfigurasi yang masuk ke source control. Jangan mencetak key di log.
- Beri setiap sistem scope-nya sendiri. Job pemantauan cukup
read. Job sinkronisasi butuhwrite. Berikanpurgehanya pada job yang memang harus menghapus dokumen selamanya. - Atur expiry. Key yang kedaluwarsa membatasi dampak kebocoran yang tidak Anda sadari. Rencanakan rotasi sebelum tanggal kedaluwarsa.
- Rotasi secara berkala dengan dua slot, seperti dijelaskan di Merotasi key tanpa downtime.
- Segera cabut jika bocor. Jika key mungkin terekspos, cabut di halaman Knowledge โ Knowledge API, buat key baru, dan periksa log aktivitas untuk panggilan yang tidak Anda kenali.
- Matikan API jika sudah tidak dipakai.
Troubleshooting
| Gejala | Yang perlu diperiksa |
|---|---|
Semua panggilan mengembalikan 401 unauthorized | Pastikan Knowledge API menyala, key yang dipakai adalah nilai lengkap yang diawali qk_, key dikirim di header X-Api-Key, key belum kedaluwarsa atau dicabut (atau diganti key yang lebih baru di slot yang sama), dan ID agent di URL sama dengan agent pemilik key. Agent juga harus masih berupa service agent. |
Langsung 429 rate_limited, padahal key sudah benar | Alamat IP Anda melakukan lebih dari 20 percobaan gagal dalam satu menit, misalnya dari job yang masih memakai key lama. Tunggu satu menit dan perbaiki key-nya. |
403 insufficient_scope | Key tidak punya scope yang dibutuhkan endpoint ini. Buat key baru dengan scope yang tepat di slot tersebut. |
409 duplicate_code saat upload | Dokumen dengan kode itu sudah ada, termasuk yang berstatus Deleted. Pakai kode baru, atau purge dokumen lama terlebih dahulu. |
400 tentang author atau permission | authorCode atau kode permission tidak ada di agent. Buat dulu di CMS (Sitasi, Knowledge Permissions). |
| Dokumen tetap Failed | Baca log pemrosesan. PDF hasil scan tanpa teks dan tata letak yang sangat rumit adalah penyebab umum. Coba chunkingStrategy lain (upload ulang dengan kode baru), atau siapkan file seperti dijelaskan di Dokumen. |
| Dokumen Active tetapi agent tidak memakainya | Pastikan Enable reference menyala di Retrieval, permissions dokumen mencakup user tersebut, dan uji di percakapan baru. |
402 insufficient_credit | Isi ulang credit organisasi Anda, lalu upload lagi. |
409 invalid_state saat menghapus dokumen Active | Penonaktifan memakan waktu lebih dari 30 detik. Tunggu sebentar lalu panggil delete lagi. |
Halaman Terkait
- Dokumen: meng-upload dan mengelola dokumen di CMS, serta mode pemrosesan.
- Sitasi: membuat author untuk dipakai sebagai
authorCodedan menampilkan sumber di jawaban. - Knowledge Permissions: kode permission untuk field
permissions. - Chunks: memeriksa chunk hasil pemecahan dokumen.
- Retrieval: memastikan agent menjawab dari dokumennya.
- Mengajari Agent Anda