Lewati ke konten

API Reference

Referensi endpoint rancangan untuk Products, Inventory, Orders, Stores, dan Webhooks. Path memakai placeholder dan seluruh schema berstatus Draft.

Dokumentasi rencana — kontrak API belum final dan belum tersedia sebagai layanan.

Semua schema berlabel Draft. Alamat https://api.example.com adalah placeholder, bukan server nyata, dan tidak ada token yang dapat diterbitkan.

Ringkasan

Draft

Referensi ini memetakan endpoint yang direncanakan. Seluruhnya Draft: nama field, tipe, dan perilaku masih dapat berubah sebelum kontrak disepakati.

Konvensi umum rancangan API
HalRancangan
Base URL (placeholder)https://api.example.com/v1
AutentikasiHeader Authorization: Bearer TOKEN_CONTOH. Lihat Autentikasi.
FormatJSON (Content-Type: application/json)
PaginationCursor, lihat Pagination
Request tulisDisarankan memakai Idempotency-Key, lihat Idempotensi
ErrorBody seragam, lihat Error Codes

Products

Draft

Katalog produk dan statusnya.

GEThttps://api.example.com/v1/products

Mengambil daftar produk, terbaru lebih dulu, dengan pagination cursor.

Scope: products:read

Parameter

Parameter untuk Daftar produk
NamaLokasiTipeWajibKeterangan
limitqueryintegerTidakJumlah item per halaman, 1 sampai 100. Bawaan 20.
cursorquerystringTidakCursor dari pagination.next_cursor respons sebelumnya.
statusquerystringTidakactive atau archived.
skuquerystringTidakFilter berdasarkan SKU persis.
updated_sincequerystringTidakWaktu ISO 8601; hanya produk yang berubah sejak waktu ini.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/products?limit=20&status=active" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "data": [
    {
      "id": "prd_example_001",
      "sku": "SKU-CONTOH-001",
      "name": "Jaket Outdoor (contoh)",
      "price": 250000,
      "currency": "IDR",
      "status": "active",
      "stock_total": 120,
      "updated_at": "2025-01-15T08:00:00Z"
    }
  ],
  "pagination": {
    "limit": 20,
    "has_more": true,
    "next_cursor": "CURSOR_CONTOH"
  }
}
GEThttps://api.example.com/v1/products/{product_id}

Mengambil satu produk berdasarkan id.

Scope: products:read

Parameter

Parameter untuk Detail produk
NamaLokasiTipeWajibKeterangan
product_idpathstringYaId produk.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/products/prd_example_001" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "id": "prd_example_001",
  "sku": "SKU-CONTOH-001",
  "name": "Jaket Outdoor (contoh)",
  "price": 250000,
  "currency": "IDR",
  "status": "active",
  "stock_total": 120,
  "updated_at": "2025-01-15T08:00:00Z"
}

Buat produk

DraftIdempoten
POSThttps://api.example.com/v1/products

Membuat produk baru. Aman diulang bila memakai Idempotency-Key.

Scope: products:write

Parameter

Parameter untuk Buat produk
NamaLokasiTipeWajibKeterangan
Idempotency-KeyheaderstringTidakNilai unik per operasi agar aman diulang.
skubodystringYaSKU unik di dalam organisasi.
namebodystringYaNama produk.
pricebodyintegerYaHarga dalam Rupiah, tanpa desimal.
currencybodystringTidakBawaan IDR.
statusbodystringTidakactive (bawaan) atau archived.
Contoh request dan respons
Contoh requestDraft
curl -X POST "https://api.example.com/v1/products" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0b7f6c9e-6f0e-4c1a-9d38-2f1c5a8e7b10" \
  -d '{
  "sku": "SKU-CONTOH-002",
  "name": "Kaos Hiking (contoh)",
  "price": 120000,
  "currency": "IDR",
  "status": "active"
}'
Contoh respons 201 (Draft)
{
  "id": "prd_example_002",
  "sku": "SKU-CONTOH-002",
  "name": "Kaos Hiking (contoh)",
  "price": 120000,
  "currency": "IDR",
  "status": "active",
  "stock_total": 0
}

Ubah produk

DraftIdempoten
PATCHhttps://api.example.com/v1/products/{product_id}

Mengubah sebagian field produk. Field yang tidak dikirim tidak berubah.

Scope: products:write

Parameter

Parameter untuk Ubah produk
NamaLokasiTipeWajibKeterangan
product_idpathstringYaId produk.
Idempotency-KeyheaderstringTidakNilai unik per operasi agar aman diulang.
namebodystringTidakNama produk.
pricebodyintegerTidakHarga dalam Rupiah.
statusbodystringTidakactive atau archived.
Contoh request dan respons
Contoh requestDraft
curl -X PATCH "https://api.example.com/v1/products/prd_example_001" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6d2a91f4-3c55-4b8e-a0c7-9e12f4b6d8a3" \
  -d '{
  "price": 235000,
  "status": "active"
}'
Contoh respons 200 (Draft)
{
  "id": "prd_example_001",
  "sku": "SKU-CONTOH-001",
  "name": "Jaket Outdoor (contoh)",
  "price": 235000,
  "currency": "IDR",
  "status": "active",
  "stock_total": 120,
  "updated_at": "2025-01-15T08:00:00Z"
}

