BIGFIX custom API issue
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-14-2025 07:16 AM
Hi everyone, I’m working on integrating BigFix with ServiceNow using a custom REST call. I’m facing an issue where the API only returns the "name" field in the response, even though I’m requesting multiple columns.
Here’s the endpoint I’m calling
https://<ip address>/api/sam/v2/computers?columns[]=id&columns[]=bigfix_id&columns[]=name&columns[]=dns_name&columns[]=ip_address&columns[]=os&columns[]=os_type&columns[]=first_seen&columns[]=last_seen&columns[]=is_deleted&columns[]=deletion_date&columns[]=is_managed_by_vm_manager&token=<token>
Here’s the ServiceNow Scripted rest API I’m using to execute the call:
(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
try {
var r = new sn_ws.RESTMessageV2();
r.setMIDServer('Mid server');
r.setEndpoint('https://<masked-ip>/api/sam/v2/computers');
r.setHttpMethod('get');
var columns = [
'id', 'bigfix_id', 'dns_name', 'ip_address', 'os',
'os_type', 'first_seen', 'last_seen', 'name'
];
columns.forEach(function(col) {
r.setQueryParameter('columns[]', col);
});
r.setQueryParameter('token', '<masked-token>');
r.setRequestHeader("Accept", "application/json");
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
gs.info("Status: " + httpStatus);
gs.info("Response Body: " + responseBody);
var jsonResponse = JSON.parse(responseBody);
if (!jsonResponse.rows || !Array.isArray(jsonResponse.rows)) {
gs.error("[BigFix API] No 'rows' array found in response.");
response.setStatus(500);
response.setBody({ error: "Invalid response structure from BigFix." });
return;
}
jsonResponse.rows.forEach(function(device) {
var gr = new GlideRecord('u_big_fix_staging');
gr.initialize();
gr.setValue('u_id', device.id || "Unknown");
gr.setValue('u_computer_id', device.bigfix_id);
gr.setValue('u_name', device.name || "Unknown");
gr.setValue('u_os', device.os);
gr.setValue('u_last_report_time', device.last_seen);
gs.info("[BigFix API] Attempting to insert: " + device.name);
gr.insert();
});
response.setStatus(200);
response.setBody({ message: "Data inserted into staging table." });
} catch (error) {
response.setStatus(500);
response.setBody({ error: error.message });
}
})(request, response);
Issue: Even though I’m passing all the required columns[] in the query params, the response only includes the "name" field. Other fields like id, ip_address, etc., are not coming through at all.
I’ve confirmed this endpoint works when called directly from webpage, but the full list of fields doesn’t come through in ServiceNow.
Has anyone faced a similar issue with BigFix?