{
    "name": "SIP Account REST API (PostgreSQL)",
    "version": "1.5.0",
    "database": "asteriskdb (PostgreSQL)",
    "status": "online",
    "schemas_in_database": {
        "sip_accounts": "SIP Account configuration table with REST API",
        "manager_next": "Asterisk manager queue table schema",
        "agent_live": "Live agent active sessions table schema",
        "conference": "Conference rooms allocation table schema",
        "carriers": "Carrier trunks configuration table with REST API"
    },
    "endpoints": [
        {
            "name": "Agent Login API",
            "base_url": "/api/agent_login.php",
            "methods": [
                "POST"
            ],
            "payload": {
                "extension": "VARCHAR(50) NOT NULL (Required, e.g. 7000 or PJSIP/7000)",
                "agent_user": "VARCHAR(100) (Optional, e.g. agent001)",
                "status": "VARCHAR(50) (Optional, default: READY)",
                "server_ip": "VARCHAR(50) (Optional, default: 127.0.0.1)",
                "campaign_id": "VARCHAR(50) (Optional)"
            }
        },
        {
            "name": "Agent Logout API",
            "base_url": "/api/agent_logout.php",
            "methods": [
                "POST",
                "DELETE"
            ],
            "payload": {
                "extension": "VARCHAR(50) NOT NULL (Required, e.g. 7000)"
            }
        },
        {
            "name": "Agent Live API (Unified)",
            "base_url": "/api/agent_live.php",
            "methods": [
                "GET",
                "POST",
                "DELETE"
            ],
            "query_parameters": [
                "extension",
                "id"
            ],
            "payload": {
                "action": "VARCHAR(20) (Optional: login | logout, default: login)",
                "extension": "VARCHAR(50) NOT NULL for login/logout"
            }
        },
        {
            "name": "SIP Accounts API",
            "base_url": "/api/sip_accounts.php",
            "methods": [
                "GET",
                "POST",
                "PUT",
                "DELETE"
            ],
            "query_parameters": [
                "id",
                "search",
                "status",
                "protocol"
            ],
            "schema": {
                "id": "SERIAL PRIMARY KEY",
                "extension": "VARCHAR(50) UNIQUE NOT NULL",
                "service_ip": "VARCHAR(255) NOT NULL",
                "pass": "VARCHAR(255) NOT NULL",
                "status": "VARCHAR(50) (active | registered | inactive | unregistered)",
                "protocol": "VARCHAR(20) (PJSIP | SIP | EXTERNAL | IAX2)"
            }
        },
        {
            "name": "SIP Session API",
            "base_url": "/api/sip_session.php",
            "methods": [
                "GET",
                "POST"
            ],
            "query_parameters": [
                "id",
                "limit"
            ],
            "payload": {
                "conference_number": "VARCHAR(50) NOT NULL (Required)",
                "sip_account": "VARCHAR(20) (Optional, e.g. 1001)",
                "server_ip": "VARCHAR(15) (Optional, default: 127.0.0.1)",
                "action": "VARCHAR(20) (Optional, default: Originate)",
                "status": "VARCHAR(20) (Optional, default: NEW)"
            }
        },
        {
            "name": "Manual Call API",
            "base_url": "/api/manual_call.php",
            "methods": [
                "POST"
            ],
            "payload": {
                "agentid": "VARCHAR(50) NOT NULL (Required, e.g. agent001 or 7000)",
                "phone_number": "VARCHAR(50) NOT NULL (Required, e.g. 9876543210)",
                "conference_number": "VARCHAR(50) (Optional, e.g. 8600001)",
                "callerid": "VARCHAR(20) (Optional, Auto-generated unique M260805... format if omitted)",
                "server_ip": "VARCHAR(15) (Optional, default: 127.0.0.1)",
                "context": "VARCHAR(50) (Optional, default: default)",
                "action": "VARCHAR(20) (Optional, default: Originate)"
            }
        },
        {
            "name": "Agent Auto Call API",
            "base_url": "/api/agent_auto_call.php",
            "methods": [
                "GET",
                "POST"
            ],
            "payload": {
                "agentid": "VARCHAR(50) NOT NULL (Required, e.g. agent001 or 7000)",
                "phone_numbers": "ARRAY or String (Required, e.g. [\"9876543210\", \"9876543211\"] or \"9876543210, 9876543211\")",
                "conference_number": "VARCHAR(50) (Optional, e.g. 8600001)",
                "server_ip": "VARCHAR(15) (Optional, default: 127.0.0.1)",
                "context": "VARCHAR(50) (Optional, default: default)",
                "action": "VARCHAR(20) (Optional, default: Originate)"
            }
        },
        {
            "name": "Hangup Call API",
            "base_url": "/api/hangupcall.php",
            "methods": [
                "POST"
            ],
            "payload": {
                "extension": "VARCHAR(50) (Optional/Recommended, e.g. 3001 or PJSIP/3001)",
                "user": "VARCHAR(100) (Optional, e.g. 3001)",
                "callerid": "VARCHAR(50) (Optional, e.g. M260817183506141852)",
                "sip_account": "VARCHAR(50) (Optional, alias for callerid)"
            }
        },
        {
            "name": "Call Logs Filter API",
            "base_url": "/api/call_logs.php",
            "methods": [
                "GET",
                "POST"
            ],
            "query_parameters": [
                "search",
                "lead_id",
                "list_id",
                "campaign_id",
                "status",
                "agentCallStatus",
                "phone_number",
                "agentphone",
                "ai_disposition",
                "start_date",
                "end_date",
                "fields",
                "page",
                "limit"
            ],
            "default_returned_fields": [
                "id",
                "uniqueid",
                "phone_number",
                "call_date",
                "status",
                "lead_id",
                "campaign_id",
                "ai_disposition",
                "ai_remark",
                "recording_path",
                "agentphone",
                "agentcallstatus"
            ]
        },
        {
            "name": "Carrier Create API",
            "base_url": "/api/carrier_create.php",
            "methods": [
                "POST"
            ],
            "payload": {
                "carrier_id": "VARCHAR(100) NOT NULL (Required, e.g. TWILIO_SIP_01)",
                "carrier_name": "VARCHAR(255) NOT NULL (Required, e.g. Twilio Primary SIP Trunk)",
                "carrier_description": "TEXT (Optional, trunk purpose/notes)",
                "user_group": "VARCHAR(100) (Optional, default: ---ALL---)",
                "server_ip": "VARCHAR(255) (Optional, default: 127.0.0.1)",
                "protocol": "VARCHAR(20) (Optional: SIP | PJSIP | IAX2 | EXTERNAL, default: SIP)",
                "registration_string": "TEXT (Optional, Asterisk registration string)",
                "account_entry": "TEXT (Optional, SIP peer / trunk config block)",
                "globals_string": "VARCHAR(255) (Optional, dial variable e.g. TWILIODIAL = SIP/twilio_trunk)",
                "dialplan_entry": "TEXT (Optional, Asterisk dialplan dial strings)",
                "template_id": "VARCHAR(100) (Optional, default: --NONE--)",
                "status": "VARCHAR(20) (Optional: Active | Inactive, default: Active)"
            }
        },
        {
            "name": "Carrier Management API (CRUD)",
            "base_url": "/api/carrier.php",
            "aliases": [
                "/api/carriers.php"
            ],
            "methods": [
                "GET",
                "POST",
                "PUT",
                "PATCH",
                "DELETE"
            ],
            "query_parameters": [
                "id",
                "carrier_id",
                "search",
                "status",
                "protocol",
                "server_ip"
            ],
            "schema": {
                "id": "SERIAL PRIMARY KEY",
                "carrier_id": "VARCHAR(100) UNIQUE NOT NULL",
                "carrier_name": "VARCHAR(255) NOT NULL",
                "carrier_description": "TEXT",
                "user_group": "VARCHAR(100)",
                "server_ip": "VARCHAR(255)",
                "protocol": "VARCHAR(20)",
                "registration_string": "TEXT",
                "account_entry": "TEXT",
                "globals_string": "VARCHAR(255)",
                "dialplan_entry": "TEXT",
                "template_id": "VARCHAR(100)",
                "status": "VARCHAR(20)",
                "active": "VARCHAR(5)"
            }
        }
    ]
}