Snipe-IT Asset Management Installation Documentation

Welcome to the Snipe-IT documentation hub. You'll find comprehensive guides and documentation to help you install Snipe-IT as quickly as possible, as well as support if you get stuck. Let's jump right in!

Get Started    

Internally Parsing the API


Please Note:

This sections is targeted at developers who are contributing to the Snipe-IT core itself, not those who are using the API to build external applications that interface with Snipe-IT. For documentation on consuming the API from a third-party system or script, check out the reference documentation.

Snipe-IT uses the fantastic (if roughly documented) Bootstrap-Table library from wenzhixin to handle all list views in the web GUI. Starting in version 4.0 of Snipe-IT, we've dramatically changed how the JSON responses generated by Snipe-IT are consumed.

Version 4.0 cleans up the JSON, and offloads the front-end formatting to the Bootstrap Tables data formatters, which allows us to keep our JSON clean (and smaller), while still delivering the front-end the way you'd expect.

The most common formatters are located in the resources/views/partials/bootstrap-tables.blade.php file, which initializes the table with various options, and also contains the formatters that are most commonly used by most of not all list views. You'll see that we dynamically generate some of the formatters, specifically the ones that we know are used just about everywhere, and then we also have a few exceptions.

The generic formatter builder looks like this:

// This only works for model index pages because it uses the row's model ID
    function genericRowLinkFormatter(destination) {
        return function (value,row) {
            if (value) {
                return '<a href="{{ url('/') }}/' + destination + '/' + + '"> ' + value + '</a>';

    // Use this when we're introspecting into a column object and need to link
    function genericColumnObjLinkFormatter(destination) {
        return function (value,row) {
            if ((value) && ( {
                return '<a href="{{ url('/') }}/' + destination + '/' + + '"> ' + + '</a>';

(You should never have to change this part.)

After that, you'll see that we loop through the most common types of items in Snipe-IT, and generate their formatters:

var formatters = [

    for (var i in formatters) {
        window[formatters[i] + 'LinkFormatter'] = genericRowLinkFormatter(formatters[i]);
        window[formatters[i] + 'LinkObjFormatter'] = genericColumnObjLinkFormatter(formatters[i]);
        window[formatters[i] + 'ActionsFormatter'] = genericActionsFormatter(formatters[i]);
        window[formatters[i] + 'InOutFormatter'] = genericCheckinCheckoutFormatter(formatters[i]);

(You should never have to change this either.)

The key takeway here is that you have two main types of formatters other than the one-offs. LinkFormatter and LinkObjFormatter. The important thing to note here is that the LinkFormatter looks at the row of data, whereas LinkObjFormatter introspects into a JSON object.

For example, if I were on the Users listing page, I would invoke the usersLinkFormatter to format the user name, since the entire row contains information about a single user.

If I were on the assets listing page, I would use the usersLinkObjFormatter to create a link and display the name of the user.

This is because the JSON being returned when querying assets includes the user data in a compact JSON object that is a subset of the asset object, and it needs to be walked through.

Updated about a year ago

What's Next

Bootstrap Tables

Internally Parsing the API

Suggested Edits are limited on API Reference Pages

You can only suggest edits to Markdown body content, but not to the API spec.