Welcome to Xendit’s latest documentation. For legacy content, access the previous documentation here or the previous API reference here.

Overview

Prev Next

Payment Link menyediakan solusi sederhana dan low-code untuk pembayaran satu kali. Pelanggan Anda dapat menyelesaikan pembayaran mereka di halaman checkout yang dihosting Xendit, sehingga Anda tidak perlu membuat halaman checkout dan memproses pembayaran. Konfirmasi pembayaran dikirim ke webhook Anda untuk penanganan lebih lanjut, seperti memperbarui status pesanan Anda.

Cara integrasi

1. Buat Link Pembayaran

Saat pengguna akhir siap untuk checkout, server Anda mengirimkan permintaan ke Xendit untuk membuat Link Pembayaran menggunakan titik akhir dan muatan berikut:

Request - POST /v2/invoices

{
  "external_id": "payment-link-example",
  "amount": 510000,
  "description": "Air Conditioner purchase",
  "invoice_duration": 86400,
  "customer": {
    "given_names": "John",
    "surname": "Doe",
    "email": "johndoe@example.com",
    "mobile_number": "+6287774441111"
  },
  "success_redirect_url": "https://www.google.com",
  "failure_redirect_url": "https://www.google.com",
  "currency": "IDR",
  "items": [
    {
      "name": "Air Conditioner",
      "quantity": 1,
      "price": 100000,
      "category": "Electronic",
      "url": "https://yourcompany.com/example_item"
    }
  ],
  "metadata": {
    "store_branch": "Jakarta"
  }
}      

Response - POST /v2/invoices

{
    "id": "6748105a77f16ebe0cc583a7",
    "external_id": "payment-link-example",
    "user_id": "62440e322008e87fb29c1fd0",
    "status": "PENDING",
    "merchant_name": "Your Business Name",
    "merchant_profile_picture_url": "https://xnd-merchant-logos.s3.amazonaws.com/business/production/62440e322008e87fb29c1fd0-1721897916022.jpeg",
    "amount": 510000,
    "description": "Air Conditioner purchase",
    "expiry_date": "2024-11-29T06:40:26.353Z",
    "invoice_url": "https://checkout-staging.xendit.co/web/6748105a77f16ebe0cc583a7",
    "available_banks": [
        {
            "bank_code": "BNI",
            "collection_type": "POOL",
            "transfer_amount": 510000,
            "bank_branch": "Virtual Account",
            "account_holder_name": "YOUR BUSINESS NAME",
            "identity_amount": 0
        },
        {
            "bank_code": "MANDIRI",
            "collection_type": "POOL",
            "transfer_amount": 510000,
            "bank_branch": "Virtual Account",
            "account_holder_name": "YOUR BUSINESS NAME",
            "identity_amount": 0
        },
        {
            "bank_code": "PERMATA",
            "collection_type": "POOL",
            "transfer_amount": 510000,
            "bank_branch": "Virtual Account",
            "account_holder_name": "YOUR BUSINESS NAME",
            "identity_amount": 0
        },
        {
            "bank_code": "BRI",
            "collection_type": "POOL",
            "transfer_amount": 510000,
            "bank_branch": "Virtual Account",
            "account_holder_name": "YOUR BUSINESS NAME",
            "identity_amount": 0
        },
        {
            "bank_code": "BCA",
            "collection_type": "POOL",
            "transfer_amount": 510000,
            "bank_branch": "Virtual Account",
            "account_holder_name": "YOUR BUSINESS NAME",
            "identity_amount": 0
        }
    ],
    "available_retail_outlets": [
        {
            "retail_outlet_name": "ALFAMART"
        },
        {
            "retail_outlet_name": "INDOMARET"
        }
    ],
    "available_ewallets": [
        {
            "ewallet_type": "OVO"
        },
        {
            "ewallet_type": "DANA"
        },
        {
            "ewallet_type": "SHOPEEPAY"
        },
        {
            "ewallet_type": "LINKAJA"
        },
        {
            "ewallet_type": "ASTRAPAY"
        },
        {
            "ewallet_type": "NEXCASH"
        },
        {
            "ewallet_type": "JENIUSPAY"
        }
    ],
    "available_qr_codes": [
        {
            "qr_code_type": "QRIS"
        }
    ],
    "available_direct_debits": [
        {
            "direct_debit_type": "DD_BRI"
        },
        {
            "direct_debit_type": "DD_MANDIRI"
        }
    ],
    "available_paylaters": [],
    "should_exclude_credit_card": true,
    "should_send_email": false,
    "success_redirect_url": "https://www.google.com",
    "failure_redirect_url": "https://www.google.com",
    "created": "2024-11-28T06:40:26.508Z",
    "updated": "2024-11-28T06:40:26.508Z",
    "currency": "IDR",
    "items": [
        {
            "name": "Air Conditioner",
            "quantity": 1,
            "price": 100000,
            "category": "Electronic",
            "url": "https://yourcompany.com/example_item"
        }
    ],
    "customer": {
        "given_names": "John",
        "surname": "Doe",
        "email": "johndoe@example.com",
        "mobile_number": "+6287774441111"
    },
    "metadata": {
        "store_branch": "Jakarta"
    }
}

