Webhook

Webhook memungkinkan Anda menerima pembaruan real-time tentang transaksi Anda. Ketika status transaksi diperbarui, kami akan mengirimkan permintaan POST ke URL yang telah Anda konfigurasikan.

Konfigurasi

Anda dapat mengkonfigurasi URL webhook Anda di halaman "Pengaturan Webhook" pada dashboard merchant Anda. Anda juga akan diberikan kunci rahasia yang harus Anda gunakan untuk memverifikasi keaslian webhook.

Untuk mengirimkan URL webhook dan kunci rahasia Anda:

  1. Masuk ke dashboard merchant Anda.
  2. Navigasi ke bagian "Pengaturan Webhook" (biasanya di bawah menu Pengaturan atau Integrasi).
  3. Masukkan URL endpoint webhook Anda di kolom yang tersedia.
  4. Masukkan kunci rahasia yang telah Anda buat atau yang diberikan kepada Anda.
  5. Simpan perubahan Anda.

Verifikasi

Untuk memastikan bahwa permintaan webhook berasal dari kami, kami akan menyertakan tanda tangan (signature) di header X-Ongkirmurah-Signature. Tanda tangan tersebut adalah hash HMAC-SHA256 dari timestamp dan payload permintaan, menggunakan kunci rahasia Anda.

Berikut adalah contoh cara memverifikasi tanda tangan di PHP:

$secret = 'kunci-rahasia-webhook-anda';
$payload = file_get_contents('php://input');
$timestamp = $_SERVER['HTTP_X_ONGKIRMURAH_TIMESTAMP'];
$signature = $_SERVER['HTTP_X_ONGKIRMURAH_SIGNATURE'];

$expectedSignature = hash_hmac('sha256', $timestamp . '.' . $payload, $secret);

if ($signature !== $expectedSignature) {
    // Tanda tangan tidak valid
    http_response_code(401);
    exit();
}

Header Event Name

Untuk mengidentifikasi jenis event webhook, kami menyertakan header X-Ongkirmurah-Event dengan nama event yang relevan. Berikut adalah daftar event yang mungkin Anda terima:

Event Name Deskripsi
transaction.created Dipicu ketika transaksi baru berhasil dibuat.
transaction.success Dipicu ketika transaksi sukses.
transaction.updated Dipicu ketika transaksi diperbarui.
transaction.calculation-adjusted Dipicu ketika perhitungan transaksi disesuaikan.
transaction.cancelled Dipicu ketika transaksi dibatalkan.
transaction.delivered Dipicu ketika transaksi ditandai sebagai terkirim.
transaction.failed Dipicu ketika transaksi gagal.
transaction.on-delivery Dipicu ketika transaksi sedang dalam pengiriman.
transaction.picked-up-and-being-processed Dipicu ketika transaksi diambil dan sedang diproses.
transaction.returned Dipicu ketika transaksi dikembalikan.
transaction.will-be-returned Dipicu ketika transaksi ditandai akan dikembalikan.

Payload

Payload akan berupa objek JSON dari attribut data dengan struktur yang sama seperti respons dari API Pelacakan.

