Connectors¶
client.connectors (ConnectorsAPI) wraps
FortiSOAR’s /api/integration surface — discovery, healthcheck, configuration,
operation execution, the Connector Studio dev workspace, and install/uninstall.
client.agents (AgentsAPI) covers the remote
execution agent side: pushing, upgrading, and removing a connector on an
agent, plus a liveness heartbeat.
A complete, runnable walkthrough lives in
examples/manage_connectors.py
— it defaults to read-only and exercises every method below.
Discovery & health¶
conn = client.connectors
conn.list_configured() # installed + configured connectors
conn.resolve_version("cyops_utilities") # -> "3.7.1" (or None if not installed)
# The spec-canonical operations-discovery endpoint (POST by integer id):
detail = conn.connector_detail("cyops_utilities")
[op["operation"] for op in detail["operations"]]
# The dedicated, filterable configuration listing:
conn.list_configurations(name="cyops_utilities", active=True)
conn.healthcheck("fortinet-fortisiem") # {status: "Available", ...}
Executing an operation¶
conn.execute("virustotal", "get_reputation_ip", params={"ip": "8.8.8.8"})
# {'operation': 'get_reputation_ip', 'status': 'Success', 'data': {...}}
Connector Studio dev workspace¶
Edit a checked-out connector’s source, then publish it onto the running appliance — the same flow as the in-product Studio editor.
dev = conn.dev_list() # connectors checked out for editing
entity_id = dev[0]["id"]
conn.dev_edit(entity_id) # open for editing (Studio "Edit")
conn.dev_read_file(entity_id, "/hello-world_1_0_0_dev/info.json")
conn.dev_write_file(entity_id, {"path": "info.json", "content": "{...}"})
conn.dev_publish(entity_id, replace=True) # land changes + refresh integrations
Note
dev_publish() is also the supported escape hatch when a same-version .tgz
upload left stale code cached in the integrations service — it triggers a
service refresh the standard $replace=true install path does not.
Install / uninstall¶
# Appliance (self-agent):
conn.install("fortinet-fortisiem", "6.1.0", wait=True) # by name from Content Hub
conn.install_from_file("hello-world-1.0.0.tgz", replace=True) # upload a .tgz bundle
conn.uninstall("fortinet-fortisiem")
# Remote agent:
client.agents.install_connector(agent_id, name="cyops_utilities", version="3.7.1")
client.agents.upgrade_connector(agent_id, name="cyops_utilities", version="3.8.0")
client.agents.uninstall_connector(agent_id, name="cyops_utilities", version="3.8.0")
client.agents.heartbeat(agent_id) # liveness over the secure-message bus
Warning
Appliance uninstall (uninstall()) and
agent uninstall (uninstall_connector()) are
distinct: the first removes the connector from the appliance’s self-agent by
integer id, the second removes it from a named remote agent.