Bearer auth dan request JSON sekarang jadi format resmi.
Dokumentasi ini mengacu pada endpoint aktif di api.ovn.my.id per 19 Maret 2026. Field token di body request sudah tidak didukung lagi. Gunakan header Authorization: Bearer <token>.
- /kirimPesan personal untuk akun FREE dan PREMIUM.
- /kirim-grupsPesan grup khusus akun PREMIUM.
- /list-grupsDaftar grup dari device premium yang online.
- /cek-nomerCek apakah nomor terdaftar di WhatsApp.
Akun FREE untuk kebutuhan personal ringan. Akun PREMIUM dapat kirim ke grup dan membaca daftar grup aktif.
Bearer Auth
Setiap request wajib memakai header Authorization.
JSON Request
Gunakan application/json sebagai format integrasi resmi.
Maks. 500 Karakter
Field pesan dibatasi 500 karakter.
Rate Limit
Default personal 120, grup 90, dan list grup 60 request per 60 detik per IP.
HTTP status dan body response
Mulai versi ini, API tidak lagi mengembalikan semua kegagalan sebagai HTTP 200. Cek HTTP status lebih dulu, lalu baca isi body JSON.
HTTP status, code, status, dan pesan. Beberapa endpoint menambahkan field lain seperti msgid, limit, data, atau waktu.Format body umum
| Field | Tipe | Keterangan |
|---|---|---|
code | integer | Kode internal aplikasi. Untuk beberapa error bisa berupa kode bisnis seperti 1003, 1004, atau 1005. |
status | boolean | true jika request berhasil, false jika gagal. |
pesan | string | Pesan utama yang perlu ditampilkan atau dicatat di log integrasi Anda. |
data, msgid, limit, waktu | mixed | Field tambahan, hanya muncul pada endpoint atau kondisi tertentu. |
Status HTTP yang dipakai
| HTTP | Kapan muncul | Contoh code |
|---|---|---|
| 200 OK | Request berhasil diproses. | 200 |
| 401 | Header Bearer tidak dikirim, format salah, atau token tidak terdaftar. | 401, 1003 |
| 403 | Akun tidak punya akses, bukan PREMIUM, kuota habis, atau token internal tidak valid. | 403, 1004, 1005 |
| 404 | Endpoint tidak ditemukan. | 404 |
| 422 | Validasi request gagal, misalnya field wajib kosong, nomor tidak valid, atau pesan terlalu panjang. | 105, 422 |
| 429 | Terlalu banyak request dari IP yang sama dalam window rate limit. | 429 |
| 502 | Gateway WhatsApp memberi response tidak valid atau tidak bisa diparse. | 502 |
| 504 | Gateway WhatsApp timeout atau tidak merespon. | 504, 1002 |
401 Token tidak terdaftar
1{2 "code": 1003,3 "status": false,4 "pesan": "Token tidak terdaftar."5}
403 Fitur grup premium
1{2 "code": 1004,3 "status": false,4 "pesan": "Fitur grup hanya untuk akun premium."5}
422 Validasi request
1{2 "code": 422,3 "status": false,4 "pesan": "Field nomer wajib diisi."5}
429 Rate limit
1{2 "code": 429,3 "status": false,4 "pesan": "Terlalu banyak request dari IP ini. Coba lagi dalam 32 detik."5}
Referensi endpoint aktif
Semua contoh di bawah memakai format resmi terbaru: Bearer auth dan request JSON.
/kirim
Kirim pesan ke nomor personal.
Request body (JSON)
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
nomer | string | Ya | Nomor tujuan 8 sampai 15 digit. Contoh: 62811294440. |
pesan | string | Ya | Isi pesan maksimal 500 karakter. |
https://api.ovn.my.id/kirim
1curl --request POST "https://api.ovn.my.id/kirim" \2 --header "Authorization: Bearer APIKEY_ANDA" \3 --header "Content-Type: application/json" \4 --data '{"nomer":"62811294440","pesan":"Halo dari aplikasi saya"}'
1<?php2$payload = json_encode([3 'nomer' => '62811294440',4 'pesan' => 'Halo dari aplikasi saya',5]);67$ch = curl_init('https://api.ovn.my.id/kirim');8curl_setopt($ch, CURLOPT_POST, true);9curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);10curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);11curl_setopt($ch, CURLOPT_HTTPHEADER, [12 'Authorization: Bearer APIKEY_ANDA',13 'Content-Type: application/json',14 'Accept: application/json',15]);1617$result = curl_exec($ch);18curl_close($ch);19echo $result;
1:local api "APIKEY";2:local nomer "0811xxx";34:local res [/tool fetch url="https://api.ovn.my.id/kirim" \5 http-method=post \6 http-header-field="Authorization:Bearer $api,Content-Type:application/x-www-form-urlencoded" \7 http-data="nomer=$nomer&pesan=hallo ini pesan dari gateway dengan mikrotik." \8 as-value output=user]910:local data ($res->"data")11:local key "\"pesan\":\""12:local start [:find $data $key]1314:if ($start != nil) do={15 :set start ($start + [:len $key])16 :local end [:find $data "\",\"msgid\"" $start]17 :local pesan [:pick $data $start $end]1819 :log warning ("LOGS: " . $pesan)20}
application/x-www-form-urlencoded agar lebih stabil saat request dikirim lewat /tool fetch.Contoh sukses
1{2 "code": 200,3 "status": true,4 "pesan": "Pesan berhasil dikirim",5 "msgid": "MSG123456789",6 "limit": 499,7 "waktu": "2026-03-19 09:30:00"8}
/kirim-grups
Kirim pesan ke grup WhatsApp. Khusus akun PREMIUM.
/list-grups.Request body (JSON)
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
nomer | string | Ya | ID grup, misalnya 120363000000000000. |
pesan | string | Ya | Isi pesan grup maksimal 500 karakter. |
https://api.ovn.my.id/kirim-grups
1curl --request POST "https://api.ovn.my.id/kirim-grups" \2 --header "Authorization: Bearer APIKEY_PREMIUM" \3 --header "Content-Type: application/json" \4 --data '{"nomer":"120363000000000000","pesan":"Halo grup premium"}'
1<?php2$payload = json_encode([3 'nomer' => '120363000000000000',4 'pesan' => 'Halo grup premium',5]);67$ch = curl_init('https://api.ovn.my.id/kirim-grups');8curl_setopt($ch, CURLOPT_POST, true);9curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);10curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);11curl_setopt($ch, CURLOPT_HTTPHEADER, [12 'Authorization: Bearer APIKEY_PREMIUM',13 'Content-Type: application/json',14 'Accept: application/json',15]);1617$result = curl_exec($ch);18curl_close($ch);19echo $result;
1:local api "APIKEY";2:local nomer "ID_GRUPS";34:local res [/tool fetch url="https://api.ovn.my.id/kirim-grups" \5 http-method=post \6 http-header-field="Authorization:Bearer $api,Content-Type:application/x-www-form-urlencoded" \7 http-data="nomer=$nomer&pesan=hallo ini pesan dari gateway dengan mikrotik." \8 as-value output=user]910:local data ($res->"data")11:local key "\"pesan\":\""12:local start [:find $data $key]1314:if ($start != nil) do={15 :set start ($start + [:len $key])16 :local end [:find $data "\",\"msgid\"" $start]17 :local pesan [:pick $data $start $end]1819 :log warning ("LOGS: " . $pesan)20}
application/x-www-form-urlencoded karena format tersebut paling aman untuk /tool fetch saat mengirim request ke endpoint /kirim-grups./list-grups
Ambil daftar grup dari device premium yang sedang online.
https://api.ovn.my.id/list-grups
1curl --request POST "https://api.ovn.my.id/list-grups" \2 --header "Authorization: Bearer APIKEY_PREMIUM" \3 --header "Accept: application/json"
1<?php2$ch = curl_init('https://api.ovn.my.id/list-grups');3curl_setopt($ch, CURLOPT_POST, true);4curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);5curl_setopt($ch, CURLOPT_HTTPHEADER, [6 'Authorization: Bearer APIKEY_PREMIUM',7 'Accept: application/json',8]);910$result = curl_exec($ch);11curl_close($ch);12echo $result;
Contoh sukses
1{2 "code": 200,3 "status": true,4 "pesan": "OK",5 "total": 2,6 "data": [7 { "id": "120363000000000000", "subject": "Tim Operasional" },8 { "id": "120363000000000001", "subject": "Pelanggan VIP" }9 ],10 "waktu": "2026-03-19 09:45:00"11}
/cek-nomer
Cek apakah nomor terdaftar di WhatsApp.
Request body (JSON)
| Field | Tipe | Wajib | Keterangan |
|---|---|---|---|
nomer | string | Ya | Nomor tujuan yang ingin dicek. |
https://api.ovn.my.id/cek-nomer
1curl --request POST "https://api.ovn.my.id/cek-nomer" \2 --header "Authorization: Bearer APIKEY_ANDA" \3 --header "Content-Type: application/json" \4 --data '{"nomer":"62811294440"}'
1<?php2$payload = json_encode([3 'nomer' => '62811294440',4]);56$ch = curl_init('https://api.ovn.my.id/cek-nomer');7curl_setopt($ch, CURLOPT_POST, true);8curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);9curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);10curl_setopt($ch, CURLOPT_HTTPHEADER, [11 'Authorization: Bearer APIKEY_ANDA',12 'Content-Type: application/json',13 'Accept: application/json',14]);1516$result = curl_exec($ch);17curl_close($ch);18echo $result;
Hal penting sebelum masuk production
Header Bearer wajib
Jika header Authorization tidak dikirim atau formatnya salah, server akan membalas 401 Unauthorized.
Error sekarang ikut HTTP status
Auth error memakai 401, akses/quota memakai 403, validasi memakai 422, rate limit memakai 429, dan error gateway memakai 502/504. Tetap log field code, status, dan pesan.
JSON adalah format resmi
Contoh dokumentasi ini memakai application/json agar integrasi backend dan mobile lebih konsisten.
Simpan token di backend
Bearer token tetap lebih aman dipanggil dari backend Anda, bukan langsung dari frontend production.
