Endpoint Methods#
Understanding the available HTTP methods for FortiOS API endpoints.
Available HTTP Methods#
HFortix provides direct access to FortiOS REST API through standard HTTP methods. Each endpoint may support one or more of the following methods depending on the FortiOS API capabilities:
Standard CRUD Methods#
.get()- HTTP GET - Retrieve resources (list all or get specific by mkey).post()- HTTP POST - Create new resources.put()- HTTP PUT - Update existing resources.delete()- HTTP DELETE - Delete resources.set()- HTTP PUT - Set/replace entire configuration (available on some endpoints)
Method Usage#
from hfortix_fortios import FortiOS
fgt = FortiOS(host='192.168.1.99', api_token='your-token')
# GET - Retrieve all resources
addresses = fgt.api.cmdb.firewall.address.get()
# GET - Retrieve specific resource by mkey
address = fgt.api.cmdb.firewall.address.get(mkey='webserver')
# POST - Create new resource
result = fgt.api.cmdb.firewall.address.post(
payload_dict={
'name': 'webserver',
'subnet': '192.168.1.100 255.255.255.255',
'comment': 'Production web server'
}
)
# PUT - Update existing resource
result = fgt.api.cmdb.firewall.address.put(
mkey='webserver',
payload_dict={
'comment': 'Updated comment'
}
)
# DELETE - Remove resource
result = fgt.api.cmdb.firewall.address.delete(mkey='webserver')
# SET - Replace entire configuration (when available)
result = fgt.api.cmdb.system.settings.set(
payload_dict={
'opmode': 'nat',
'inspection_mode': 'proxy',
# ... full configuration
}
)
Method Availability#
Not all endpoints support all methods. The available methods depend on the FortiOS API design:
Endpoint Type |
GET |
POST |
PUT |
DELETE |
SET |
|---|---|---|---|---|---|
CMDB Table (e.g., firewall.address) |
✅ |
✅ |
✅ |
✅ |
❌ |
CMDB Global (e.g., system.global) |
✅ |
❌ |
✅ |
❌ |
✅ |
Monitor (e.g., system.status) |
✅ |
✅ |
❌ |
❌ |
❌ |
Log (e.g., disk.event) |
✅ |
❌ |
❌ |
❌ |
❌ |
Common Parameters#
GET Method#
# List all with filtering
addresses = fgt.api.cmdb.firewall.address.get(
filter=['type==ipmask'],
count=10,
start=0
)
# Get specific by mkey
address = fgt.api.cmdb.firewall.address.get(mkey='webserver')
# With VDOM
address = fgt.api.cmdb.firewall.address.get(
mkey='webserver',
vdom='root'
)
POST Method#
# Create with payload_dict
result = fgt.api.cmdb.firewall.policy.post(
payload_dict={
'name': 'Allow-Web',
'srcintf': [{'name': 'port1'}],
'dstintf': [{'name': 'port2'}],
'srcaddr': [{'name': 'all'}],
'dstaddr': [{'name': 'webserver'}],
'service': [{'name': 'HTTP'}, {'name': 'HTTPS'}],
'action': 'accept'
}
)
# Create with keyword arguments (Pydantic models where available)
result = fgt.api.cmdb.firewall.address.post(
name='testserver',
subnet='10.0.1.5 255.255.255.255',
comment='Test server'
)
PUT Method#
# Update with mkey and payload_dict
result = fgt.api.cmdb.firewall.address.put(
mkey='webserver',
payload_dict={
'comment': 'Updated web server',
'color': 3
}
)
# Update with keyword arguments
result = fgt.api.cmdb.firewall.address.put(
mkey='webserver',
comment='Updated comment',
color=3
)
DELETE Method#
# Delete by mkey
result = fgt.api.cmdb.firewall.address.delete(mkey='webserver')
# Delete with VDOM
result = fgt.api.cmdb.firewall.address.delete(
mkey='webserver',
vdom='root'
)
SET Method#
# Replace entire configuration
result = fgt.api.cmdb.system.global.set(
payload_dict={
'hostname': 'firewall-01',
'timezone': 'America/New_York',
'admin_sport': 443,
# ... complete configuration
}
)
Response Objects#
All methods return FortiObject or FortiObjectList instances:
# Single object response (POST, PUT, DELETE)
result = fgt.api.cmdb.firewall.address.post(...)
print(result.http_status_code) # 200
print(result.revision) # Configuration revision
print(result.raw) # Full API envelope
# List response (GET without mkey)
addresses = fgt.api.cmdb.firewall.address.get()
for addr in addresses:
print(addr.name)
print(addr.subnet)
# Single object response (GET with mkey)
address = fgt.api.cmdb.firewall.address.get(mkey='webserver')
print(address.name)
print(address.subnet)
Using the request() Method#
For maximum flexibility, use the low-level request() method:
# Direct request - copy JSON from FortiGate GUI
response = fgt.request(
method='POST',
path='/api/v2/cmdb/firewall/address',
data={
'name': 'webserver',
'subnet': '192.168.1.100 255.255.255.255',
'comment': 'Production web server'
}
)
Monitor API Methods#
Monitor endpoints typically only support GET and POST:
# GET - Retrieve monitoring data
status = fgt.api.monitor.system.status.get()
interfaces = fgt.api.monitor.system.interface.get()
# POST - Trigger actions
result = fgt.api.monitor.system.config.backup.post()
Error Handling#
from hfortix_core.exceptions import APIError, ResourceNotFoundError
try:
address = fgt.api.cmdb.firewall.address.get(name='nonexistent')
except ResourceNotFoundError:
print("Address not found")
except APIError as e:
print(f"Error: {e.http_status} - {e.message}")
See Also#
API Reference - Complete endpoint documentation (1,219 endpoints)
Custom Wrappers Guide - Create your own convenience wrappers
FortiOS Client - Client configuration and usage
Error Handling - Error handling patterns