Akun & Pengaturan
API hanya-baca
Dalam artikel ini
API hanya-baca
Metricgram menyediakan API dasar hanya-baca agar alat eksternal dapat membaca data grup tanpa mengakses dasbor.
Beta: API saat ini masih dalam tahap pengujian dan tersedia mulai dari paket Pro.
Membuat token
Buka Pengaturan, masuk ke Token API, pilih grup, lalu klik Buat token. Salin token segera karena hanya ditampilkan satu kali.
Setiap token terhubung ke satu grup. Saat ini Anda dapat memiliki satu token aktif per grup dan mencabutnya kapan saja.
Autentikasi
curl -H "Authorization: Bearer TOKEN_API_ANDA" \
"https://metricgram.com/api/v1/members"
Respons yang berhasil dikembalikan dalam format JSON.
Setiap token dibatasi hingga 60 permintaan per jam.
GET /api/v1/members
Mengembalikan anggota grup yang terkait dengan token.
Parameter yang tersedia:
status: all, active, inactive, left, atau unbanedadmin: true atau falseis_bot: true atau false. Parameter ini hanya memfilter nilai boolean; nilai yang tidak diketahui (null) hanya muncul saat filter ini tidak digunakan.query: cari berdasarkan ID Telegram, username, atau nama depanlimit: default 100, maksimum 500page: default 1include_email: true atau false. Default: false. Jika true, Metricgram memakai email subscriber terlebih dahulu, lalu email yang tersimpan pada data anggota grup. Nilainya bisanull.
Contoh:
curl -G "https://metricgram.com/api/v1/members" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
--data-urlencode "status=active" \
--data-urlencode "limit=100" \
--data-urlencode "include_email=true" \
--data-urlencode "page=1"
Contoh respons JSON:
{
"data": [
{
"telegram_id": "123456789",
"username": "ana",
"first_name": "Ana",
"language_code": "es",
"is_bot": false,
"status": "active",
"joined_at": "2026-04-10T12:30:00Z",
"admin": false,
"email": "ana@example.com"
}
],
"meta": {
"group_id": 42,
"group_title": "Grup saya",
"page": 1,
"limit": 100,
"count": 1,
"has_more": false,
"filters": {
"status": "active"
}
}
}
Field utama respons:
telegram_id: ID Telegram sebagai teks. Bisanulljika Metricgram tidak menyimpannya.username,first_name, danlanguage_code: data publik Telegram. Bisanull.is_bot:true,false, ataunulljika Telegram tidak memberikan nilai tersebut.status:active,inactive,left,unbaned, ataunulljika status belum tersimpan.admin:trueataufalse.joined_at: tanggal bergabung dalam format ISO 8601, ataunull.email: hanya dikembalikan saatinclude_email=true. Metricgram memakai email subscriber terlebih dahulu, lalu email yang tersimpan pada data anggota grup. Nilainya bisanull.meta: data pagination dan filter untuk request.
GET /api/v1/active_users
Mengembalikan anggota non-admin dengan pesan atau reaksi yang tercatat dalam rentang tanggal yang dipilih. Pemilik grup dikecualikan dari daftar ini. Hasil diurutkan berdasarkan aktivitas menurun: pertama activity_count, lalu last_activity_at.
Parameter yang tersedia:
start_date: tanggal mulai dalam formatYYYY-MM-DD. Default: 30 hari lalu.end_date: tanggal akhir dalam formatYYYY-MM-DD. Default: hari ini.limit: default 100, maksimum 500page: default 1include_email: true atau false. Default: false. Jika true, Metricgram memakai email subscriber terlebih dahulu, lalu email yang tersimpan pada data anggota grup. Nilainya bisanull.
Contoh:
curl -G "https://metricgram.com/api/v1/active_users" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
--data-urlencode "start_date=2026-04-01" \
--data-urlencode "end_date=2026-04-30" \
--data-urlencode "limit=100" \
--data-urlencode "include_email=true" \
--data-urlencode "page=1"
Contoh respons JSON:
{
"data": [
{
"telegram_id": "123456789",
"username": "ana",
"first_name": "Ana",
"language_code": "es",
"is_bot": null,
"member_status": "active",
"admin": false,
"joined_at": "2026-04-10T12:30:00Z",
"email": "ana@example.com",
"message_count": 18,
"reaction_count": 4,
"activity_count": 22,
"last_message_at": "2026-04-30T19:15:00Z",
"last_reaction_at": null,
"last_activity_at": "2026-04-30T19:15:00Z"
}
],
"meta": {
"group_id": 42,
"group_title": "Grup saya",
"start_date": "2026-04-01",
"end_date": "2026-04-30",
"page": 1,
"limit": 100,
"count": 1,
"has_more": false
}
}
Field utama respons:
telegram_id: ID Telegram sebagai teks. Bisanulljika Metricgram tidak menyimpannya.username,first_name, danlanguage_code: data publik Telegram. Bisanull.is_bot:true,false, ataunulljika Telegram tidak memberikan nilai tersebut.member_status: nilai teks yang sama sepertistatusdi/api/v1/members; bisanulljika status belum tersimpan.admin:trueataufalse; di endpoint ini biasanyafalsekarena admin dikecualikan.joined_at: tanggal bergabung dalam format ISO 8601, ataunull.email: hanya dikembalikan saatinclude_email=true. Metricgram memakai email subscriber terlebih dahulu, lalu email yang tersimpan pada data anggota grup. Nilainya bisanull.message_count,reaction_count, danactivity_count: penghitung bilangan bulat yang dihitung hanya dalam rentang tanggal yang dipilih, bukan seluruh riwayat pengguna.activity_countadalahmessage_count + reaction_count.last_message_atdanlast_reaction_at: tanggal dalam format ISO 8601, ataunulljika tidak ada aktivitas jenis tersebut.last_activity_at: tanggal aktivitas terakhir yang tercatat dalam format ISO 8601.meta: data grup, rentang tanggal, dan pagination untuk request.
GET /api/v1/subscriber_health
Mengembalikan data yang sama dengan panel Kesehatan pelanggan: subscriber aktif yang tertaut, aktivitas terbaru, sinyal risiko, perpanjangan mendatang, dan rincian per paket.
Secara default, endpoint ini memakai rentang yang sama seperti panel: 30 hari untuk aktivitas dan 14 hari untuk perpanjangan mendatang. Jika parameter ini diubah, hasilnya mungkin tidak sama persis dengan panel.
Parameter yang didukung:
activity_days: jumlah hari untuk aktivitas terbaru. Default 30, maksimum 365; nilai di atas 365 akan dibatasi menjadi 365.renewal_days: jumlah hari untuk perpanjangan mendatang. Default 14, maksimum 90; nilai di atas 90 akan dibatasi menjadi 90.include_email: true atau false. Default: false. Jika true, subscriber berisiko menyertakan email yang tersimpan pada langganan. Nilainya bisanull.
Contoh:
curl -G "https://metricgram.com/api/v1/subscriber_health" \
-H "Authorization: Bearer TOKEN_API_ANDA" \
--data-urlencode "activity_days=30" \
--data-urlencode "renewal_days=14" \
--data-urlencode "include_email=true"
Contoh respons JSON:
{
"data": {
"total_subscribers": 24,
"activity_days": 30,
"renewal_days": 14,
"activity_range": { "start_date": "2026-04-01", "end_date": "2026-04-30" },
"previous_activity_range": { "start_date": "2026-03-02", "end_date": "2026-03-31" },
"compare_activity_drop": true,
"metrics": {
"engaged": { "count": 18, "percentage": 75 },
"at_risk": { "count": 3, "percentage": 13 },
"upcoming_renewals": { "count": 5, "percentage": 21 }
},
"at_risk_subscribers": [
{
"telegram_id": "123456789",
"username": "ana",
"first_name": "Ana",
"language_code": "es",
"is_bot": false,
"plan_lines": ["Pro bulanan", "29 EUR / bulan"],
"subscribed_until": "2026-05-08T10:00:00Z",
"subscription_attention": "renews_on",
"subscription_attention_days": 2,
"risk_indicators": ["activity_drop"],
"risk_score": 1,
"risk_level": "low",
"current_message_count": 2,
"current_reaction_count": 0,
"current_activity_count": 2,
"previous_message_count": 12,
"previous_reaction_count": 1,
"previous_activity_count": 13,
"email": "ana@example.com"
}
],
"plan_rows": [
{
"plan_lines": ["Pro bulanan", "29 EUR / bulan"],
"active_count": 12,
"engaged_count": 9,
"at_risk_count": 2,
"engaged_percentage": 75,
"at_risk_percentage": 17
}
]
},
"meta": {
"group_id": 42,
"group_title": "Grup saya"
}
}
Field utama:
total_subscribers: subscriber aktif tertaut yang dihitung.activity_range/previous_activity_range: rentang aktivitas saat ini dan sebelumnya.metrics: ringkasan jumlah dan persentase.at_risk_subscribers: subscriber dengan sinyal risiko;risk_indicatorsdapat berupano_activity,activity_drop, ataucanceled;risk_leveldapat berupalow,medium, atauhigh.plan_rows: subscriber aktif tertaut yang dikelompokkan berdasarkan paket langganan.email: hanya dikembalikan diat_risk_subscriberssaatinclude_email=true.
Error yang mungkin muncul: 401 unauthorized, 403 forbidden, 400 invalid_date_range, dan 429 rate_limited.
Apakah artikel ini membantu?
Terima kasih atas masukan Anda!