NAME
WebService::OPNsense - Perl client library for the OPNsense REST API
VERSION
version 0.001
SYNOPSIS
use WebService::OPNsense;
my $opn = WebService::OPNsense->new(
base_url => 'https://opnsense.example.com',
username => 'your-api-key',
password => 'your-api-secret',
);
# Search firewall rules
my $rules = $opn->firewall_filter->search_rule;
for my $rule (@{$rules->{rows}}) {
say $rule->{description};
}
# Get system information
my $info = $opn->system->status;
say $_->{name} for @{$info->{rows}};
DESCRIPTION
WebService::OPNsense is a Moo-based client for the OPNsense REST API. It consumes the WebService::Client role and provides lazy accessors for each OPNsense API controller.
Authentication is handled via HTTP Basic Auth using an API key/secret pair.
ALPHA STATUS
This release should be considered an alpha release. Please adjust your expectations accordingly.
Your feedback is very welcomed. Patches are even more welcome.
ATTRIBUTES
base_url
Required. Base URL of the OPNsense instance (e.g. https://opnsense.example.com).
username
Required. API key for authentication.
password
Required. API secret for authentication.
firewall
Lazy accessor returning a WebService::OPNsense::Firewall instance.
firewall_filter
Lazy accessor returning a WebService::OPNsense::Firewall::Filter instance.
firewall_alias
Lazy accessor returning a WebService::OPNsense::Firewall::Alias instance.
firewall_category
Lazy accessor returning a WebService::OPNsense::Firewall::Category instance.
system
Lazy accessor returning a WebService::OPNsense::System instance.
diagnostics
Lazy accessor returning a WebService::OPNsense::Diagnostics instance.
routes
Lazy accessor returning a WebService::OPNsense::Routes instance.
backup
Lazy accessor returning a WebService::OPNsense::Backup instance.
captive_portal_settings
Lazy accessor returning a WebService::OPNsense::CaptivePortal::Settings instance.
captive_portal_session
Lazy accessor returning a WebService::OPNsense::CaptivePortal::Session instance.
captive_portal_access
Lazy accessor returning a WebService::OPNsense::CaptivePortal::Access instance.
captive_portal_voucher
Lazy accessor returning a WebService::OPNsense::CaptivePortal::Voucher instance.
captive_portal_service
Lazy accessor returning a WebService::OPNsense::CaptivePortal::Service instance.
cron_settings
Lazy accessor returning a WebService::OPNsense::Cron::Settings instance.
cron_service
Lazy accessor returning a WebService::OPNsense::Cron::Service instance.
dnsmasq_settings
Lazy accessor returning a WebService::OPNsense::Dnsmasq::Settings instance.
dnsmasq_leases
Lazy accessor returning a WebService::OPNsense::Dnsmasq::Leases instance.
dnsmasq_service
Lazy accessor returning a WebService::OPNsense::Dnsmasq::Service instance.
firewall_d_nat
Lazy accessor returning a WebService::OPNsense::Firewall::DNat instance.
firewall_npt
Lazy accessor returning a WebService::OPNsense::Firewall::Npt instance.
firewall_one_to_one
Lazy accessor returning a WebService::OPNsense::Firewall::OneToOne instance.
firewall_source_nat
Lazy accessor returning a WebService::OPNsense::Firewall::SourceNat instance.
hasync
Lazy accessor returning a WebService::OPNsense::HASync instance.
ids_settings
Lazy accessor returning a WebService::OPNsense::IDS::Settings instance.
ids_service
Lazy accessor returning a WebService::OPNsense::IDS::Service instance.
ipsec_connections
Lazy accessor returning a WebService::OPNsense::IPsec::Connections instance.
ipsec_key_pairs
Lazy accessor returning a WebService::OPNsense::IPsec::KeyPairs instance.
ipsec_leases
Lazy accessor returning a WebService::OPNsense::IPsec::Leases instance.
ipsec_manual_spd
Lazy accessor returning a WebService::OPNsense::IPsec::ManualSpd instance.
ipsec_pools
Lazy accessor returning a WebService::OPNsense::IPsec::Pools instance.
ipsec_pre_shared_keys
Lazy accessor returning a WebService::OPNsense::IPsec::PreSharedKeys instance.
ipsec_sad
Lazy accessor returning a WebService::OPNsense::IPsec::Sad instance.
ipsec_service
Lazy accessor returning a WebService::OPNsense::IPsec::Service instance.
ipsec_sessions
Lazy accessor returning a WebService::OPNsense::IPsec::Sessions instance.
ipsec_settings
Lazy accessor returning a WebService::OPNsense::IPsec::Settings instance.
ipsec_spd
Lazy accessor returning a WebService::OPNsense::IPsec::Spd instance.
ipsec_tunnel
Lazy accessor returning a WebService::OPNsense::IPsec::Tunnel instance.
ipsec_vti
Lazy accessor returning a WebService::OPNsense::IPsec::Vti instance.
kea_dhcpv4
Lazy accessor returning a WebService::OPNsense::Kea::Dhcpv4 instance.
kea_dhcpv6
Lazy accessor returning a WebService::OPNsense::Kea::Dhcpv6 instance.
kea_leases
Lazy accessor returning a WebService::OPNsense::Kea::Leases instance.
kea_ddns
Lazy accessor returning a WebService::OPNsense::Kea::Ddns instance.
kea_ctrl_agent
Lazy accessor returning a WebService::OPNsense::Kea::CtrlAgent instance.
kea_service
Lazy accessor returning a WebService::OPNsense::Kea::Service instance.
openvpn_instances
Lazy accessor returning a WebService::OPNsense::OpenVPN::Instances instance.
openvpn_client_overwrites
Lazy accessor returning a WebService::OPNsense::OpenVPN::ClientOverwrites instance.
openvpn_service
Lazy accessor returning a WebService::OPNsense::OpenVPN::Service instance.
openvpn_export
Lazy accessor returning a WebService::OPNsense::OpenVPN::Export instance.
trafficshaper_settings
Lazy accessor returning a WebService::OPNsense::TrafficShaper::Settings instance.
trafficshaper_service
Lazy accessor returning a WebService::OPNsense::TrafficShaper::Service instance.
unbound_settings
Lazy accessor returning a WebService::OPNsense::Unbound::Settings instance.
unbound_overview
Lazy accessor returning a WebService::OPNsense::Unbound::Overview instance.
unbound_diagnostics
Lazy accessor returning a WebService::OPNsense::Unbound::Diagnostics instance.
unbound_service
Lazy accessor returning a WebService::OPNsense::Unbound::Service instance.
interfaces
Lazy accessor returning a WebService::OPNsense::Interfaces instance.
METHODS
BUILD
Moo lifecycle hook. Validates and normalizes base_url, configures HTTP Basic Auth credentials, and sets a descriptive User-Agent string.
req
my $data = $opn->req($http_request, %args);
around modifier wrapping "req" in WebService::Client. Unwraps the response object, returns undef for GET 404/410 responses, and throws a WebService::OPNsense::Exception on other non-2xx status codes.
get
my $data = $opn->get($path, \%params);
around modifier wrapping "get" in WebService::Client. URL-encodes all query-parameter values before dispatch.
SEE ALSO
WebService::Client - role consumed by this class
WebService::OPNsense::Exception - exception objects thrown on errors
https://docs.opnsense.org/development/api.html - OPNsense API documentation
API COMPATIBILITY
The OPNsense REST API does not use versioned paths, headers, or content negotiation. Endpoints change between OPNsense releases without formal deprecation notices. This module follows the API spec as it appears and may require updates when the firewall is upgraded.
AUTHOR
Dean Hamstead <dean@fragfest.com.au>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2026 by Dean Hamstead.
This is free software, licensed under:
The MIT (X11) License