Gateway

API Documentation

Integrasikan WhatsApp ke aplikasimu dengan REST API sederhana. Base URL: https://gateway.embryovault.net

1. Authentication

Semua request ke /api/send/* butuh header Authorization: Bearer <token>. Token didapat dari menu API Tokens di dashboard.

Authorization: Bearer wag_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Token terikat ke user dan (opsional) ke 1 device spesifik. Simpan token seperti password — jangan commit ke git/publish.

2. Kirim Pesan Teks

POST /api/send/text

Request body (JSON)

FieldTipeWajibKeterangan
tostringyaNomor tujuan dengan kode negara tanpa "+". Contoh: 6281234567890
messagestringyaIsi pesan (max 4096 karakter)
device_idinttidakID device yang dipakai. Opsional jika token sudah terikat ke 1 device.

Contoh — curl

curl -X POST https://gateway.embryovault.net/api/send/text \
  -H "Authorization: Bearer wag_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "6281234567890",
    "message": "Halo dari Gateway!"
  }'

Contoh — Node.js (fetch)

const res = await fetch('https://gateway.embryovault.net/api/send/text', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + process.env.GATEWAY_TOKEN,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    to: '6281234567890',
    message: 'Halo dari Node!'
  }),
});
const data = await res.json();
console.log(data);

Contoh — PHP

<?php
$ch = curl_init('https://gateway.embryovault.net/api/send/text');
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'Authorization: Bearer ' . getenv('GATEWAY_TOKEN'),
    'Content-Type: application/json',
  ],
  CURLOPT_POSTFIELDS => json_encode([
    'to' => '6281234567890',
    'message' => 'Halo dari PHP!',
  ]),
]);
$res = curl_exec($ch);
curl_close($ch);
echo $res;

Contoh — Python

import requests, os

r = requests.post(
    'https://gateway.embryovault.net/api/send/text',
    headers={'Authorization': 'Bearer ' + os.environ['GATEWAY_TOKEN']},
    json={'to': '6281234567890', 'message': 'Halo dari Python!'},
)
print(r.json())

Response sukses (200)

{
  "ok": true,
  "message_id": 123,
  "wa_message_id": "3EB0C431F...4E5"
}

Response error

HTTPerrorPenyebab
400invalid_inputField to / message tidak valid
400no_connected_deviceBelum ada device terkoneksi di akunmu
401missing_token / invalid_tokenBearer token tidak valid / sudah di-revoke
404device_not_founddevice_id tidak ada / bukan milikmu
409device_not_connectedDevice ada tapi belum connected (scan QR dulu)
429quota_exceededKuota bulanan habis
500send_failedError dari WhatsApp (lihat field detail)

3. Format Nomor Tujuan

4. Rate Limit & Best Practice

5. Webhook Incoming (Segera — v0.3)

Balasan customer akan dikirim ke URL webhook yang kamu daftarkan. Format payload:

POST https://yourapp.com/webhook
X-Gateway-Signature: sha256=...
Content-Type: application/json

{
  "event": "message.received",
  "device_id": 1,
  "from": "6281234567890",
  "type": "text",
  "body": "Balasan dari customer",
  "timestamp": 1777000000
}

6. Kirim Media (Segera — v0.2)

Endpoint POST /api/send/image, /api/send/document, /api/send/audio.