2. Arahkan pengguna akhir ke halaman yang dihosting Xendit

Gunakan invoice_url respons dari untuk mengarahkan pelanggan ke halaman checkout yang dihosting Xendit.

3. Pengguna akhir menyelesaikan pembayaran

Pengguna akhir menyelesaikan pembayaran di halaman yang dihosting Xendit. Jika pembayaran berhasil, mereka akan dialihkan ke success_redirect_url. Jika gagal, mereka dapat mencoba pembayaran lagi di halaman pembayaran yang sama.

Xendit memberikan pesan kesalahan yang jelas di halaman yang dihosting Xendit untuk memandu pengguna akhir.

4. Terima webhook

Ketika pembayaran selesai, Xendit mengirimkan webhook ke titik akhir yang Anda konfigurasikan.

{
    "id": "6748105a77f16ebe0cc583a7",
    "items": [
        {
            "url": "https://yourcompany.com/example_item",
            "name": "Air Conditioner",
            "price": 100000,
            "category": "Electronic",
            "quantity": 1
        }
    ],
    "amount": 510000,
    "status": "PAID",
    "created": "2024-11-28T06:40:26.508Z",
    "is_high": false,
    "paid_at": "2024-11-28T06:41:29.776Z",
    "updated": "2024-11-28T06:41:34.702Z",
    "user_id": "62440e322008e87fb29c1fd0",
    "currency": "IDR",
    "payment_id": "ewc_99013716-9354-439e-9fea-e61a06e87ea3",
    "description": "Air Conditioner purchase",
    "external_id": "payment-link-example",
    "paid_amount": 510000,
    "ewallet_type": "DANA",
    "merchant_name": "Your Business Name",
    "payment_method": "EWALLET",
    "payment_channel": "DANA",
    "payment_method_id": "pm-8a1e1cc3-b67c-4951-bc1e-470bc94ad816",
    "failure_redirect_url": "https://www.google.com",
    "success_redirect_url": "https://www.google.com"
}

Lifecycle Link Pembayaran

Berikut adalah tabel yang merangkum status dan deskripsinya untuk lifecycle Link Pembayaran:

Status

Deskripsi

Pending

Status Link Pembayaran akan menjadi PENDING setelah dibuat. Status akan tetap PENDING hingga transaksi berhasil diselesaikan, kedaluwarsa (berdasarkan invoice_duration), atau kedaluwarsa secara manual.

Paid

Status berubah menjadi PAID saat pembayaran berhasil diselesaikan. Jika pengguna gagal selama proses, mereka dapat mencoba lagi dalam Link Pembayaran yang sama. Selama status ini, Anda akan menerima webhook faktur dengan status PAID.

Expired

Status berubah menjadi EXPIRED saat invoice_duration Link Pembayaran tercapai atau Anda akan kedaluwarsa secara manual. Pengguna akhir tidak akan lagi memiliki akses ke invoice_url. Selama status ini, Anda akan menerima webhook faktur untuk mengidentifikasi transisi status. Link Pembayaran yang kedaluwarsa tidak dapat diaktifkan kembali.