Langsung ke konten
↑↓ navigasi↵ bukaEsc tutup

Panduan

Autentikasi

Setiap request membawa API key sebagai bearer token.

Header
Authorization: Bearer tcn_live_<8>_<40>
curl
curl "https://api.comnethub.app/v1/developer/token-info" \
  -H "Authorization: Bearer $THECOMNET_API_KEY"

Dua cara autentikasi

MetodeDipakai saatToken
API keySistem Anda sendiri mengakses tenant Anda sendiri.tcn_live_…
Aplikasi OAuthProduk Anda bertindak atas nama merchant lain, yang masing-masing menyetujuinya.tcn_at_…

Keduanya dikirim sebagai Authorization: Bearer … dan memakai endpoint serta scope yang sama. Halaman ini membahas API key; untuk aplikasi, lihat Membuat aplikasi (OAuth 2.0).

API key

  • Format: tcn_live_ + 8 karakter alfanumerik + _ + 40 karakter alfanumerik. 17 karakter pertama (tcn_live_XXXXXXXX) adalah prefix publik yang ditampilkan di konsol untuk membedakan key.
  • Key lengkap hanya ditampilkan satu kali, saat dibuat. TheComNet hanya menyimpan hash SHA-256-nya, jadi key yang hilang tidak bisa dipulihkan: cabut, lalu buat yang baru.
  • Key dibuat oleh owner atau admin di Pengaturan → Integrasi dan dimiliki satu tenant. Setiap panggilan dibatasi pada data tenant tersebut.
  • Key bertindak sebagai pembuatnya. Key langsung berhenti berfungsi bila anggota tersebut dikeluarkan dari tenant, dinonaktifkan, atau diturunkan di bawah admin. Buat key integrasi dari akun yang akan tetap menjadi owner/admin.
  • Simpan key di sisi server. Jangan pernah menyertakannya di aplikasi browser atau mobile, dan jangan pernah meng-commit-nya.

Pencabutan dan kedaluwarsa

  • Key bisa dicabut kapan saja di konsol. Pencabutan berlaku pada request berikutnya.
  • Key bisa memiliki tanggal kedaluwarsa opsional yang diatur saat dibuat. Setelah waktu itu, key tidak lagi bisa dipakai.
  • Key yang dicabut, kedaluwarsa, salah format, atau tidak dikenal, serta key yang pembuatnya kehilangan akses, semuanya dijawab 401 API_KEY_INVALID. Response tidak menyebutkan penyebabnya; periksa key di konsol.

Scope

Key membawa satu atau beberapa scope yang dipilih saat dibuat. Setiap operasi mencantumkan scope yang membukanya; cukup memiliki salah satu. Scope :write tidak mencakup :read, jadi berikan keduanya bila integrasi membaca dan menulis.

ScopeCakupanOperasi
orders:readPesanan, detail pesanan, opsi dan label pengiriman, permintaan after-sales dan alasan penolakan, pick/pack list.7
orders:writeMengatur pengiriman (satuan dan massal), menyetujui atau menolak permintaan after-sales, pick/pack massal.4
products:readProduk tersinkron, item inventori, gudang, stok dan mutasinya, katalog marketplace (kategori, atribut, merek, gudang, draf produk).13
products:writeMembuat dan mengubah item inventori, menyesuaikan dan push stok, menautkan varian, dokumen stok, harga/stok massal, gambar dan produk katalog.10
contacts:readKontak, detail kontak, dan label kontak.3
contacts:writeMengganti nama, memberi label, atau menambah catatan pada kontak.1
chat:readPercakapan, pesan, label chat, dan quick reply.4
chat:writeMengirim balasan, menambah catatan internal, memperbarui percakapan, menandai sudah dibaca.4

3 operasi menerima key apa pun tanpa melihat scope: GET /v1/stores, GET /v1/stores/{storeId}, GET /v1/developer/token-info. Operasi yang tidak ada di referensi API khusus konsol dan menolak API key.

Error autentikasi

StatusKodeArti
401UNAUTHENTICATEDTidak ada header Authorization.
401API_KEY_INVALIDKey tidak dikenal, salah format, dicabut, atau kedaluwarsa, atau pembuatnya bukan lagi owner/admin aktif.
403API_KEY_NOT_ALLOWEDOperasi ini khusus konsol dan tidak menerima API key.
403API_SCOPE_MISSINGKey tidak memiliki satu pun scope yang dibutuhkan operasi.
403FEATURE_NOT_IN_PLANTenant tidak berada di paket dengan akses API (Pro). details.feature bernilai "api_access".
403 application/problem+json
{
  "type": "about:blank",
  "title": "API_SCOPE_MISSING",
  "status": 403,
  "code": "API_SCOPE_MISSING",
  "detail": "API key lacks the required scope",
  "instance": "/v1/orders",
  "details": {
    "required": [
      "orders:read"
    ]
  },
  "requestId": "6f1c2d3e-4b5a-4c6d-8e7f-90a1b2c3d4e5"
}