# Connect link (/api/connect-link)

Connect link adalah link sekali pakai ke halaman Tebar tempat klienmu login ke platform (Instagram, Threads, TikTok, dan lainnya) dan memberi izin. Akunnya masuk ke profile yang kamu tentukan, lalu klien dikembalikan ke aplikasimu. Klien tidak perlu punya akun Tebar dan tidak pernah melihat dashboard-mu.

## 1. Izinkan domain aplikasimu [#1-izinkan-domain-aplikasimu]

Klien hanya bisa dikembalikan ke domain yang sudah kamu daftarkan. Daftarkan sekali, dari dashboard (**Integrasi** → **Domain redirect**) atau lewat API:

```bash
curl -X POST https://api.tebar.app/v1/connect/redirect-origins \
  -H "Authorization: Bearer tb_live_xxx" -H "Content-Type: application/json" \
  -d '{ "origin": "https://app.contoh.com" }'
```

Atur juga nama yang tampil di halaman connect ("Hubungkan akunmu ke …") di **Integrasi** → **Nama yang tampil**, atau `PATCH /v1/connect/settings { "brand_name": "Agensi Kamu" }`.

## 2. Buat link untuk klien [#2-buat-link-untuk-klien]

```bash
curl -X POST https://api.tebar.app/v1/profiles/klien-42/connect-links \
  -H "Authorization: Bearer tb_live_xxx" -H "Content-Type: application/json" \
  -d '{ "redirect_url": "https://app.contoh.com/tebar/selesai", "state": "sesi-abc123" }'
```

```json
{
  "url": "https://publish.tebar.app/connect/s/1z35fNMp…",
  "profile_id": "9d09…",
  "expires_at": "2026-10-20T12:30:00.000Z"
}
```

- `{id}` di path boleh ID profile atau `external_id`.
- `state` (opsional) dikembalikan apa adanya, berguna untuk mencocokkan klien di sistemmu.
- `platforms` (opsional), misalnya `["instagram", "tiktok"]`, membatasi tombol platform yang tampil.
- Link berlaku 30 menit dan hanya bisa dipakai sekali. Buat link baru setiap kali klien ingin menghubungkan akun.

Dari dashboard, link bisa dibuat lewat menu **⋯** di profile → **Buat connect link**.

<Callout type="warn" title="Perlakukan link seperti kunci">
  Siapa pun yang membuka link bisa menghubungkan akunnya ke profile itu. Kirim link hanya ke klien
  yang sudah login di aplikasimu, dan jangan memasangnya di halaman publik.
</Callout>

## 3. Terima klien kembali [#3-terima-klien-kembali]

Setelah selesai, klien diarahkan ke `redirect_url` dengan query tambahan:

```txt
https://app.contoh.com/tebar/selesai?status=connected&profile_id=…&account_ids=…&state=sesi-abc123
```

Kalau gagal atau dibatalkan:

```txt
https://app.contoh.com/tebar/selesai?status=error&error=access_denied&state=sesi-abc123
```

| `error`                    | Arti                                              |
| -------------------------- | ------------------------------------------------- |
| `access_denied`            | Klien membatalkan di halaman izin platform        |
| `permission_missing`       | Klien tidak mencentang semua izin yang dibutuhkan |
| `account_in_other_profile` | Akun itu sudah terhubung di profile lain milikmu  |
| `plan_account_limit`       | Batas akun di paketmu sudah penuh                 |
| `expired`                  | Link kedaluwarsa sebelum klien selesai            |

Link yang gagal masih bisa dicoba lagi sampai kedaluwarsa.

<Callout title="Selalu cek ulang lewat API">
  Query di URL bisa diubah oleh siapa pun yang memegangnya. Pastikan akun benar-benar terhubung
  dengan `GET /v1/accounts` dan header `Tebar-Profile`, atau dengan [webhook](/api/webhook)
  `account.connected`.
</Callout>

## Facebook [#facebook]

Login Facebook bisa memberi akses ke beberapa Halaman sekaligus. Klien lalu memilih Halaman yang ingin dihubungkan di halaman Tebar yang sama, dan semua Halaman yang dipilih masuk ke profile itu.