{
    "awb": "JNE1234567890",
    "courier_name": "JNE Express",
    "history": [
        {
            "datetime": "2025-06-28 10:00:00",
            "message": "Paket diterima di kantor cabang pengirim",
            "note": "-"
        }
    ],
    "item_height": 5,
    "item_length": 20,
    "item_name": "Baju Kaos",
    "item_type": "Pakaian",
    "item_value": 100000,
    "item_weight": 500,
    "item_width": 15,
    "receiver_address": "Jl. Penerima No. 45, RT 003 RW 004",
    "receiver_city": "Kota Tujuan",
    "receiver_district": "Kecamatan Tujuan",
    "receiver_name": "Siti Aminah",
    "receiver_phone": "089876543210",
    "receiver_province": "Provinsi Tujuan",
    "receiver_subdistrict": "Kelurahan Tujuan",
    "receiver_zip_code": "54321",
    "ref_id": "JNE123456789",
    "sender_address": "Jl. Contoh No. 123, RT 001 RW 002",
    "sender_city": "Kota Contoh",
    "sender_district": "Kecamatan Contoh",
    "sender_name": "Budi Santoso",
    "sender_phone": "081234567890",
    "sender_province": "Provinsi Contoh",
    "sender_subdistrict": "Kelurahan Contoh",
    "sender_zip_code": "12345",
    "service_code": "REG",
    "service_name": "Reguler",
    "fee": 10000,
    "fee_tax": 1000,
    "insurance": 5000,
    "insurance_tax": 500,
    "total_fee": 16500,
    "supplier_calculation_adjustment": {
        "weight": 1200,
        "length": 25,
        "width": 20,
        "height": 10,
        "fee": 12000,
        "insurance": 6000,
        "return_cost": 0
    },
    "shipment_status": 0,
    "status": 1
}
Nama Tipe Data Contoh Deskripsi
awb string JTE012345678901 Nomor resi paket
ref_id string 1712368141232 Nomor Ref ID transaksi Ongkirmurah
service_code string jtexpress_ez Kode layanan yang digunakan untuk transaksi
service_name string EZ Nama layanan pengiriman untuk dari kode service saat transaksi
courier_name string J&T Express Nama kurir ekspedisi dari kode layanan transaksi
status integer 1 Status transaksi pada layanan Ongkirmurah
sender_name string John Doe Nama pengirim
sender_address string Jl Alamat pengirim Detail alamat pengirim
sender_phone string 08000000001 No telpon pengirim
sender_subdistrict string Kel. Tambora Nama kelurahan pengirim
sender_district string Tambora Nama kecamatan pengirim
sender_city string Kota Adm. Jakarta Barat Nama kota pengirim
sender_province string Dki Jakarta Nama provinsi pengirim
sender_zip_code string 11220 Kode pos pengirim
receiver_name string Jane Doe Nama penerima
receiver_address string Jl Alamat penerima Detail alamat penerima
receiver_phone string 08000000002 No telpon penerima
receiver_subdistrict string Kel. Tambora Nama kelurahan penerima
receiver_district string Tambora Nama kecamatan penerima
receiver_city string Kota Adm. Jakarta Barat Nama kota penerima
receiver_province string Dki Jakarta Nama provinsi penerima
receiver_zip_code string 11220 Kode pos penerima
item_name string Nama barang Nama barang yang dikirim
item_type string 1 Tipe barang
item_length integer 10 Dimensi panjang barang dalam sentimeter (cm)
item_width integer 15 Dimensi lebar barang dalam sentimeter (cm)
item_height integer 20 Dimensi tinggi barang dalam sentimeter (cm)
item_weight integer 1000 Berat barang dalam gram (gr)
item_value integer 10000 Harga barang dalam Rupiah
fee integer 10000 Biaya pengiriman
fee_tax integer 1000 Pajak biaya pengiriman
insurance integer 5000 Biaya asuransi
insurance_tax integer 500 Pajak biaya asuransi
total_fee integer 16500 Total biaya pengiriman (fee + fee_tax + insurance + insurance_tax)
supplier_calculation_adjustment object - Objek yang berisi penyesuaian perhitungan dari supplier. Hanya ada jika ada penyesuaian.
supplier_calculation_adjustment.weight integer 1200 Penyesuaian berat barang dalam gram (gr). Tidak selalu ada.
supplier_calculation_adjustment.length integer 25 Penyesuaian dimensi panjang barang dalam sentimeter (cm). Tidak selalu ada.
supplier_calculation_adjustment.width integer 20 Penyesuaian dimensi lebar barang dalam sentimeter (cm). Tidak selalu ada.
supplier_calculation_adjustment.height integer 10 Penyesuaian dimensi tinggi barang dalam sentimeter (cm). Tidak selalu ada.
supplier_calculation_adjustment.fee integer 12000 Penyesuaian biaya pengiriman. Tidak selalu ada.
supplier_calculation_adjustment.insurance integer 6000 Penyesuaian biaya asuransi. Tidak selalu ada.
supplier_calculation_adjustment.return_cost integer 0 Penyesuaian biaya pengembalian. Tidak selalu ada.
shipment_status integer 1 Status kiriman paket
history array - Data timeline kiriman paket
history.*.datetime string 1970-01-01 00:00:00 Waktu paket berganti status pengiriman
history.*.message string JAKARTA - Manifes Pesan terkait status paket
history.*.note string - Catatan khusus terkait status paket
history.*.pod.pod_photo string https://client.coresyssap.com/photo/pod/TEST-16122022-201 Tautan foto bukti pengiriman (opsional)
history.*.pod.pod_sign string https://client.coresyssap.com/photo/pod_signature/TEST-16122022-201 Tautan foto bukti tanda tangan penerima (opsional)

Respons

Endpoint Anda harus mengembalikan kode status HTTP 2xx untuk mengakui penerimaan webhook. Jika kami tidak menerima kode status 2xx, kami akan menganggap pengiriman webhook gagal dan akan mencoba kembali beberapa kali dengan strategi backoff eksponensial.