API Proyek
Buat dan kelola proyek pemantauan, periksa jumlah konten yang terkumpul, dan hasilkan ringkasan.
Path dasar: /api/project
Semua endpoint memerlukan:
Authorization: Bearer <access_token>
Penamaan identifier dan kolom
API menggunakan gaya penulisan yang berbeda antara permintaan dan respons:
- permintaan pembuatan:
categoryId,startDate,endDate; - respons proyek:
categoryid,start_date,end_date,updatedAt; - API terkait:
keyword_id,keywordId, dankeywordID.
Ringkasan endpoint
| Metode | Path | Tujuan |
|---|---|---|
GET | /api/project | Menampilkan daftar proyek |
POST | /api/project | Membuat proyek |
DELETE | /api/project?id=<id> | Menghapus proyek |
GET | /api/project/content-count?id=<id> | Menghitung konten yang terkumpul |
PATCH | /api/project/listen-status | Mengaktifkan atau menonaktifkan listening |
POST | /api/project/generate-summary/{keywordID} | Menghasilkan ringkasan AI |
GET | /api/project/summary/{keywordID} | Mengambil ringkasan yang tersimpan |
Menampilkan daftar proyek
GET /api/project
Kembalikan daftar proyek dengan pagination berbasis halaman.
Parameter query:
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
page | integer | Tidak | 1 | Nomor halaman |
limit | integer | Tidak | 10 | Jumlah item per halaman; batas maksimum 100 |
Respons berhasil — 200 OK:
{
"data": [
{
"id": "project_id",
"group": "Acme July Monitoring",
"keyword": "acme",
"exclude": "",
"islisten": 1,
"updatedAt": "2026-07-20T08:35:00Z",
"categoryid": "umum",
"start_date": "2026-07-01",
"end_date": "2026-07-31",
"type": "manual"
}
],
"total": 1,
"page": 1,
"limit": 10,
"totalPages": 1
}
Respons lainnya: 500 untuk error internal server.
curl \
"$SOCIOVITE_API_URL/api/project?page=1&limit=10" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'
Membuat proyek
POST /api/project
Buat satu proyek pemantauan.
Body permintaan: application/json
| Kolom | Tipe | Wajib | Batasan |
|---|---|---|---|
group | string | Ya | 2–100 karakter |
keyword | string | Ya | 2–255 karakter |
categoryId | string | Ya | Lihat nilai yang diizinkan di bawah |
startDate | string | Ya | Swagger tidak mendefinisikan format tanggal |
endDate | string | Tidak | Tanggal akhir opsional; Swagger tidak mendefinisikan format tanggal |
type | string | Ya | manual atau auto |
exclude | string | Tidak | Maksimal 1.000 karakter |
Field keyword dapat menggunakan operator and dan or. Contoh format yang dapat digunakan:
kopi and kapal apikopi or kapal apikopi and kapal api or kopi kapal api
Pertahankan penulisan operator sesuai contoh agar ekspresi keyword dapat diproses dengan benar.
Nilai categoryId yang diizinkan dan tercantum dalam deskripsi operasi:
sosial-budaya
ideologi
politik
ekonomi
pertahanan-keamanan
semua
umum
olahraga
sosial
budaya
teknologi
hiburan
kesehatan
pendidikan
agama
Contoh permintaan:
{
"categoryId": "umum",
"endDate": "2026-07-31",
"exclude": "acme university",
"group": "Acme July Monitoring",
"keyword": "acme",
"startDate": "2026-07-01",
"type": "manual"
}
endDate bersifat opsional:
- Jika
endDatetidak dikirim atau bernilainull, proses scraping akan terus berjalan selama proyek masih aktif. - Jika
endDatediisi, proses scraping akan berhenti setelah mencapai tanggal yang ditentukan.
Tanggal dalam contoh ini menggunakan format YYYY-MM-DD.
Respons berhasil — 201 Created:
{
"message": "Group successfully added",
"data": {
"id": "project_id",
"group": "Acme July Monitoring",
"keyword": "acme",
"exclude": "acme university",
"islisten": 0,
"updatedAt": "2026-07-20T08:35:00Z",
"categoryid": "umum",
"start_date": "2026-07-01",
"end_date": "2026-07-31",
"type": "manual"
}
}
Simpan data.id. Endpoint pengelolaan proyek menerimanya sebagai id; alur aplikasi saat ini juga menggunakannya untuk parameter yang dinamai sebagai ID keyword, dengan memperhatikan catatan identifier di atas.
Respons lainnya:
| Status | Arti |
|---|---|
400 | Body permintaan tidak valid atau kolom wajib tidak lengkap |
500 | Error internal server |
curl -X POST \
"$SOCIOVITE_API_URL/api/project" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-d '{
"categoryId": "umum",
"endDate": "2026-07-31",
"exclude": "acme university",
"group": "Acme July Monitoring",
"keyword": "acme",
"startDate": "2026-07-01",
"type": "manual"
}'
Menghapus proyek
DELETE /api/project
Hapus proyek berdasarkan ID.
Parameter query:
| Parameter | Tipe | Wajib |
|---|---|---|
id | string | Ya |
Respons berhasil — 200 OK:
{
"message": "Project deleted successfully"
}
Respons lainnya:
| Status | Arti |
|---|---|
400 | id wajib tidak diberikan |
401 | Autentikasi pengguna diperlukan |
404 | Proyek tidak ditemukan |
500 | Error internal server |
curl -X DELETE \
"$SOCIOVITE_API_URL/api/project?id=project_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'
Mengambil jumlah konten
GET /api/project/content-count
Hitung konten yang terkumpul untuk suatu proyek, dengan filter sumber media sosial opsional.
Parameter query:
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
id | string | Ya | ID proyek |
sosmedId | string | Tidak | ID sumber media sosial |
Nilai sosmedId yang didukung:
twitterfacebookyoutubetiktokinstagramnews
Respons berhasil — 200 OK:
{
"data": 4
}
Respons lainnya:
| Status | Arti |
|---|---|
400 | id wajib diberikan |
404 | Proyek tidak ditemukan |
500 | Error internal server |
curl \
"$SOCIOVITE_API_URL/api/project/content-count?id=project_id&sosmedId=social_media_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'
Memperbarui status listening
PATCH /api/project/listen-status
Aktifkan atau nonaktifkan listening untuk suatu proyek.
Body permintaan: application/json
| Kolom | Tipe | Wajib | Batasan |
|---|---|---|---|
id | string | Ya | Maksimal 100 karakter |
islisten | integer | Ya | 1 untuk listening, 0 untuk tidak listening |
{
"id": "project_id",
"islisten": 1
}
Respons berhasil — 200 OK:
{
"id": "project_id",
"group": "Acme July Monitoring",
"keyword": "acme",
"exclude": "",
"islisten": 1,
"updatedAt": "2026-07-20T08:35:00Z",
"categoryid": "umum",
"start_date": "2026-07-01",
"end_date": "2026-07-31",
"type": "manual"
}
Respons lainnya:
| Status | Arti |
|---|---|
400 | Parameter tidak valid atau tidak diberikan |
404 | Grup yang dituju tidak ditemukan |
500 | Error internal server |
curl -X PATCH \
"$SOCIOVITE_API_URL/api/project/listen-status" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>' \
-H 'Content-Type: application/json' \
-d '{
"id": "project_id",
"islisten": 1
}'
Menghasilkan ringkasan
POST /api/project/generate-summary/{keywordID}
Minta layanan AI menghasilkan ringkasan untuk sebuah ID keyword.
Parameter path:
| Parameter | Tipe | Wajib |
|---|---|---|
keywordID | string | Ya |
Body permintaan: Tidak ada
Respons berhasil — 200 OK:
{
"status": "success",
"keyword_id": "keyword_id",
"result": {
"summary": "Summary of the collected mentions.",
"metrics": {
"sentiment_distribution": {
"negative": 2,
"neutral": 4,
"positive": 8
}
}
}
}
Key di dalam sentiment_distribution berupa string dinamis dengan jumlah bertipe integer.
Respons lainnya:
| Status | Arti |
|---|---|
400 | ID keyword tidak diberikan |
500 | Error internal server |
curl -X POST \
"$SOCIOVITE_API_URL/api/project/generate-summary/keyword_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'
Mengambil ringkasan
GET /api/project/summary/{keywordID}
Ambil ringkasan yang sebelumnya telah dihasilkan.
Parameter path:
| Parameter | Tipe | Wajib |
|---|---|---|
keywordID | string | Ya |
Respons berhasil — 200 OK:
{
"id": "summary_id",
"ai_summary": "Summary of the collected mentions.",
"sentiment_distribution": "{\"neutral\":4,\"negative\":2,\"positive\":8}",
"created_at": "2026-07-20T09:00:00Z",
"keyword_id": "keyword_id"
}
Respons lainnya:
| Status | Arti |
|---|---|
400 | ID keyword tidak diberikan |
404 | Ringkasan tidak ditemukan |
500 | Error internal server |
curl \
"$SOCIOVITE_API_URL/api/project/summary/keyword_id" \
-H 'accept: application/json' \
-H 'Authorization: Bearer <access_token>'
Bentuk respons error
Error proyek menggunakan model bersama:
{
"success": false,
"error": "Invalid request",
"message": "A required parameter is missing"
}