🦀
Maiki Gateway API Docs

Panduan Integrasi & Referensi API Lengkap

📚 Dokumentasi Resmi

Maiki API Gateway & Webhook Dispatcher

Maiki Gateway adalah layer akses basis data dan webhook relay berkinerja tinggi berbasis Go. Layanan ini mengabstraksi koneksi langsung ke database MySQL, mengamankan akses melalui enkripsi SHA-256 API Key, serta menyediakan sistem distribusi data otomatis ke berbagai webhook konsumen secara asinkron.

Base URL Produksi: https://maiki.algovisia.com

🚀 1. Cara Mulai Cepat (Quickstart)

Untuk menghubungkan aplikasi atau website baru ke Maiki Gateway, alur kerjanya terdiri dari 3 langkah mudah:

1

Dapatkan API Key

Generate Master API Key untuk website Anda di database gateway.

2

Daftarkan Webhook

Panggil POST /subscribe untuk mendaftarkan URL endpoint penerima.

3

Kirim & Broadcast

Kirim JSON via GET /send atau notifikasi langsung via POST /notify.

🔑 2. Autentikasi & Registrasi API Key

Semua request (kecuali GET /health dan dashboard web) mewajibkan header HTTP Authorization dengan skema Bearer.

# Header Autentikasi yang Wajib Disertakan
Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g

Cara Mendaftarkan API Key untuk Domain Baru:

Jalankan helper script berikut di server untuk membuat API key baru secara instan:

./scripts/create_api_key.sh "NamaAplikasi/DomainBaru"

📡 3. Mendaftarkan Webhook Subscriber (POST /subscribe)

Gunakan endpoint ini agar endpoint URL aplikasi Anda atau layanan pihak ketiga terdaftar dalam daftar distribusi broadcast.

Contoh Request (cURL)
curl -X POST "https://maiki.algovisia.com/subscribe" \
  -H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "https://myapp.com/webhook",
    "name": "Production Server"
  }'

📢 4. Mengirim Data & Trigger Broadcast

Untuk mengirimkan data ke seluruh webhook aktif secara massal (broadcast):

Langkah A Kirim Payload JSON (GET /send)

curl -X GET "https://maiki.algovisia.com/send?payload=%7B%22event%22%3A%22user.created%22%2C%22id%22%3A123%7D&source=myapp" \
  -H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g"

Langkah B Trigger Broadcast Asinkron (POST /broadcast)

curl -X POST "https://maiki.algovisia.com/broadcast" \
  -H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g"

🎯 5. Mengirim Notifikasi ke Single Receiver (POST /notify)

Jika Anda ingin mengirim payload ke hanya 1 penerima spesifik tanpa melakukan broadcast ke semua subscriber lain, gunakan endpoint POST /notify.

Contoh Request (cURL)
curl -X POST "https://maiki.algovisia.com/notify" \
  -H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g" \
  -H "Content-Type: application/json" \
  -d '{
    "endpoint": "https://specific-receiver.com/webhook",
    "payload": {
      "event": "invoice.paid",
      "amount": 500000,
      "currency": "IDR"
    }
  }'

💻 6. Contoh Implementasi Webhook Receiver di Sisi Client

Berikut adalah contoh kode untuk menerima dan memproses kiriman webhook dari Maiki Gateway di aplikasi client:

Contoh Webhook Receiver (PHP / Laravel / Native)
<?php
// webhook.php
header('Content-Type: application/json');

// 1. Ambil payload JSON dari body request
$rawPayload = file_get_contents('php://input');
$data = json_decode($rawPayload, true);

if (!$data) {
    http_response_code(400);
    echo json_encode(['status' => 'invalid payload']);
    exit;
}

// 2. Akses data yang dikirim Maiki Gateway
$payloadId = $data['payload_id'] ?? null;
$source    = $data['source'] ?? '';
$eventData = $data['data'] ?? [];

// 3. Proses logika bisnis aplikasi Anda...
error_log("Diterima webhook #$payloadId dari $source: " . json_encode($eventData));

// 4. Berikan respon HTTP 200 OK
http_response_code(200);
echo json_encode(['status' => 'received', 'timestamp' => time()]);
?>
Contoh Webhook Receiver (Node.js / Express)
const express = require('express');
const app = express();

app.use(express.json());

app.post('/webhook', (req, res) => {
  const { payload_id, source, data, timestamp } = req.body;
  
  console.log(`[Webhook Diterima] ID #${payload_id} dari ${source}:`, data);
  
  // Respon 200 OK agar gateway menandai sukses
  res.status(200).json({ status: 'received' });
});

app.listen(3000, () => console.log('Webhook receiver running on port 3000'));

📋 Tabel Referensi Seluruh Endpoint API

Endpoint Method Auth Deskripsi
/health GET Publik Cek ketersediaan dan latensi gateway.
/send?payload={JSON} GET Bearer Key Ingest payload JSON ke basis data.
/subscribe POST Bearer Key Daftarkan endpoint webhook baru.
/subscribers GET Bearer Key Dapatkan daftar seluruh subscriber webhook.
/unsubscribe POST Bearer Key Nonaktifkan subscriber webhook.
/broadcast POST Bearer Key Memicu pengiriman broadcast asinkron ke semua webhook aktif.
/notify POST Bearer Key Kirim notifikasi langsung ke 1 endpoint / subscriber spesifik.
/payloads GET Bearer Key Ambil log 50 data payload terakhir.