# Profile (/api/profile)

Profile memisahkan akun, post, media, komentar, dan statistik per klien. Lihat juga [Profile di dashboard](/profile).

## Mengelola profile [#mengelola-profile]

| Request                       | Fungsi                                                                               |
| ----------------------------- | ------------------------------------------------------------------------------------ |
| `GET /v1/profiles`            | Daftar profile, yang tertua dulu (profile bawaan pertama). Filter `external_id`      |
| `POST /v1/profiles`           | `{ "name", "external_id"? }`. `external_id` yang sudah ada mengembalikan profile itu |
| `GET /v1/profiles/{id}`       |                                                                                      |
| `PATCH /v1/profiles/{id}`     | `{ "name"?, "external_id"? }`                                                        |
| `DELETE /v1/profiles/{id}`    | `202`. Akses profile langsung dicabut, datanya dihapus di latar belakang             |
| `POST /v1/accounts/{id}/move` | `{ "profile_id" }`. Pindahkan akun ke profile lain                                   |

`POST /v1/profiles` aman diulang: simpan ID klien dari sistemmu sebagai `external_id`, dan request yang sama selalu mengembalikan profile yang sama.

```bash
curl -X POST https://api.tebar.app/v1/profiles \
  -H "Authorization: Bearer tb_live_xxx" -H "Content-Type: application/json" \
  -d '{ "name": "Kopi Senja", "external_id": "klien-42" }'
```

Endpoint di atas hanya bisa dipakai dengan **key pemilik** (key yang tidak dikunci ke profile). Key profile mendapat `403 owner_key_required`.

## Bekerja di satu profile [#bekerja-di-satu-profile]

Dengan key pemilik, kirim header `Tebar-Profile` berisi ID profile atau `external_id`-nya. Semua request lalu hanya melihat dan mengubah isi profile itu:

```bash
curl https://api.tebar.app/v1/accounts \
  -H "Authorization: Bearer tb_live_xxx" \
  -H "Tebar-Profile: klien-42"
```

- Tanpa header, key pemilik melihat semua profile, dan data baru (post, media) masuk ke profile bawaan.
- Profile yang tidak dikenal menghasilkan `404 profile_not_found`.
- Satu post hanya untuk satu profile: akun dari dua profile dalam satu post ditolak `400 mixed_profiles`, dan media dari profile lain ditolak `400 media_profile_mismatch`.

## Key profile [#key-profile]

Key yang dikunci ke satu profile dibuat dari dashboard (menu **⋯** di profile → **Buat API key**). Key ini tidak perlu header, tidak bisa keluar dari profilenya, dan header yang menunjuk profile lain ditolak. Cocok untuk aplikasi yang hanya mengurus satu klien.

## Pindah akun dan hapus profile [#pindah-akun-dan-hapus-profile]

- **Pindah akun:** komentar dan statistik ikut akun, sedangkan post yang sudah dibuat tetap di profile lamanya. Akun dengan post yang menunggu terbit ditolak `409 account_has_scheduled_posts`.
- **Hapus profile:** profile bawaan tidak bisa dihapus (`409 default_profile`). Kalau kamu memakai [webhook](/api/webhook), endpoint untuk semua profile menerima event `profile.deleted` setelah datanya terhapus.
