...
Open-AudIT's API
Open-AudIT is basing its API on 's API is base upon http://jsonapi.org with the intention of providing simple and intuitive access in a manner familiar to developers.
In addition to this API, the web interface will use the same request format and supply some additional actions (eg: HTML forms for creating items).
Access Model
The API uses a cookie. You can request a cookie by sending a POST to the URL below, containing the username and password attributes and values:
Code Block |
---|
http://{server}/omk/open-audit/index.php/loginlogon |
POSTing data
To create a resource, you should POST the required data.
When POSTing data, you must include an access token. An access token is generated with every request type, so make a GET (for example) and Accept: application/json, parse the response for meta→access_token, and include that with your request. This will should be placed in the field data[access_token], IE, the top level.
...
data[attributes][credentials][credentials][username]
Examples Som examples are at the bottom of this page.
...
applications: name,org_id
attributes: name,org_id,type,resource,value
baselines: name,org_id
buildings: name,org_id,location_id
clouds: name,org_id,type,credentials,options
clusters: name,org_id
collectors: name,org_id,status,type,host,community,username,password
connections: name,org_id
credentials: name,org_id,type,credentials
dashboards: name,org_id, options, sidebar
devices: name, org_id
discoveries: name,org_id,type
discovery_scan_options: name,org_id
fields: name,org_id,type,placement,group_id
files,ping,service_version,filtered,open|filtered,timing,nmap_tcp_ports,nmap_udp_ports
fields: name,org_id,pathtype
floors
files: name,org_id,building_idpath
groups: name,org_id,sql
integrations: name,org_id,attributes,optionsfields
ldap_servers: name,org_id,lang,host,port,secure,domain,type,version,use_auth,use_roles,refresh
licenses: name,org_id,org_descendants,purchase_count,match_string
locations: name,org_id
networks: name,org_id,network
orgs: name,parent_id
queries: name,org_id,sql,menu_category,menu_display
racks: name,org_id,rowru_idheight
rack_devices: rack_id,systemdevice_id,position,height
roles: name,permissions
rooms
rules: name,org_id,floor_id
rows
scripts: name,org_id,room_id
rules: name,org_id,weight,inputs,outputs
scripts: name,org_id,options,based_options,based_on
summaries: name,org_id,table,column,menu_category
tasks: name,org_id,type,sub_resource_id,uuid,enabled,minute,hour,day_of_month,month,day_of_week
users: name,org_id,lang,active,roles,orgs
widgets: name,org_id,type
...
Code Block |
---|
{ "access_token": "bbc0c85653fdc4b83d108cba7641bfcbbc77586dfb8f32d08973770a90fe", "type": "discoveries", "attributes": { "name": "My Test Discovery", "type": "subnet", "subnet": "192.169.1.150" "org_id": 1, "scan_options": {<remove<removed for brevity>}, "match_options": {<removed for brevity>}, } } } |
The Endpoints
At present, we have endpoints for nearly every collection. They are listed here - Collections.
Options
Format
Using the format option is useful when using a web browser but you wish to see the result in JSON format. Adding format=json achieves this. If you only want the actual data in JSON, format=json_data will do the trick. Normally a web browser will set its accept header to HTML, so in that case, we return the rendered page. Using an API to retrieve JSON you should set the accept header to "json/application". You can override this by providing the format option in the URL.
We tend to use the Google Chrome extension called Postman for testing actual restful queries. You might like to install and test with that. http://www.getpostman.com.
Action
NOTE - Removed from 5.0.0.
When using the API the default action is determined according to the format and URL. You can override this by providing the 'action' option in the URL. An example of this is when creating a new item. You would normally use POST to /item but in the case of a web user, you need a web form to be able to fill out the item details. In that case, there is no facility for this in a typical JSON Restful API. We work around this by providing action=create in a GET request for the URL. IE - http://{server}/omk/open-audit/networks?action=create. The default action if nothing matches below is to return a collection of items.
...
To sort by a database column, user use "sort={attribute}". To reverse sort, insert a minus, thus "sort=-{attribute}".
Code Block |
---|
sort=[-]{attribute} |
Current
NOTE - Removed from 5.0.0. Please use components.current=n or components.current=IN('y','n') instead (if required).
By default, only attributes with "current=y" are retrieved. To override this, set current as below.
Code Block |
---|
current={y|n|all} |
GroupBy
...
NOTE - Removed from 5.0.0.
Code Block |
---|
groupby={attribute} |
Limit
When requesting JSON, by default no limit is set.
...
Code Block |
---|
offset={int} |
Properties
Requested The requested properties should be in a comma-separated list. Properties should be fully qualified - ie, system.hostname (not just hostname).
NOTE - From 5.0.0 onwards, the system table has been replace by the devices table - so devices.name, not system.name.
Code Block |
---|
properties=system.id,system.name,system.status |
...
End Points
All endpoints URLs for prior to v5 are of the format http://{server}/omk/open-audit/{endpoint}
Devices
...
/devices
...
NOTE - From 5.0.0 all endpoint URLs are of the form - http://{server}/open-audit/index.php/{endpoint}
Devices
NOTE - From 5.0.0 the sub_resource item has been replaced by the components endpoint.
Type | Endpoint v4 | v5 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
GET | /system | /devices | Return a collection of devices with the default set of columns from the system table (system.system_id, system.icon, system.man_type, system.hostname, system.domain, system.man_ip_address, system.man_description, system.man_os_family, system.man_status) | |||||||
GET | /devicessystem/{id} | /devices/{id} | Return an individual devices details. | |||||||
GET | /devicessystem?sub_resource={sub_resource name} | /components?components.type={sub_resource name} | To return all items in a sub_resource for a collection of devices. If you wanted all software you would use http://{server}/open-audit/index.php/devices?sub_resource=software | |||||||
GET | / | devicessystem/{id}?sub_resource={sub_resource name} | /components?components.type={sub_resource name}&components.device_id={id} | To return all items in a sub_resource for a specific device. | ||||||
GET | /system/ | devices{id}?sub_resource={sub_resource name}&sub_resource_id={sub_resource id} | To return a specific item in a sub_resource for a collection of devices - not especially useful. You would more likely use the below (request a sub_resource items from a specific device) | GET | /devices/{id}?sub_resource/components/{sub_resource id}?components.type={sub_resource name} | &sub_resource_id={sub_resource id}To To return a specific sub_resource item | for a specific device. |
Device sub_resource
...
names / component types
NAME | NAME | NAME |
---|---|---|
audit_log | netstat | service |
Examples
Retrieve all devices with the standard columns:
...
NOTE - Where there are two examples, the second is for 5.0.0 a newer versions.
NOTE #3 - You should substitute items in the URL enclosed in {} brackets with the relevant items for your environment.
Retrieve all devices with the standard columns:
Code Block |
---|
GET http://{server}/omk/open-audit/devices GET http://{server}/open-audit/index.php/devices |
Retrieve all devices running Windows.
Code Block |
---|
GET http://{server}/omk/open-audit/devices?system.os_group=Windows |
...
GET http://{server}/open-audit/index.php/devices?devices.os_group=Windows |
Retrieve the first 10 devices running Windows ordered by hostname
Code Block |
---|
GET http://{server}/omk/open-audit/devices?system.os_group=Windows&limit=10&sort=system.hostname |
Retrieve the properties id, ip, hostname, domain, type from all devices
Code Block |
---|
GET http://{server}/omk/open-audit/index.php/devices?properties=system.id,system.ip,system.hostname,system.domain,system.type |
...
devices.os_group=Windows&limit=10&sort=devices.hostname |
Retrieve the properties id, ip, hostname, domain, type from all devices
Code Block |
---|
GET http://{server}/omk/open-audit/devices/88?include=all |
Retrieve a list of devices in the 192.168.1.0/24 subnet
Code Block |
---|
properties=system.id,system.ip,system.hostname,system.domain,system.type GET http://{server}/omk/open-audit/devices?sub_resource=ip&ip.network=192.168.1.0/24&properties=system.id,system.hostname,system.domain,ip.ip |
...
index.php/devices?properties=devices.id,devices.ip,devices.hostname,devices.domain,devices.type |
Retrieve all details about the device with id 88.
Code Block |
---|
GET http://{server}/omk/open-audit/devices?system.os_name=likeWindows 2008 |
CURL Examples
Logging in
Code Block |
---|
curl --cookie-jar cookies.txt --form password=password --form username=admin http://localhost/open-audit/index.php/logon |
Creating Credentials
Code Block |
---|
curl -X POST -b cookies.txt http://localhost/88?include=all GET http://{server}/open-audit/index.php/devices/88 |
Retrieve a list of devices in the 192.168.1.0/24 subnet
Code Block |
---|
GET http://{server}/omk/open-audit/devices?sub_resource=ip&ip.network=192.168.1.0/24&properties=system.id,system.hostname,system.domain,ip.ip GET http://{server}/open-audit/index.php/credentials -d "data[attributes][name]=test_creds&data[attributes][org_id]=1&data[attributes][type]=ssh&data[attributes][credentials][username]=my_new_user&data[attributes][credentials][password]=my_new_password" |
...
devices?ip.network=192.168.1.0/24&properties=devices.id,devices.hostname,devices.domain,ip.ip |
Retrieve a list of devices with OS Name like Windows 2008
Code Block |
---|
GET http://{server}/omk/open-audit/devices?system.os_name=likeWindows 2008
GET http://{server}/open-audit/index.php/devices?devices.os_name=likeWindows 2008 |
CURL Examples
Logging in
Code Block |
---|
curl --cookie-jar cookies.txt --form password=password --form username=admin http://{server}/open-audit/index.php/logon |
Creating Credentials
Code Block |
---|
curl -X POST -b cookies.txt http://{server}/open-audit/index.php/credentials -d "data[attributes][name]=test_creds&data[attributes][org_id]=1&data[attributes][type]=ssh&data[attributes][credentials][username]=my_new_user&data[attributes][credentials][password]=my_new_password" |
Retrieving a List of Credentials
Code Block |
---|
curl -X GET -b cookies.txt http://{server}/open-audit/index.php/credentials |
Update attributes
NOTE - The curly brackets in the data filed should be used as-is (not replaced as per other examples above).
Code Block |
---|
curl -X GETPATCH -b cookies.txt -d 'data={"data":{"id":"3","type":"devices","attributes":{"description":"Test Description"}}}' http://localhost{server}/open-audit/index.php/credentialsdevices/3 |