Panduan Integrator Public API
Halaman ini adalah panduan teknis yang dirender untuk developer atau vendor yang perlu mengintegrasikan public API KartuStok.
Gunakan bersama:
Kapan Panduan Ini Dipakai
Gunakan panduan ini saat tim integrasi perlu:
- mengetes konektivitas token
- mengatur base URL API company yang benar
- memahami kebutuhan scope
- membaca data warehouse, item, kategori, atau stok
- menangani public ID yang opaque dan pagination dengan aman
Base URL dan Authentication
Selalu gunakan domain frontend company, bukan domain member.
Benar:
https://your-subdomain.kartustok.com/public/v1Salah:
https://member.kartustok.com/public/v1Semua request wajib mengirim:
Authorization: Bearer <your_api_token>
Accept: application/jsonJika host salah, API bisa mengembalikan:
{
"status": "error",
"message": "Invalid URL"
}Matriks Scope
| Scope | Fungsi | Endpoint |
|---|---|---|
meta.read | Konektivitas dan metadata perusahaan | /health, /meta/company |
item.read | Daftar item dan detail item | /items, /items/{id} |
category.read | Daftar kategori barang | /item-categories |
locator.read | Daftar warehouse | /locators |
stock.read | Report stok | /stock/summary, /stock/detail |
Catatan Kompatibilitas Warehouse
UI produk sekarang memakai istilah Warehouse, tetapi kontrak teknis API masih memakai:
/locatorslocator.readlocator_id
Anggap nama-nama itu sebagai kontrak API warehouse untuk saat ini.
Alur Integrasi yang Disarankan
- Panggil
GET /health - Panggil
GET /meta/company - Sinkronkan
/item-categories - Sinkronkan
/locators - Sinkronkan
/items - Gunakan
/stock/summaryuntuk saldo - Gunakan
/stock/detailuntuk audit pergerakan
Ringkasan Endpoint
Health
GET /public/v1/healthScope: meta.read
Company Metadata
GET /public/v1/meta/companyScope: meta.read
Items
GET /public/v1/items
GET /public/v1/items/{id}Scope: item.read
Filter list yang didukung:
pageper_pageqis_activecategory_id
Item Categories
GET /public/v1/item-categoriesScope: category.read
Warehouses
GET /public/v1/locatorsScope: locator.read
Stock Summary
GET /public/v1/stock/summaryScope: stock.read
Filter umum:
date_fromdate_tolocator_iditem_idcategory_idpageper_page
Stock Detail
GET /public/v1/stock/detailScope: stock.read
Filter wajib:
locator_id
Filter opsional:
item_idtransaction_typedate_fromdate_topageper_page
Pagination
Endpoint yang memakai pagination:
/items/stock/summary/stock/detail
Aturan:
pagemulai dari1per_pagemaksimum100- default
/itemsuntukper_pageadalah20 - default
/stock/summaryuntukper_pageadalah50 - default
/stock/detailuntukper_pageadalah50
Penanganan Error
401 Unauthorized
Penyebab:
- bearer token tidak ada
- token tidak valid
- token inactive
- token expired
- token revoked
403 Forbidden
Penyebab:
- scope yang dibutuhkan tidak ada
- IP client tidak termasuk
Allowed IPs
404
Kemungkinan penyebab:
- host company salah
- public ID tidak valid
- resource tidak ditemukan
429 Too Many Requests
Rate limit saat ini:
- 120 request
- per 60 detik
- per token dan client IP
Best Practice
- simpan token di secret server-side
- gunakan satu token untuk satu integrasi
- gunakan scope sekecil mungkin
- gunakan
Allowed IPsuntuk infrastruktur server yang stabil - jangan menganggap opaque ID adalah integer database
- jangan hardcode token di kode browser
- rotasi atau revoke token saat kepemilikan berubah
