Qirim by alula — Developer REST API & Webhooks Reference

REST API v1.0 100% CONNECTED

Panduan lengkap, spesifikasi parameter, dan cuplikan kode siap pakai (cURL, PHP/Laravel, Node.js, Python) untuk seluruh fitur WhatsApp Gateway, Otomasi Pesan, Phonebook, dan OTP Engine.

1. Authentication & API Credentials

Semua request REST API diautentikasi menggunakan API Key perangkat yang valid. Sertakan token Anda di HTTP Header Authorization: Bearer <API_KEY> atau x-api-key: <API_KEY>.

Base URL:
https://qirim.web.id/api/v1
HTTP Headers:
Authorization: Bearer YOUR_DEVICE_API_KEY
Content-Type: application/json
POST

/api/v1/send-message

Kirim pesan teks personal atau grup WhatsApp dengan simulasi mengetik manusia (anti-ban delay) dan dukungan variasi teks Spintax {Halo|Hai|Selamat Pagi}.

Request Body (JSON):
Parameter Tipe Wajib Keterangan
target String Ya Nomor WhatsApp tujuan (e.g. 081234567890 atau 6281234567890) atau ID Grup (...-group@g.us).
message String Ya Isi pesan teks. Mendukung Spintax {Halo|Hai} Kak.
curl -X POST https://qirim.web.id/api/v1/send-message \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "message": "{Halo|Hai} Kak! Pesanan Anda telah kami terima dan sedang diproses."
  }'
<?php
use Illuminate\Support\Facades\Http;

$response = Http::withHeaders([
    'Authorization' => 'Bearer ' . env('QIRIM_API_KEY'),
])->post('https://qirim.web.id/api/v1/send-message', [
    'target' => '081234567890',
    'message' => 'Halo Kak, tagihan Anda sebesar Rp 150.000 telah terbit.',
]);

return $response->json();
const axios = require('axios');

const res = await axios.post('https://qirim.web.id/api/v1/send-message', {
  target: '081234567890',
  message: 'Hello from Node.js!'
}, {
  headers: { 'Authorization': 'Bearer ' + process.env.QIRIM_API_KEY }
});

console.log(res.data);
import requests

headers = {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
}
payload = {
    "target": "081234567890",
    "message": "Halo dari Python script!"
}
response = requests.post("https://qirim.web.id/api/v1/send-message", json=payload, headers=headers)
print(response.json())
Response Sukses (200 OK):
{
  "status": true,
  "message": "Message sent successfully",
  "data": {
    "id": "3EB09F2184912...",
    "target": "081234567890",
    "device_id": 1,
    "timestamp": "2026-09-06T09:00:00.000Z"
  }
}
POST

/api/v1/send-media

Kirim file media (Gambar JPG/PNG, Video MP4, Audio Rekaman/Voice Note, Dokumen/PDF Faktur) menggunakan URL publik file Anda.

Parameter Tipe Wajib Keterangan
target String Ya Nomor WhatsApp tujuan.
url / media_url String Ya Direct URL file media (e.g. https://domain.com/invoice-123.pdf).
type String Opsional Pilihan tipe: image (default), video, audio, document.
caption String Opsional Teks keterangan yang menyertai media.
filename String Opsional Nama file untuk lampiran dokumen (e.g. Faktur-Pembelian.pdf).
curl -X POST https://qirim.web.id/api/v1/send-media \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "url": "https://example.com/files/invoice-INV8821.pdf",
    "type": "document",
    "caption": "Berikut e-invoice pembayaran Anda.",
    "filename": "Invoice-INV8821.pdf"
  }'
POST

/api/v1/send-location

Kirim pin koordinat lokasi Google Maps langsung ke chat WhatsApp.

Parameter Tipe Wajib Keterangan
target String Ya Nomor WhatsApp tujuan.
latitude Float Ya Garis lintang (e.g. -6.200000).
longitude Float Ya Garis bujur (e.g. 106.816666).
name String Opsional Nama tempat / gedung (e.g. Kantor Pusat Alula).
address String Opsional Alamat lengkap lokasi.
curl -X POST https://qirim.web.id/api/v1/send-location \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "latitude": -6.200000,
    "longitude": 106.816666,
    "name": "Alula Headquarters",
    "address": "Jl. Sudirman Kav 25, Jakarta Selatan"
  }'
POST

/api/v1/send-contact

Kirim kartu kontak (vCard) interaktif yang bisa langsung disimpan ke buku kontak penerima dengan satu ketukan.

Parameter Tipe Wajib Keterangan
target String Ya Nomor WhatsApp tujuan.
contact_name String Ya Nama kontak yang dibagikan.
contact_phone String Ya Nomor kontak yang dibagikan.
curl -X POST https://qirim.web.id/api/v1/send-contact \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "contact_name": "Customer Support Alula",
    "contact_phone": "628999888777"
  }'
POST

/api/v1/send-template

Kirim pesan menggunakan template tersimpan dengan penggantian variabel dinamis seperti {name}, {order_id}, {total}.

curl -X POST https://qirim.web.id/api/v1/send-template \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "template_name": "Konfirmasi Pembayaran",
    "variables": {
      "name": "Budi Santoso",
      "order_id": "INV-2026-001",
      "total": "Rp 250.000"
    }
  }'
POST

/api/v1/broadcast

Kirim pesan massal ke banyak nomor sekaligus secara asynchronous di background dengan proteksi anti-ban interval.

