HomeGuidesRecipesAPI ReferenceChangelog

Code Samples

Below are some code samples for common use cases to help get you started integrating with Jamf Pro's Classic API

Replace YOUR_JAMF_PRO_URL with the correct URL of your Jamf Pro instance and YOUR_CREDENTIALS with the Base64 encoded username and password of an appropriate user account. The credentials should be colon delimited (e.g. username:password).

printf "username:password" | iconv -t ISO-8859-1 | base64 -i -

Get Inventory Information from a Single Computer

The following code samples demonstrate how to retrieve inventory information for a single computer using the ID of the computer.

curl -X GET \
    https://YOUR_JAMF_PRO_URL/JSSResource/computers/id/8 \
    --header 'authorization: Basic YOUR_CREDENTIALS'
import http.client

conn = http.client.HTTPSConnection("YOUR_JAMF_PRO_URL")

headers = {
    'authorization': "Basic YOUR_CREDENTIALS"
}

conn.request("GET", "/JSSResource/computers/id/8", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'net/http'

uri = URI 'YOUR_JAMF_PRO_URL'
conn = Net::HTTP.new uri.host, uri.port
conn.use_ssl = true

res =  conn.get '/JSSResource/computers/id/8', authorization:  'Basic YOUR_CREDENTIALS'

puts res.body

Deploy (Scope) an App to a Mobile Device

The following code samples demonstrate how to deploy (scope) a mobile device application to a single mobile device using the ID of the mobile device.

curl -X PUT \
    https://YOUR_JAMF_PRO_URL/JSSResource/mobiledeviceapplications/id/7 \
    --header 'content-type: application/xml' \
    --header 'authorization: Basic YOUR_CREDENTIALS' \
    --data '<mobile_device_application>
                <scope>
                    <mobile_devices>
                        <mobile_device>
                            <id>2</id>
                        </mobile_device>
                    </mobile_devices>
                </scope>
            </mobile_device_application>'
import http.client

conn = http.client.HTTPSConnection("YOUR_JAMF_PRO_URL")

payload = "<mobile_device_application><scope><mobile_devices><mobile_device><id>2</id></mobile_device></mobile_devices></scope></mobile_device_application>"

headers = {
    'content-type': "application/xml",
    'authorization': "Basic YOUR_CREDENTIALS"
                    }

conn.request("PUT", "/JSSResource/mobiledeviceapplications/id/7", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'net/http'

uri = URI 'YOUR_JAMF_PRO_URL'
conn = Net::HTTP.new uri.host, uri.port
conn.use_ssl = true

req = Net::HTTP::Put.new(uri + '/JSSResource/mobiledeviceapplications/id/7', authorization:  'Basic YOUR_CREDENTIALS')
req.content_type = 'application/xml'

req.body = '<mobile_device_application><scope><mobile_devices><mobile_device><id>2</id></mobile_device></mobile_devices></scope></mobile_device_application>'

res = conn.request req

puts res.body

Deploy (Scope) an App to a Computer

The following code samples demonstrate how to deploy (scope) an app to an individual computer by updating the scope of an existing policy using the ID of the computer.

curl -X PUT \
    https://YOUR_JAMF_PRO_URL/JSSResource/policies/id/15 \
    --header 'authorization: Basic YOUR_CREDENTIALS' \
    --header 'content-type: application/xml' \
    --data '<policy>
                <scope>
                    <computers>
                        <computer>
                            <id>9</id>
                        </computer>
                    </computers>
                </scope>
            </policy>'
import http.client

conn = http.client.HTTPSConnection("YOUR_JAMF_PRO_URL")

payload = "<policy><scope><computers><computer><id>9</id></computer></computers></scope></policy>"

headers = {
    'content-type': "application/xml",
    'authorization': "Basic YOUR_CREDENTIALS"
}

conn.request("PUT", "/JSSResource/policies/id/15", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'net/http'

uri = URI 'YOUR_JAMF_PRO_URL'
conn = Net::HTTP.new uri.host, uri.port
conn.use_ssl = true

req = Net::HTTP::Put.new(uri + '/JSSResource/policies/id/15', authorization:  'Basic YOUR_CREDENTIALS')
req.content_type = 'application/xml'

req.body = '<policy><scope><computers><computer><id>9</id></computer></computers></scope></policy>'

res = conn.request req

puts res.body

Issue Remote Command to a Computer

The following code samples demonstrate how to issue a remote command to a single computer.

curl -X POST \
    https://YOUR_JAMF_PRO_URL/JSSResource/computercommands/command/DeviceLock \
    --header 'authorization: Basic YOUR_CREDENTIALS' \
    --header 'content-type: application/xml' \
    --data '<computer_command>
        <general>
            <command>DeviceLock</command>
            <passcode>123456</passcode>
        </general>
        <computers>
            <computer>
                <id>8</id>
            </computer>
        </computers>
    </computer_command>'
import http.client

conn = http.client.HTTPSConnection("YOUR_JAMF_PRO_URL")

payload = "<computer_command><general><command>DeviceLock</command><passcode>123456</passcode></general><computers><computer><id>8</id></computer></computers></computer_command>"

headers = {
    'content-type': "application/xml",
    'authorization': "Basic YOUR_CREDENTIALS"
    }

conn.request("POST", "/JSSResource/computercommands/command/DeviceLock", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'net/http'

uri = URI 'YOUR_JAMF_PRO_URL'
conn = Net::HTTP.new uri.host, uri.port
conn.use_ssl = true

req = Net::HTTP::Post.new(uri + '/JSSResource/computercommands/command/DeviceLock', authorization:  'Basic YOUR_CREDENTIALS')
req.content_type = 'application/xml'

req.body = '<computer_command><general><command>DeviceLock</command><passcode>123456</passcode></general><computers><computer><id>8</id></computer></computers></computer_command>'

res = conn.request req

puts res.body

Issue Remote Command to a Mobile Device

The following code samples demonstrate how to issue a remote command to a single mobile device.

curl -X POST \
    https://YOUR_JAMF_PRO_URL/JSSResource/mobiledevicecommands/command \
    --header 'authorization: Basic YOUR_CREDENTIALS' \
    --header 'content-type: application/xml' \
    --data '<mobile_device_command>
        <general>
            <command>DeviceLock</command>
        </general>
        <mobile_devices>
            <mobile_device>
                <id>2</id>
            </mobile_device>
        </mobile_devices>
    </mobile_device_command>'
import http.client

conn = http.client.HTTPSConnection("YOUR_JAMF_PRO_URL")

payload = "<mobile_device_command><general><command>DeviceLock</command></general><mobile_devices><mobile_device><id>2</id></mobile_device></mobile_devices></mobile_device_command>"

headers = {
    'content-type': "application/xml",
    'authorization': "Basic YOUR_CREDENTIALS"
}

conn.request("POST", "/JSSResource/mobiledevicecommands/command", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'net/http'

uri = URI 'YOUR_JAMF_PRO_URL'
conn = Net::HTTP.new uri.host, uri.port
conn.use_ssl = true

req = Net::HTTP::Post.new(uri + '/JSSResource/mobiledevicecommands/command', authorization:  'Basic YOUR_CREDENTIALS')
req.content_type = 'application/xml'

req.body = '<mobile_device_command><general><command>DeviceLock</command></general><mobile_devices><mobile_device><id>2</id></mobile_device></mobile_devices></mobile_device_command>'

res = conn.request req

puts res.body

Update the Value of a Computer Extension Attribute on a Single Computer

The following code samples demonstrate how to update the value of a computer extension attribute on a single computer.

curl -X PUT \
https://YOUR_JAMF_PRO_URL/JSSResource/computers/id/8 \
    --header 'authorization: Basic YOUR_CREDENTIALS' \
    --header 'content-type: application/xml' \
    --data '<computer>
        <extension_attributes>
            <extension_attribute>
                <id>1</id>
                <value>TEST2</value>
            </extension_attribute>
        </extension_attributes>
    </computer>'
import http.client

conn = http.client.HTTPSConnection("YOUR_JAMF_PRO_URL")

payload = "<computer><extension_attributes><extension_attribute><id>1</id><value>TEST2</value></extension_attribute></extension_attributes></computer>"

headers = {
    'content-type': "application/xml",
    'authorization': "Basic YOUR_CREDENTIALS"
}

conn.request("PUT", "/JSSResource/computers/id/8", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
require 'net/http'

uri = URI 'YOUR_JAMF_PRO_URL'
conn = Net::HTTP.new uri.host, uri.port
conn.use_ssl = true

req = Net::HTTP::Put.new(uri + '/JSSResource/computers/id/8', authorization:  'Basic YOUR_CREDENTIALS')
req.content_type = 'application/xml'

req.body = '<computer><extension_attributes><extension_attribute><id>1</id><value>TEST2</value></extension_attribute></extension_attributes></computer>'

res = conn.request req

puts res.body