Developer

Tiga panggilan dan satu webhook.

Gateway adalah checkout hosted, jadi integrasinya sengaja dibuat ringkas: buat order, arahkan pelanggan ke halaman checkout, lalu verifikasi hasil yang bertanda tangan. Semua yang tercantum di bawah adalah keseluruhan cakupannya — UI pembayaran, logika metode, 3-D Secure, wallet, dan bukti pembayaran kami yang membangun dan menjaganya tetap mutakhir.

Gambaran umum

Yang akan Anda integrasikan.

  • REST melalui HTTPS
  • JSON masuk, JSON keluar
  • API key Bearer
  • Idempotency key
  • Webhook bertanda tangan
  • Perlindungan replay
  • Mode test dan live
  • SDK iOS & Android
  • Plugin toko
  • Field tertanam

Quickstart

Dari nol hingga order terbayar.

Seluruh alur ideal. Nominal dalam satuan terkecil (minor unit), referensi ditentukan oleh Anda, dan URL checkout adalah tujuan pengalihan pelanggan. Base URL API diberikan bersama key sandbox Anda — ekspor sebagai PROTOCORE_API_BASE dan panggilan di bawah berjalan persis seperti tertulis.

01

Buat order

Satu panggilan dengan nominal, mata uang, dan referensi milik Anda. Idempotency key Anda buat sendiri — permintaan yang diulang akan mengembalikan order asli, bukan membuat order kedua.

POST /v1/orders
curl -X POST "$PROTOCORE_API_BASE/v1/orders" \
  -H "Authorization: Bearer $PROTOCORE_API_KEY" \
  -H "Idempotency-Key: 9F21-0716" \
  -H "Content-Type: application/json" \
  -d '{
        "amount": 4900,
        "currency": "EUR",
        "reference": "9F21-0716",
        "line_items": [
          { "name": "Brand identity sprint", "amount": 3850 },
          { "name": "Typeface licensing",   "amount": 600 },
          { "name": "Rush delivery",        "amount": 400 }
        ],
        "return_url": "https://arcstudio.ro/thanks"
      }'
02

Arahkan pelanggan ke checkout

Respons memuat URL checkout pada host checkout Anda sendiri — yang diberikan bersama sandbox, atau domain Anda sendiri setelah diarahkan ke kami. Alihkan pelanggan ke sana, atau buka lewat SDK; di halaman itulah metode pembayaran, wallet, dan 3-D Secure berada, jadi tidak ada yang perlu Anda bangun.

201 Created
{
  "id": "ord_2h4Kq9wRz",
  "reference": "9F21-0716",
  "amount": 4900,
  "currency": "EUR",
  "status": "pending",
  "checkout_url": "https://<your-checkout-host>/c/2h4Kq9wRz"
}
03

Verifikasi hasil bertanda tangan

Saat pembayaran selesai, event bertanda tangan dikirim ke endpoint Anda. Verifikasi tanda tangan dengan webhook secret Anda sebelum memercayai apa pun, lalu penuhi pesanan berdasarkan referensi yang sudah Anda kenal.

POST /your/webhook — order.paid
{
  "type": "order.paid",
  "id": "evt_7Ka2Lm",
  "created": "2026-07-23T09:41:02Z",
  "data": {
    "id": "ord_2h4Kq9wRz",
    "reference": "9F21-0716",
    "amount": 4900,
    "currency": "EUR",
    "method": "usdc",
    "settlement": { "currency": "EUR", "amount": 4900, "rate": "0.9184" }
  }
}

Referensi

Endpoint yang benar-benar akan Anda pakai.

Dokumentasi memuat lebih banyak, tetapi inilah set yang tidak pernah dilampaui oleh kebanyakan integrasi.

POST /v1/orders
Buat order dan terima URL checkout-nya. Memerlukan idempotency key.
GET /v1/orders/:id
Kondisi terkini sebuah order — status, metode, settlement, dan refund.
POST /v1/orders/:id/refunds
Refund atas order, penuh atau sebagian, dengan alasan yang wajib diisi.
POST /v1/orders/:id/void
Lepaskan otorisasi sebelum settlement, sehingga tidak ada dana yang berpindah sama sekali.
POST /v1/links
Buat tautan pembayaran — sekali pakai atau menerima banyak pembayaran, dengan masa berlaku opsional.
GET /v1/payouts/:id
Satu batch settlement beserta order yang mendanainya, dengan rincian biaya.
POST /v1/customers/:id/cards
Simpan kartu di vault untuk tagihan one-click dan berulang; mengembalikan referensi token.
POST /v1/subscriptions
Tagih kartu yang tersimpan sesuai jadwal; setiap siklus menghasilkan order tersendiri.