Inventory

Draft

Stok per SKU dan gudang, serta penyesuaian stok.

GEThttps://api.example.com/v1/inventory

Mengambil stok per SKU dan gudang.

Scope: inventory:read

Parameter

Parameter untuk Daftar stok
NamaLokasiTipeWajibKeterangan
limitqueryintegerTidakJumlah item per halaman, 1 sampai 100. Bawaan 20.
cursorquerystringTidakCursor dari pagination.next_cursor respons sebelumnya.
warehouse_idquerystringTidakFilter berdasarkan gudang.
skuquerystringTidakFilter berdasarkan SKU persis.
low_stockquerybooleanTidakHanya SKU di bawah ambang batas.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/inventory?limit=100&low_stock=true" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "data": [
    {
      "sku": "SKU-CONTOH-001",
      "warehouse_id": "wh_example_001",
      "on_hand": 120,
      "reserved": 8,
      "available": 112,
      "updated_at": "2025-01-15T08:00:00Z"
    }
  ],
  "pagination": {
    "limit": 100,
    "has_more": false,
    "next_cursor": null
  }
}
GEThttps://api.example.com/v1/inventory/{sku}

Mengambil stok satu SKU di semua gudang.

Scope: inventory:read

Parameter

Parameter untuk Stok per SKU
NamaLokasiTipeWajibKeterangan
skupathstringYaSKU produk.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/inventory/SKU-CONTOH-001" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "sku": "SKU-CONTOH-001",
  "total_available": 112,
  "warehouses": [
    {
      "sku": "SKU-CONTOH-001",
      "warehouse_id": "wh_example_001",
      "on_hand": 120,
      "reserved": 8,
      "available": 112,
      "updated_at": "2025-01-15T08:00:00Z"
    }
  ]
}
POSThttps://api.example.com/v1/inventory/adjustments

Menyesuaikan stok sebuah SKU di satu gudang, baik dengan selisih maupun nilai akhir.

Scope: inventory:write

Parameter

Parameter untuk Buat penyesuaian stok
NamaLokasiTipeWajibKeterangan
Idempotency-KeyheaderstringTidakNilai unik per operasi agar aman diulang.
skubodystringYaSKU yang disesuaikan.
warehouse_idbodystringYaGudang tujuan.
modebodystringYaset (nilai akhir) atau delta (selisih).
quantitybodyintegerYaJumlah; untuk delta boleh negatif.
reasonbodystringTidakAlasan penyesuaian, untuk jejak audit.
Contoh request dan respons
Contoh requestDraft
curl -X POST "https://api.example.com/v1/inventory/adjustments" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: opname-SKU-CONTOH-001-0001" \
  -d '{
  "sku": "SKU-CONTOH-001",
  "warehouse_id": "wh_example_001",
  "mode": "set",
  "quantity": 112,
  "reason": "stok opname"
}'
Contoh respons 201 (Draft)
{
  "id": "adj_example_001",
  "sku": "SKU-CONTOH-001",
  "warehouse_id": "wh_example_001",
  "previous": 120,
  "current": 112,
  "reason": "stok opname"
}

Orders

Draft

Pesanan dari berbagai channel dan pencatatan pengiriman.

GEThttps://api.example.com/v1/orders

Mengambil pesanan dari semua toko terhubung, terbaru lebih dulu.

Scope: orders:read

Parameter

Parameter untuk Daftar pesanan
NamaLokasiTipeWajibKeterangan
limitqueryintegerTidakJumlah item per halaman, 1 sampai 100. Bawaan 20.
cursorquerystringTidakCursor dari pagination.next_cursor respons sebelumnya.
statusquerystringTidakpending, processing, shipped, completed, atau cancelled.
store_idquerystringTidakFilter berdasarkan toko.
created_fromquerystringTidakWaktu ISO 8601 awal rentang.
created_toquerystringTidakWaktu ISO 8601 akhir rentang.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/orders?limit=50&status=processing" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "data": [
    {
      "id": "ord_example_001",
      "store_id": "sto_example_001",
      "status": "processing",
      "total": 250000,
      "currency": "IDR",
      "items": [
        {
          "sku": "SKU-CONTOH-001",
          "quantity": 1,
          "price": 250000
        }
      ],
      "created_at": "2025-01-15T08:00:00Z"
    }
  ],
  "pagination": {
    "limit": 50,
    "has_more": false,
    "next_cursor": null
  }
}
GEThttps://api.example.com/v1/orders/{order_id}

Mengambil satu pesanan beserta itemnya.

Scope: orders:read

Parameter

Parameter untuk Detail pesanan
NamaLokasiTipeWajibKeterangan
order_idpathstringYaId pesanan.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/orders/ord_example_001" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "id": "ord_example_001",
  "store_id": "sto_example_001",
  "status": "processing",
  "total": 250000,
  "currency": "IDR",
  "items": [
    {
      "sku": "SKU-CONTOH-001",
      "quantity": 1,
      "price": 250000
    }
  ],
  "created_at": "2025-01-15T08:00:00Z"
}