curl -X POST https://qirim.web.id/api/v1/broadcast \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipients": ["081234567890", "081234567891", "081234567892"],
    "message": "{Halo|Hai} Pelanggan setia, dapatkan diskon 30% hari ini!",
    "delay_seconds": 3
  }'
POST

/api/v1/schedule-message

Jadwalkan pengiriman pesan di masa depan (one-time) atau berulang otomatis (daily, weekly, monthly).

curl -X POST https://qirim.web.id/api/v1/schedule-message \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "message": "Pengingat: Tagihan internet Anda jatuh tempo besok.",
    "schedule_time": "2026-09-10 09:00:00",
    "recurring_type": "monthly"
  }'
Endpoint Jadwal Lainnya:
GET /api/v1/scheduled Mendapatkan daftar seluruh pesan terjadwal & berulang akun Anda.
DELETE /api/v1/scheduled/:id Membatalkan atau menghapus antrean jadwal pesan.
POST

/api/v1/otp/send & /api/v1/otp/verify

Engine pengiriman dan verifikasi kode OTP / 2FA sekali pakai dengan kedaluwarsa otomatis.

1. Generate & Kirim OTP:
curl -X POST https://qirim.web.id/api/v1/otp/send \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "length": 6,
    "expiry_minutes": 5,
    "type": "2fa"
  }'
2. Validasi Kode OTP:
curl -X POST https://qirim.web.id/api/v1/otp/verify \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "target": "081234567890",
    "otp_code": "849201"
  }'

10. Manajemen Perangkat & Session WhatsApp

Integrasi manajemen perangkat langsung dari aplikasi 3rd party Anda tanpa perlu membuka dashboard qirim.

Method & Endpoint Fungsi Payload / Keterangan
GET /api/v1/devices Daftar semua perangkat akun Anda Mengembalikan status live Baileys dan sisa kuota.
GET /api/v1/device/status Status perangkat aktif saat ini Status koneksi (connected, scan_qr, disconnected) & limit kuota.
GET /api/v1/device/qr Dapatkan QR Code Base64 Kembalikan qr_image_url untuk disematkan langsung di <img src="..."> aplikasi Anda.
POST /api/v1/device/pairing-code Generate Pairing Code 8 digit Body: {"phone": "081234567890"} untuk koneksi WhatsApp via nomor telepon.
POST /api/v1/device/disconnect Disconnect / Logout Session Memutus koneksi socket WhatsApp dan membersihkan session auth.
POST /api/v1/webhook/set Set / Update Webhook URL Body: {"webhook_url": "https://api.yourdomain.com/webhook"}.

11. Phonebook Contacts & Grouping API

Kelola buku kontak dan pengelompokan pelanggan Anda via REST API.

GET /api/v1/contacts Ambil daftar kontak (mendukung filter ?group_id=...).
POST /api/v1/contacts Tambah kontak: {"name": "Budi", "phone": "081234567890", "group_id": 1, "custom_var1": "VIP"}.
DELETE /api/v1/contacts/:id Hapus kontak berdasarkan ID.
GET /api/v1/groups Ambil daftar grup kontak dan jumlah anggota tiap grup.
POST /api/v1/groups Tambah grup kontak baru: {"name": "Pelanggan VIP", "description": "Grup prioritas"}.
DELETE /api/v1/groups/:id Hapus grup kontak berdasarkan ID.

12. Auto-Reply Chatbot Rules API

Kelola aturan respon otomatis bot WhatsApp untuk perangkat Anda.

GET /api/v1/autoreply Ambil daftar seluruh aturan auto-reply pada perangkat ini.
POST /api/v1/autoreply Tambah aturan baru:
{
  "keyword": "info produk",
  "response": "Halo {name}, katalog produk kami ada di https://katalog.web.id",
  "match_type": "contains", // exact, contains, starts_with
  "is_default": 0
}
DELETE /api/v1/autoreply/:id Hapus aturan auto-reply berdasarkan ID.

13. Message Templates API

Kelola template pesan siap pakai untuk kampanye dan notifikasi.

GET /api/v1/templates Dapatkan daftar seluruh template pesan tersimpan.
POST /api/v1/templates Buat template baru:
{
  "name": "Invoice Notifikasi",
  "category": "billing",
  "content": "Halo {name}, invoice #{order_id} sebesar {total} sudah diterbitkan."
}
DELETE /api/v1/templates/:id Hapus template pesan berdasarkan ID.
GET

/api/v1/account

Cek profil akun, paket langganan aktif, fitur yang diizinkan oleh paket, dan akumulasi penggunaan kuota pesan.

curl -X GET https://qirim.web.id/api/v1/account \
  -H "Authorization: Bearer YOUR_API_KEY"

15. Webhooks & Event Payloads

Qirim by alula mengirimkan HTTP POST event real-time ke URL webhook yang Anda daftarkan setiap kali terjadi interaksi WhatsApp.

Event: messages.received (Pesan Masuk)
{
  "event": "messages.received",
  "data": {
    "device_id": 1,
    "device_name": "Customer Support",
    "sender": "6281234567890",
    "message": "Halo, apakah stok barang ini masih ada?",
    "is_group": false,
    "timestamp": 1725537600
  }
}
Event: device.connected & device.disconnected
{
  "event": "device.connected",
  "data": {
    "device_id": 1,
    "phone": "6281234567890",
    "status": "connected",
    "timestamp": "2026-09-06T09:00:00.000Z"
  }
}