Webhook

Yang didengar backend Anda.

Setiap event membawa referensi order yang Anda buat, sehingga handler Anda cukup berupa switch pada tipe event dan lookup di sisi Anda sendiri.

order.paid
Otorisasi dan capture berhasil — penuhi pesanan berdasarkan referensi.
order.failed
Pembayaran tidak selesai, disertai alasan yang dapat ditindaklanjuti operator.
order.refunded
Refund diterbitkan, penuh atau sebagian, beserta alasan dan catatannya.
order.disputed
Chargeback dibuka, dengan bukti yang sudah terlampir pada order.
payout.settled
Batch settlement dikirim ke rekening Anda, beserta daftar order di baliknya.
subscription.charged
Siklus berulang menghasilkan order dan bukti pembayarannya sendiri.
Verifikasi

Periksa tanda tangan sebelum memercayai isinya.

Setiap pengiriman membawa timestamp dan tanda tangan HMAC atas raw body. Bandingkan dalam waktu konstan, tolak apa pun yang lebih lama dari batas toleransi Anda, dan anggap event id yang duplikat sudah ditangani — kami mengulang pengiriman bila respons bukan 2xx, jadi handler Anda juga harus idempotent.

Node — verifikasi tanda tangan
import { createHmac, timingSafeEqual } from "node:crypto";

export function verify(rawBody, header, secret) {
  const [ts, sig] = header.split(",").map((p) => p.split("=")[1]);
  const expected = createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex");

  const a = Buffer.from(sig, "hex");
  const b = Buffer.from(expected, "hex");
  if (a.length !== b.length || !timingSafeEqual(a, b)) return false;

  // Reject replays outside a five-minute window.
  return Math.abs(Date.now() / 1000 - Number(ts)) < 300;
}

Jaminan

Properti yang bisa Anda andalkan.

01

Pembuatan yang idempotent

Setiap pembuatan order memakai idempotency key. Permintaan yang diulang — setelah timeout, deploy, atau pengiriman ulang antrean — mengembalikan order asli, bukan menagih dua kali.

02

Event bertanda tangan dan tahan replay

Webhook membawa tanda tangan HMAC bertimestamp dan event id yang stabil. Pengiriman diulang dengan backoff hingga endpoint Anda menjawab 2xx, sehingga jendela deploy tidak membuat pembayaran hilang.

03

Satu referensi, dari awal sampai akhir

Referensi yang Anda berikan saat pembuatan muncul di checkout, bukti pembayaran, webhook, payout, dan refund berikutnya. Tidak ada pengenal kedua yang harus dipetakan antarsistem.

04

Mode test memakai jalur kode yang sama

Key test menjalankan alur yang identik pada sesi uji. Yang lolos di test adalah yang dirilis — bedanya hanya key yang Anda kirim, bukan endpoint yang Anda panggil.

Data uji

Cara menguji alur yang penting.

Setiap jalur di bawah ini punya kartu uji yang sesuai, tercantum bersama kunci Anda saat sandbox diterbitkan — nomornya berbeda untuk tiap sandbox dan tidak dipublikasikan di sini, sehingga tetap akurat saat rentang uji skema kartu berubah. Perilakunya tetap deterministik: pengujian bisa memastikan penolakan semudah memastikan keberhasilan.

Disetujui langsung
Otorisasi dan capture tanpa tantangan 3-D Secure — jalur ideal.
Tantangan 3-D Secure
Memaksa tantangan yang bisa Anda lalui, sehingga alur kembalinya dapat diuji.
Soft decline
Ditolak karena dana tidak cukup, lalu dicoba ulang lewat rute alternatif.
Hard decline
Ditolak permanen karena kartu kedaluwarsa, tanpa percobaan ulang.
Jaringan uji USDC
USDC test-net di Ethereum, Base, dan Solana, dengan harga kurs tetap.
Simulasi transfer
Tandai transfer vIBAN uji sebagai diterima untuk mengubah pesanan menjadi lunas.

Dapatkan kunci, lalu mulai.

Merchant sandbox dengan kunci API, secret webhook, dan semua metode aktif — plus referensi lengkap, agar tim Anda bisa berintegrasi sebelum ada yang ditandatangani.