Catat pengiriman

DraftIdempoten
POSThttps://api.example.com/v1/orders/{order_id}/fulfillments

Mencatat pengiriman sebuah pesanan beserta nomor resi.

Scope: orders:write

Parameter

Parameter untuk Catat pengiriman
NamaLokasiTipeWajibKeterangan
order_idpathstringYaId pesanan.
Idempotency-KeyheaderstringTidakNilai unik per operasi agar aman diulang.
carrierbodystringYaKode kurir.
tracking_numberbodystringYaNomor resi.
Contoh request dan respons
Contoh requestDraft
curl -X POST "https://api.example.com/v1/orders/ord_example_001/fulfillments" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: kirim-ord_example_001-0001" \
  -d '{
  "carrier": "kurir-contoh",
  "tracking_number": "RESI-CONTOH-001"
}'
Contoh respons 201 (Draft)
{
  "id": "ful_example_001",
  "order_id": "ord_example_001",
  "carrier": "kurir-contoh",
  "tracking_number": "RESI-CONTOH-001",
  "status": "shipped"
}

Stores

Draft

Toko atau channel yang terhubung (hanya baca).

GEThttps://api.example.com/v1/stores

Mengambil toko atau channel yang terhubung beserta status koneksinya.

Scope: stores:read

Parameter

Parameter untuk Daftar toko
NamaLokasiTipeWajibKeterangan
limitqueryintegerTidakJumlah item per halaman, 1 sampai 100. Bawaan 20.
cursorquerystringTidakCursor dari pagination.next_cursor respons sebelumnya.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/stores" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "data": [
    {
      "id": "sto_example_001",
      "name": "Toko Contoh",
      "channel": "marketplace",
      "connection_status": "connected"
    }
  ],
  "pagination": {
    "limit": 20,
    "has_more": false,
    "next_cursor": null
  }
}
GEThttps://api.example.com/v1/stores/{store_id}

Mengambil satu toko berdasarkan id.

Scope: stores:read

Parameter

Parameter untuk Detail toko
NamaLokasiTipeWajibKeterangan
store_idpathstringYaId toko.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/stores/sto_example_001" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "id": "sto_example_001",
  "name": "Toko Contoh",
  "channel": "marketplace",
  "connection_status": "connected"
}

Webhooks

Draft

Langganan notifikasi event ke URL Anda.

GEThttps://api.example.com/v1/webhooks

Mengambil langganan webhook yang terdaftar.

Scope: webhooks:manage

Parameter

Parameter untuk Daftar langganan webhook
NamaLokasiTipeWajibKeterangan
limitqueryintegerTidakJumlah item per halaman, 1 sampai 100. Bawaan 20.
cursorquerystringTidakCursor dari pagination.next_cursor respons sebelumnya.
Contoh request dan respons
Contoh requestDraft
curl -X GET "https://api.example.com/v1/webhooks" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Contoh respons 200 (Draft)
{
  "data": [
    {
      "id": "whk_example_001",
      "url": "https://example.com/webhooks/oneseller",
      "events": [
        "order.created",
        "inventory.low_stock"
      ],
      "status": "active"
    }
  ],
  "pagination": {
    "limit": 20,
    "has_more": false,
    "next_cursor": null
  }
}
POSThttps://api.example.com/v1/webhooks

Mendaftarkan URL penerima untuk satu atau beberapa event. Signing secret hanya ditampilkan sekali.

Scope: webhooks:manage

Parameter

Parameter untuk Buat langganan webhook
NamaLokasiTipeWajibKeterangan
Idempotency-KeyheaderstringTidakNilai unik per operasi agar aman diulang.
urlbodystringYaURL HTTPS penerima.
eventsbodystring[]YaDaftar event, lihat Webhook.
Contoh request dan respons
Contoh requestDraft
curl -X POST "https://api.example.com/v1/webhooks" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: daftar-webhook-0001" \
  -d '{
  "url": "https://example.com/webhooks/oneseller",
  "events": [
    "order.created",
    "inventory.low_stock"
  ]
}'
Contoh respons 201 (Draft)
{
  "id": "whk_example_001",
  "url": "https://example.com/webhooks/oneseller",
  "events": [
    "order.created",
    "inventory.low_stock"
  ],
  "status": "active",
  "signing_secret": "SECRET_CONTOH_TIDAK_NYATA"
}
DELETEhttps://api.example.com/v1/webhooks/{webhook_id}

Menghentikan dan menghapus langganan webhook.

Scope: webhooks:manage

Parameter

Parameter untuk Hapus langganan webhook
NamaLokasiTipeWajibKeterangan
webhook_idpathstringYaId langganan webhook.
Contoh request dan respons
Contoh requestDraft
curl -X DELETE "https://api.example.com/v1/webhooks/whk_example_001" \
  -H "Authorization: Bearer TOKEN_CONTOH" \
  -H "Accept: application/json"
Respons 204 (Draft)
// 204 No Content: tanpa body