Mengembalikan identitas pemilik API key beserta saldo kredit dan ringkasan izin key yang dipakai. Endpoint paling murah di seluruh API dan tidak memerlukan scope apa pun, jadi ini yang dipakai untuk memverifikasi bahwa sebuah key masih hidup — termasuk oleh tombol "Test" pada kredensial n8n. Kalau endpoint ini menjawab 200, key-nya valid, belum dicabut, dan belum kedaluwarsa.
#Endpoint
GET https://se-hari.com/api/v1/meEndpoint ini tidak menuntut scope apa pun. API key yang paling sempit sekalipun bisa memanggilnya, jadi ia adalah tempat pertama yang harus dicoba ketika Anda ragu apakah masalahnya ada pada kredensial atau pada izin. Kalau endpoint ini menjawab 200 sementara endpoint lain menjawab 403, kredensial Anda baik-baik saja dan yang kurang adalah scope-nya.
#Contoh
curl -X GET "https://se-hari.com/api/v1/me" \
-H "Authorization: Bearer $SEHARI_API_KEY"const res = await fetch('https://se-hari.com/api/v1/me', {
method: 'GET',
headers: {
'Authorization': `Bearer ${process.env.SEHARI_API_KEY}`,
}
});
if (!res.ok) {
const { error } = await res.json();
// error.code stabil dan bisa dicabang; error.message untuk manusia.
throw new Error(`${error.code}: ${error.message}`);
}
const data = await res.json();import os, requests
res = requests.get(
"https://se-hari.com/api/v1/me",
headers={"Authorization": f"Bearer {os.environ['SEHARI_API_KEY']}"},
timeout=30,
)
if not res.ok:
err = res.json()["error"]
raise RuntimeError(f"{err['code']}: {err['message']}")
data = res.json()#Respons 200
{
"user": {
"id": "377f9f6d-5e41-4a2f-9b3b-212c667b8197",
"email": "dewi@example.com",
"full_name": "Dewi"
},
"credits": {
"balance": 47
},
"api_key": {
"id": "a1b2…",
"scopes": [
"notulen:read",
"notulen:write"
],
"daily_credit_cap": 50
}
}#Field respons
| Field | Tipe | Keterangan |
|---|---|---|
user | object | — |
credits | object | — |
api_key | object | null | — |
#Kalau gagal
Setiap kegagalan memakai amplop yang sama, dan code di dalamnya stabil — cabangkan logika Anda ke sana, jangan ke message yang teksnya bisa diperbaiki sewaktu-waktu.
{
"error": {
"code": "invalid_api_key",
"message": "Penjelasan untuk manusia.",
"docs_url": "https://se-hari.com/docs/error/invalid-api-key",
"request_id": "req_a1b2c3d4e5f6",
"details": {}
}
}| Status | Kode | Artinya di endpoint ini |
|---|---|---|
| 401 | invalid_api_key | Key salah, sudah dicabut, atau kedaluwarsa. |
| 429 | rate_limited | Terlalu banyak request. Hormati header Retry-After. |
| 500 | internal_error | Kesalahan di sisi kami. Sertakan request_id saat melapor. |
Simpan request_id dari setiap respons gagal. Itu satu-satunya cara kami menemukan kembali request Anda di log ketika Anda melapor, dan ia juga ada di header X-Request-Id pada respons yang berhasil. |
#Seberapa sering boleh dipanggil
Isi respons ini nyaris tidak pernah berubah selama key-nya sama: email, nama, dan scope ditetapkan saat key dibuat. Panggil sekali saat integrasi Anda mulai berjalan, simpan hasilnya di memori, dan jangan pernah memanggilnya di dalam perulangan. Satu-satunya field yang bergerak adalah saldo kredit — dan untuk itu GET /credits memberi rincian yang jauh lebih berguna.
Kalau Anda memakainya sebagai pemeriksaan kesehatan berkala, satu kali per jam sudah lebih dari cukup. Memanggilnya tiap menit hanya akan membuat Anda menyentuh batas 429 pada saat trafik sedang tinggi, yaitu saat pemeriksaan itu justru paling tidak boleh gagal.
#Alur khas
Endpoint akun menjawab pertanyaan paling dasar: siapa pemilik key ini, izin apa yang dimilikinya, dan berapa sisa kreditnya. Karena tidak menuntut scope apa pun, ia berguna sebagai pemeriksaan kesehatan.
- Simpan API key di variabel lingkungan, jangan di dalam kode
GET /me— pastikan key dikenali dan lihat scope yang melekat padanya- Cocokkan scope yang tampil dengan yang dibutuhkan integrasi Anda
Kalau endpoint ini berhasil tapi endpoint lain menjawab 403, masalahnya bukan pada kredensial melainkan pada scope. Buat key baru dengan scope yang sesuai — scope tidak bisa ditambahkan ke key yang sudah ada.
#Yang sering keliru
- Key disalin sebagian. API key Se-Hari panjangnya tetap:
sh_live_diikuti 43 karakter. Kalau panjangnya berbeda, yang salah adalah proses penyalinannya, bukan key-nya — dan pesan 401 tidak akan mengatakan itu. - Hormati
Retry-After. Mencoba lagi lebih cepat dari yang disebutkan hanya memperpanjang masa tunggu. Kalau Anda sering menyentuhnya, kemungkinan besar Anda sedang polling sesuatu yang seharusnya ditangani webhook.
#Selanjutnya
- Autentikasi dan API key — cara membuat key dan memilih scope
- Kode error — arti setiap kode dan cara memperbaikinya
- Idempotency — kenapa retry aman kalau dilakukan dengan benar
- Spesifikasi OpenAPI — kontrak mesin, cocok untuk men-generate klien