---
title: GET /me
source: https://se-hari.com/docs/api/api-account-me
updated: 2026-08-15T18:52:39.580345+00:00
---

> Info akun dan saldo kredit. GET /me — tanpa scope khusus.

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
```bash
GET https://se-hari.com/api/v1/me
```
Endpoint 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
```bash
curl -X GET "https://se-hari.com/api/v1/me" \
  -H "Authorization: Bearer $SEHARI_API_KEY"
```
```javascript
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();
```
```python
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

```json
{
  "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.
```json
{
  "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`](/docs/error/invalid-api-key) | Key salah, sudah dicabut, atau kedaluwarsa. |
| 429 | [`rate_limited`](/docs/error/rate-limited) | Terlalu banyak request. Hormati header `Retry-After`. |
| 500 | [`internal_error`](/docs/error/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.

1. Simpan API key di variabel lingkungan, jangan di dalam kode
2. `GET /me` — pastikan key dikenali dan lihat scope yang melekat padanya
3. 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](/docs/autentikasi) — cara membuat key dan memilih scope
- [Kode error](/docs/error) — arti setiap kode dan cara memperbaikinya
- [Idempotency](/docs/idempotency) — kenapa retry aman kalau dilakukan dengan benar
- [Spesifikasi OpenAPI](https://se-hari.com/api/v1/openapi.json) — kontrak mesin, cocok untuk men-generate klien