@extends('root') @section('title', 'Admin API Documentation') @section('content')
@include('components.breadcrumb', [ 'title' => 'Admin API Documentation', 'links' => [ ['url' => route('dashboard'), 'label' => 'Dashboard'], ['url' => route('documentation.index'), 'label' => 'API Documentation'], ], 'current' => 'Admin API' ])

Admin API Documentation

Dokumentasi lengkap API khusus untuk Admin. Endpoint untuk token management, approve/reject, inbox messages, dan webhook.

Kembali
Admin API Overview

API ini digunakan oleh Admin untuk mengelola WABA Pool, token Meta, approve/reject request, dan memonitor inbox messages.

  • Base URL: {{ url('/api') }}
  • Format: JSON
  • Authentication: Bearer Token (Sanctum)
Fitur Admin API
Token Management
  • Generate/Exchange Token
  • Validate Token dengan Meta
  • Revoke Token
  • Update Credentials
Request Management
  • Approve/Reject Assign Request
  • Approve/Reject Name Request
  • Direct Assign Nomor
Inbox Messages
  • Lihat Pesan Masuk
  • Statistik Inbox
  • Conversations
Webhook
  • Webhook Verification
  • Receive Messages
  • Setup Guide
WABA Pool Token Management API
POST /api/admin/waba-pool/{id}/generate-token

Deskripsi: Generate atau simpan permanent token

Request Body (Exchange Short-Lived):
{
  "short_lived_token": "EAAxxxx..."
}
Request Body (Store Permanent):
{
  "permanent_token": "EAAxxxx...",
  "skip_exchange": true
}
Response Success:
{
  "status": true,
  "message": "Token generated successfully",
  "data": {
    "token_stored": true,
    "generated_at": "2025-12-10T10:00:00Z",
    "expires_at": "2026-02-08T10:00:00Z",
    "days_until_expiry": 60
  }
}
PUT /api/admin/waba-pool/{id}/credentials

Deskripsi: Update App ID dan App Secret

Request Body:
{
  "app_id": "123456789012345",
  "app_secret": "abcdef1234567890"
}
GET /api/admin/waba-pool/{id}/token-status

Deskripsi: Cek status token saat ini

Response:
{
  "status": true,
  "data": {
    "has_token": true,
    "token_status": "valid",
    "generated_at": "2025-12-10T10:00:00Z",
    "expires_at": "2026-02-08T10:00:00Z",
    "days_until_expiry": 60
  }
}
POST /api/admin/waba-pool/{id}/validate-token

Deskripsi: Validasi token dengan Meta Graph API

POST /api/admin/waba-pool/{id}/revoke-token

Deskripsi: Hapus token dari database

Dedicated Number Management API
GET /api/admin/dedicated-numbers/requests

Deskripsi: Melihat daftar request assign yang pending

Response:
{
  "status": true,
  "data": [
    {
      "id": 15,
      "client_name": "PT Client Baru",
      "phone_number": "628123456789",
      "status": "pending",
      "total_price": 550000,
      "client_balance": 1000000,
      "requested_at": "2025-12-10T10:00:00Z"
    }
  ]
}
POST /api/admin/dedicated-numbers/{id}/approve

Deskripsi: Approve request assign. Saldo client akan dipotong

Response Success:
{
  "status": true,
  "message": "Request approved. Saldo client telah dipotong.",
  "data": {
    "request_id": 15,
    "client_balance_before": 1000000,
    "client_balance_after": 450000,
    "amount_charged": 550000
  }
}
POST /api/admin/dedicated-numbers/{id}/reject

Deskripsi: Reject request assign

Request Body:
{
  "reason": "Nomor sedang dalam maintenance"
}
POST /api/admin/dedicated-numbers/direct-assign

Deskripsi: Assign nomor langsung ke client (tanpa request)

Request Body:
{
  "client_id": 10,
  "waba_pool_id": 5,
  "label": "Nomor dari Admin"
}
Name Change Request Management API
GET /api/admin/number-name-requests

Deskripsi: Melihat daftar request ganti nama yang pending

Response:
{
  "status": true,
  "data": [
    {
      "id": 5,
      "client_name": "PT Client Satu",
      "phone_number": "628123456789",
      "current_name": "Nomor CS Utama",
      "requested_name": "Hotline Support 24 Jam",
      "status": "pending"
    }
  ]
}
POST /api/admin/number-name-requests/{id}/approve

Deskripsi: Approve request ganti nama

POST /api/admin/number-name-requests/{id}/reject

Deskripsi: Reject request ganti nama

Request Body:
{
  "reason": "Nama mengandung kata terlarang"
}
Inbox Messages API
GET /api/admin/waba-pool/{id}/messages

Deskripsi: Melihat inbox messages untuk WABA Pool

Query Parameters:
date_fromFilter dari tanggal
date_toFilter sampai tanggal
from_numberFilter nomor pengirim
typeFilter tipe pesan
unread_onlyHanya yang belum dibaca
Response:
{
  "status": true,
  "data": {
    "messages": [
      {
        "id": 1,
        "wa_message_id": "wamid.xxx",
        "from_number": "628987654321",
        "message_type": "text",
        "message_body": "Hello!",
        "is_read": false,
        "message_timestamp": "2025-12-10T10:00:00Z"
      }
    ],
    "pagination": {...}
  }
}
GET /api/admin/waba-pool/{id}/messages/stats

Deskripsi: Statistik inbox

Response:
{
  "status": true,
  "data": {
    "total_messages": 1500,
    "unread_messages": 25,
    "unique_senders": 350,
    "today_messages": 45
  }
}
GET /api/admin/waba-pool/{id}/messages/conversations

Deskripsi: Daftar percakapan (grouped by sender)

POST /api/admin/waba-pool/{id}/messages/read-all

Deskripsi: Tandai semua pesan sebagai dibaca

Webhook Configuration
Webhook digunakan untuk menerima pesan masuk dari WhatsApp Meta API.
Webhook Endpoints
GET /api/webhook/waba Verifikasi Webhook
POST /api/webhook/waba Terima Pesan Masuk
Setup di Meta Developer Console
  1. Callback URL: {{ url('/api/webhook/waba') }}
  2. Verify Token: Set di .envWABA_WEBHOOK_VERIFY_TOKEN
  3. Subscribe Fields: messages
Penting!
  • Webhook selalu return 200 OK ke Meta untuk menghindari retry
  • Gunakan ngrok untuk testing lokal
Ringkasan Endpoint Admin
Method Endpoint Deskripsi
POST /api/admin/waba-pool/{id}/generate-token Generate token
GET /api/admin/waba-pool/{id}/token-status Cek status token
POST /api/admin/dedicated-numbers/{id}/approve Approve request
POST /api/admin/dedicated-numbers/{id}/reject Reject request
GET /api/admin/waba-pool/{id}/messages Inbox messages
GET /api/admin/waba-pool/{id}/messages/stats Inbox statistics
@endsection