NAV
cURL

Getting Started

Welcome to the SimplyPrint API!

This documentation goes through authenticating and how to use the API.

Also available: llms.txt (AI-readable reference) | api/index.json (machine-readable index)

🤖 Get AI help with this API

Ask an AI assistant about the SimplyPrint API. They can read our docs and help you with authentication, endpoints, and integration.

AI-friendly URLs you can share:
https://apidocs.simplyprint.io/llms.txt - full API overview
https://apidocs.simplyprint.io/api/index.json - structured endpoint index
https://apidocs.simplyprint.io/static/{endpoint}.txt - individual endpoint details

The base URL

The base URL for the SimplyPrint API is https://api.simplyprint.io/{id}/.

To use the base API at https://api.simplyprint.io, you will need to specify an id.

The id represents the unique identifier for the company that you are using the API key for. This id is used to access the specific functionality within the API that is associated with the company.

The endpoint represents the specific functionality that you want to access within the API. There are various endpoints available, each with its own specific purpose and functionality.

For example, if you want to access the account/Test endpoint for a company with an id of 123, you would use the following API endpoint:

https://api.simplyprint.io/123/account/Test

If you are part of an organization, you might need to ask your organization administrator to allow API access for your account for the organization.

Gaining access to the API

There are two ways to gain access to the SimplyPrint API:

  1. Using an API key (recommended)
    • This is the recommended method for most users. This method requires a SimplyPrint account and an API key.
  2. Using OAuth2
    • This method is only available for approved integrations. You can use OAuth2 to access SimplyPrint API endpoints on behalf of a user.

To get an API key you'll need a SimplyPrint account that is either a member of an organization, or have at least the SimplyPrint Pro plan.

To create your own API key you first need a SimplyPrint account, you can go to your account settings and create a new API key.

Using the API key

curl {base_url}/account/Test \
  --header 'X-API-KEY: {API_KEY}'

Success return:

{
  "status": true,
  "message": "Your API key is valid!"
}

Error return in case of an invalid or missing API key:

{
  "status": false,
  "message": "No API key provided, or not logged in"
}

Error return in case of missing permissions for the organization:

{
  "status": false,
  "message": "You don't have access to this account"
}

To verify that your API key is valid and that you have access to the desired organization, you can make a request to the /account/Test endpoint.

To make any request to the SimplyPrint API, you will need to include your API key in the request header. You can do this by including the X-API-KEY header in your request. On the right side of this page, you can see an example of how to make a request to the /account/Test endpoint using cURL.

If you are unable to successfully make a request to the /account/Test endpoint using the provided example, there may be a few possible issues:

If you are unable to resolve the issue after troubleshooting these potential issues, you may need to contact your organization administrator for further assistance. Otherwise, feel free to contact us via our helpdesk.

Using OAuth2

SimplyPrint supports OAuth2 logins for all users, regardless of their subscription, for approved integrations such as the Cura slicer integration.

The OAuth2 method can be used to link a user's SimplyPrint account with a third party platform/software, and use the SimplyPrint API on behalf of the user.

To obtain OAuth2 access, you must be added as an OAuth2 provider by SimplyPrint. To request this, please fill out the OAuth2 Client Request Form.

Once you have been added as an OAuth2 provider, you can use the following documentation to implement OAuth2 in your application.

Authorizing your application

For users to grant your application access to their SimplyPrint account, you must first redirect them to the SimplyPrint OAuth2 authorization page. You can do this by redirecting the user to the following URL:

https://simplyprint.io/panel/oauth2/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&scope={scope}

The following parameters can be supplied as query parameters in the URL:

Parameter Type Required Description
client_id string yes The client ID of your OAuth2 application
redirect_uri string yes The redirect URI of your OAuth2 application
scope string yes The scope of the OAuth2 access token. This can be a +-separated list of scopes.
response_type string yes This must be set to code
state string no The value of this parameter will be returned to your application when the user is redirected back

Once the user has granted access to your application, they will be redirected to {redirect_uri}?code={code}&state={state}. The code parameter is the authorization code that you will use to obtain an access token. The state parameter will only be returned if you specified a state parameter in the authorization URL.

Obtaining an access token

Obtaining an access token

curl https://api.simplyprint.io/oauth2/Token \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Request body

{
  "grant_type": "authorization_code",
  "client_id": "{client_id}",
  "client_secret": "{client_secret}",
  "code": "{code}",
  "redirect_uri": "{redirect_uri}"
}

Success response

{
  "token_type": "Bearer",
  "expires_in": 3600,
  "access_token": "{access_token}",
  "refresh_token": "{refresh_token}"
}

Now that you have a code parameter, you can use it to obtain an access token. To do this, you must make a POST request to the following URL:

https://api.simplyprint.io/oauth2/Token

This will return an access token that you can use to make requests to the SimplyPrint API on behalf of the user.

This access token will expire after 1 hour. Once it expires, you can use the refresh_token parameter to obtain a new access token. To do this, you must make a POST request to the same URL as above, but with the following request parameters:

Parameter Type Description
grant_type string This must be set to refresh_token
client_id string The client ID of your application
client_secret string The client secret of your application
refresh_token string The refresh token that was returned when you obtained the access token

To refresh your access token, you can make a POST request to the same URL as above, but with the following request parameters:

Parameter Type Description
grant_type string This must be set to refresh_token
client_id string The client ID of your application
client_secret string The client secret of your application
refresh_token string The refresh token that was returned when you obtained the access token

This will return a new access token that you can use to make requests to the SimplyPrint API on behalf of the user.

Testing your access token

Testing your access token

curl https://api.simplyprint.io/oauth2/TokenInfo \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {access_token}'

Success response

{
  "status": true,
  "message": null,
  "user": {
    "id": 112,
    "name": "John Doe",
    "email": "john@doe.com",
  },
  "company": {
    "id": 123,
    "name": "My Company"
  },
  "scopes": [
    ...
  ],
  "expires_at": 1706292803
}

To test your access token, you can make a GET request to the following URL:

https://api.simplyprint.io/oauth2/TokenInfo

This endpoint returns the following information:

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
user object User object.
user.id integer User ID.
user.name string User name. This is only returned if the user.read scope is included in the access token.
user.email string User email. This is only returned if the user.read scope is included in the access token.
company object Company object.
company.id integer Company ID.
company.name string Company name.
scopes array Array of scopes that are included in the access token.
expires_at integer The unix timestamp of when the access token expires.

The company id is especially important, as you will need to use this in the base URL for all requests to the SimplyPrint API.

Printers

Get printer info

curl https://api.simplyprint.io/{id}/printers/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "page": 1,
    "page_size": 10,
    "search": "Printer 1"
  }'

Success response

{
  "status": true,
  "message": null,
  "page_amount": 1,
  "data": [
    {
      "id": 385,
      "sort_order": 6,
      "printer": {
        "name": "Mini Printer 1",
        "state": "printing",
        "group": 99,
        "position": 6,
        "api": "OctoPrint",
        "ui": "OctoPrint",
        "ip": "10.78.16.46",
        "public": 1,
        "machine": "Raspberry Pi 4 Model B Rev 1.2",
        "online": true,
        "region": "eu-west-2",
        "firmware": "Virtual Marlin",
        "spVersion": "4.0.5",
        "temps": {
          "ambient": 22,
          "current": {
            "tool": [
              210
            ],
            "bed": null
          },
          "target": {
            "tool": [
              210
            ],
            "bed": null
          }
        },
        "hasPSU": 1,
        "psuOn": true,
        "hasFilSensor": true,
        "filSensor": true,
        "filamentRetraction": 250,
        "model": {
          "id": 91,
          "name": "Fabrikator Mini",
          "brand": "Turnigy",
          "bedSize": [
            80,
            80
          ],
          "bedType": "square",
          "maxHeight": 80,
          "image": "https:\/\/cdn.simplyprint.io\/i\/printer_types\/turnigy\/fabrikator_mini\/silhouette_sm.png?cacheid=5fe9e77f49198",
          "hasHeatedBed": false,
          "extruders": 1,
          "extruderSettings": null,
          "maxToolTemp": 240,
          "maxBedTemp": 0,
          "filamentWidth": 1.75,
          "nozzleDia": 0.4,
          "axes": {
            "e": {
              "inverted": false,
              "speed": 5
            },
            "x": {
              "inverted": false,
              "speed": 100
            },
            "y": {
              "inverted": false,
              "speed": 100
            },
            "z": {
              "inverted": false,
              "speed": 3.5
            }
          },
          "screwOffset": 35,
          "filamentRetraction": 250,
          "customBoundingBox": false,
          "extrudeAbs": 0,
          "originCenter": 0,
          "bedBelt": 0,
          "fwRetract": 0,
          "extrusionType": 1,
          "noControl": 0
        },
        "hasCam": 1,
        "hasQueue": {
          "items": 6,
          "fits": true
        },
        "health": {
          "usage": 24,
          "temp": 61,
          "memory": 19
        },
        "unsupported": 0,
        "latency": null,
        "outOfOrder": 0
      },
      "filament": null,
      "job": {
        "id": 552252,
        "uid": "da69d2a4-e07e-48ff-128a-f88fab1b8f20",
        "state": "printing",
        "file": "Benchy.15mm_PLA_MK3S_7h40m.gcode",
        "percentage": 50,
        "time": 12627,
        "canPreview": true,
        "layer": null
      },
      "tags": {
        "nozzle": 0.6,
        "material": [
          {
            "ext": 0,
            "type": 123,
            "color": "Green",
            "hex": "#4CAF50"
          }
        ],
        "custom": [
          1,
          2,
          3
        ]
      }
    },
    ...
  ]
}

This endpoint returns a list of printers based on the given parameters.

Request

POST /{id}/printers/Get

Query parameters

Parameter Type Required Description
pid integer no Optional printer ID if you want to get info for a single printer.

Request body

Parameter Type Required Description
page integer no Page number to get. Leave empty for page 1.
page_size integer no Number of printers per page. (Between 1 and 100)
Default: 10
search string no Search string to filter printers by.

Response

Note that data will be an object if pid is specified, otherwise it will be an array.

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data object or array Printer object(s).
data.*.id integer Printer ID.
data.*.sort_order integer The printer's sort index.
data.*.printer object Printer object.
data.*.printer.name string Printer's name.
data.*.printer.state string Printer's state.
data.*.printer.group integer Printer's group ID.
data.*.printer.position integer Printer's position in the group.
data.*.printer.api string Printer's API type.
data.*.printer.ui string Printer's UI type.
data.*.printer.ip string Printer's local IP address.
data.*.printer.public boolean Whether the printer is shown on the company hub.
data.*.printer.machine string Printer's machine type.
data.*.printer.online boolean Whether the printer is online.
data.*.printer.region string What region the printer is online in.
data.*.printer.firmware string Printer's firmware version.
data.*.printer.spVersion string Printer's SimplyPrint version.
data.*.printer.temps object Printer's current temperatures.
data.*.printer.hasPSU boolean Whether the printer has a SimplyPrint connected PSU.
data.*.printer.psuOn boolean Whether the printer's PSU is on.
data.*.printer.hasFilSensor boolean Whether the printer has a filament sensor.
data.*.printer.filamentRetraction integer Printer's filament retraction distance.
data.*.printer.model string Printer's model.
data.*.printer.hasCam boolean Whether the printer has a camera.
data.*.printer.hasQueue object Data about the printer's queue. Null if the printer doesn't have a queue.
data.*.printer.hasQueue.items integer Number of items in the printer's queue.
data.*.printer.hasQueue.fits boolean Whether the printer can physically fit any items in its queue.
data.*.printer.health object Printer's health data. (CPU usage, temperature, memory usage)
data.*.printer.unsupported boolean Whether the printer is unsupported.
data.*.printer.latency integer Printer's latency.
data.*.printer.outOfOrder boolean Whether the printer is out of order.
data.*.filament object Printer's filament data.
data.*.job object Printer's current job data. See Get Print Jobs for more info.
data.*.tags object/null Tags for printer; custom tags, static material data & nozzle size

Start print / create job

curl https://api.simplyprint.io/{id}/printers/actions/CreateJob?pid=1234&filesystem=291 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "pid": [
      1234,
      1235
    ],
    "filesystem": "196a1dd0b93a66c19192a39fa4c16e71"
  }'

Success response

{
  "status": true,
  "message": null,
  "files": [
    {
      "name": "Benchy.gcode",
      "analysis": {
        "slicer": "Simplify3D",
        "filament": [
          60
        ],
        "estimate": 240,
        "movement": {
          "mRelative": 0,
          "eRelative": 0
        },
        "temps": {
          "tool": {
            "T0": 210
          },
          "bed": 50,
          "pset": 1
        },
        "modelSize": {
          "x": 151,
          "y": 16,
          "z": 5
        },
        "printArea": {
          "maxX": 156.05,
          "minX": 5,
          "maxY": 157.86,
          "minY": 142.14,
          "maxZ": 5,
          "minZ": 0.2
        },
        "minDeltaRadius": 313.91,
        "v": 5
      },
      "printers": [
        1234,
        1235
      ],
      "queued": false,
      "cost": [
        {
          "estimate": false,
          "total_cost": 1006.76,
          "lines": [
            {
              "id": 1,
              "label": "HIPS Material usage",
              "cost": 0.05
            },
            {
              "id": 2,
              "label": "Material markup",
              "cost": 0.03
            },
            {
              "id": 3,
              "label": "Machine run time cost",
              "cost": 6.67
            },
            {
              "id": 4,
              "label": "Energy cost",
              "cost": 0.01
            },
            {
              "id": 5,
              "label": "Labor cost",
              "cost": 1000
            }
          ]
        }
      ]
    }
  ],
  "jobIds": [
    495462,
    495463
  ]
}

This endpoint can be used to create a print job for one or more printers. The printers have to be in the operational state.

Request

POST /{id}/printers/actions/CreateJob

To start a print job you must either specify a filesystem ID, a queue_file ID file, a file_id or set next_queue_item to true.

Parameter Type Required Description
pid integer or integer[] yes The ID(s) of the printer to create the job for.
filesystem string no The filesystem ID of the file to print.
queue_file integer no The queue ID of the queue item to print.
multi_queue object no A map of queue item ID to an array of printer IDs. For example {638: [12645, 12646]}.
next_queue_item boolean no If true, the next queue item will be printed.
This requires the Print Farm plan
file_id string no File ID from API Files - used to start a file without adding it as a queue item or user file.
mms_map object no Multi-Material System (MMS) mapping for color/material switching. Format: [{"pid": printer_id, "map": [extruder_mapping]}] where extruder_mapping maps gcode extruders to printer extruders (e.g., [0,1,2,3] maps T0→E0, T1→E1, etc.). For printers with multiple nozzles, use objects: [{"nozzle": 0, "ext": 4}]. Set to null to skip an extruder mapping.
start_options object/array no Additional start options for the print job. Can be JSON string or array. These options control various aspects of the print start behavior.
custom_fields array no An array with custom fields to assign to the print job. Each custom field consists of {customFieldId: string, value: <value>} where the <value> is a Custom Field Submission Value.

Extra settings for next_queue_item

You can specify these parameters if next_queue_item is true. Note that you can specify more/all of the below parameters.

Parameter Type Required Description
analysis_strict boolean no Match the next item that has a valid gcode analysis.
Defaults to true
fit_strict boolean no Match the next item if it fits on the printers print area.
Defaults to true
temps_strict boolean no Match the next item where the printer can reach the temperatures specified in the gcode.
Defaults to true
filament_strict boolean no Match the next item that was sliced for the same filament type that the printer is assigned to in SimplyPrint.
Defaults to false
filament_temps_strict boolean no Match the next item that has the same filament temperatures as the printer has in SimplyPrint.
Defaults to false

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.
files array Array of started print job objects.
files[].name string The name of the file.
files[].analysis object The analysis of the file. This has been documented in the Get queue items endpoint.
files[].printers integer[] The IDs of the printers that the print job was started on.
files[].queued boolean Whether the print job was from print queue.
files[].cost object[] nullable
jobIds integer[] The IDs of the print jobs that were started.
errors string[] (Optional) Array of error messages when some jobs fail to start.
matching_errors object[] (Optional) Array of queue matching errors when using next_queue_item.
matching_errors[].error string Error description for failed printer matching.
matching_errors[].issues array Array of specific matching issues for the printer.

Pause print job

curl https://api.simplyprint.io/{id}/printers/actions/Pause?pid=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}

This endpoint can be used to pause one or multiple print jobs. The printers have to be in the PRINTING state.

Request

POST /{id}/printers/actions/Pause

Query parameters

Parameter Type Required Description
pid integer or integer[] yes The ID(s) of the printer to pause. Pause multiple printers by comma separating printer ids.
Printer must be in PRINTING state

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Resume print job

curl https://api.simplyprint.io/{id}/printers/actions/Resume?pid=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}

Request

POST /{id}/printers/actions/Resume

Query parameters

Parameter Type Required Description
pid integer or integer[] yes The ID(s) of the printer to resume. Resume multiple printers by comma separating printer ids.
Printer must be in PRINTER_PAUSED state

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Cancel print job

curl https://api.simplyprint.io/{id}/printers/actions/Cancel?pid=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "reason": 3,
    "comment": "Cancel comment"
  }'

Success response

{
  "status": true,
  "message": null
}
Required permission Description
cancel_others_prints Need permission to cancel other users' prints if the print job was started by another user.

This endpoint can be used to cancel one or multiple print jobs. The printers have to be in the PRINTING, PAUSED or PAUSING state.

Request

POST /{id}/printers/actions/Cancel

Query parameters

Parameter Type Required Description
pid integer or integer[] yes The ID(s) of the printer to cancel. Cancel multiple printers by comma separating printer ids.
Printer must be in PRINTING, PAUSED or PAUSING state

Request body

Field Type Required Description
reason integer no The reason for cancelling the print job. See Cancel reasons. Depending on the require_cancel_reason organization setting, this field may be required.
comment string no A comment for the cancel reason. Depending on the require_comment organization setting, this field may be required.
Max length: 500 characters

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Clear print bed

curl https://api.simplyprint.io/{id}/printers/actions/ClearBed?pid=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "success": true,
    "rating": 4
  }'

Success response

{
  "status": true,
  "message": null
}

This endpoint can be used to clear the print bed of a printer.

Request

POST /{id}/printers/actions/ClearBed

Query parameters

Parameter Type Required Description
pid integer yes The ID(s) of the printer to clear, comma separated. These printers have to be in either the operational or offline states.

Request body

Field Type Required Description
success boolean no True if the print was successful.
Default: false
rating integer no The rating of the print. Don't send this field if you do not want to rate the print.

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Send raw gcode

curl https://api.simplyprint.io/{id}/printers/actions/SendGcode?pid=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -H 'Content-Type: application/json' \
  -d '{
    "gcode": ["G28 XY"]
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
send_raw_gcode

POST /{id}/printers/actions/SendGcode

Request Parameters

Parameter Type Description
pid integer[] The ID(s) of the printer(s) to send the gcode to.

Request body

Parameter Type Required Description
gcode string[] yes Array of gcode commands to send to the printer.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Delete / disconnect printer

curl https://api.simplyprint.io/{id}/printers/Delete?pid=1234&just_connection=1 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}
Required permissions
printer_edit

This endpoint can be used to delete a printer from the database, or to disconnect a pi from a printer. This is useful if you want to change the printer that is connected to a pi.

Request

GET /{id}/printers/Delete

Parameter Type Required Description
pid integer yes The ID of the printer to delete.
just_connection integer no If set to 1, only the Pi connection will be deleted. Otherwise, the printer will be permanently deleted.
Default: 0

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

List 1-Click printers

Required permission
print_queue
curl https://api.simplyprint.io/{id}/printers/OneClickPrint?pid=1234,1235 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "bedsMustBeCleared": true,
  "autoAddAvailable": true,
  "settings": {
    ...
  },
  "canEditSettings": true,
  "hasQueue": true,
  "custom_fields": [
    ...
  ],
  "queue": [
    ...
  ]
}

GET /{id}/printers/OneClickPrint?pid=1234,1235

Query parameters

Parameter Type Required Description
pid integer[] yes Printers you want to retrieve data about

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
bedsMustBeCleared boolean true if beds must be cleared before printing.
autoAddAvailable boolean true if auto-discover printers is available.
settings object Queue auto-start settings.
canEditSettings boolean true if the user can edit settings.
hasQueue boolean true if the company has a print queue.
custom_fields array Array of custom fields for the print queue.
queue array Array of next items in the print queue.

AutoPrint enable / disable

Required permission
autoprint_manage
curl https://api.simplyprint.io/{id}/printers/autoprint/SetEnabled \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "on": true
  }'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/printers/autoprint/SetEnabled

Request body

Parameter Type Required Description
on boolean yes Set to true to enable autoprint, or false to disable it.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

AutoPrint check state

Required permission
autoprint_manage
curl https://api.simplyprint.io/{id}/printers/autoprint/CheckState \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "printers": [
    {
      ...
    }
  ]
}

GET /{id}/printers/autoprint/CheckState

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
printers array Array of printers along with their AutoPrint status.
printers[].printer integer The printer id.
printers[].ready boolean Whether the printer is ready.
printers[].issues array An array of issues with the printer.
printers[].state object The state of the printer.
printers[].state.awaitingBedCool boolean True if the printer is awaiting the bed to cool down.
printers[].state.awaitingSecondsPass boolean True if the printer is awaiting a specified number of seconds to pass.
printers[].state.awaitingManualClear boolean True if the printer is awaiting manual clearance.
printers[].state.maxCyclesReached boolean True if the printer has reached the maximum number of print cycles.
printers[].state.waitingForSystem boolean True if the printer is waiting for the system.
printers[].state.awaitingMatchingQueueItem boolean True if the printer is awaiting a matching queue item.
printers[].nextItem object/null The next queue item formatted for the printer.

AutoPrint get settings

Required permission
autoprint_manage
curl https://api.simplyprint.io/{id}/printers/autoprint/GetAutoPrintSettings \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "gcode": "...",
  "printer_settings": {
    ...
  },
  "printer_has_settings": true,
  "account_settings": {
    ...
  },
  "account_has_settings": true,
  "queue_match_settings": {
    ...
  },
  "can_macro": true
}

GET /{id}/printers/autoprint/GetAutoPrintSettings

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
gcode string G-code for clearing the auto print settings.
printer_settings object The auto print settings for the printer.
printer_has_settings boolean true if the printer has auto print settings.
account_settings object The auto print settings for the account.
account_has_settings boolean true if the account has auto print settings.
queue_match_settings object The queue match criteria settings for the account.
can_macro boolean true if the user has permission to manage G-code profiles for the company.

AutoPrint save settings

Required permission
autoprint_manage
curl https://api.simplyprint.io/{id}/printers/autoprint/SaveAutoPrintSettings \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -H 'Content-Type: application/json' \
  -d '{
    "useDefault": true,
    "saveAsDefault": false,
    "bedReleaseTemp": 60,
    "autoReleaseTime": 3600,
    "maxPrints": 100,
    "ackNoGcode": true,
    "method": "loop"
  }'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/printers/autoprint/SaveAutoPrintSettings

Request Body

Parameter Type Description
useDefault boolean true to use company defaults, false to use custom settings.
saveAsDefault boolean true to save the settings as company defaults.
bedReleaseTemp integer Temperature at which the bed releases the print.
autoReleaseTime integer Time in seconds after which the print is automatically released.
maxPrints integer Maximum number of prints before requiring manual intervention.
ackNoGcode boolean true to acknowledge no G-code is required.
method string Method to use for auto print settings. One of loop, jobox, 3dque, belt, pushoff

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

AutoPrint get gcode templates

Required permission
autoprint_manage
curl https://api.simplyprint.io/{id}/printers/autoprint/GetGcodeTemplates \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "methods": [
    {
      "name": "loop",
      "gcode": "..."
    },
    {
      "name": "jobox",
      "gcode": "..."
    },
    {
      "name": "3dque",
      "gcode": "..."
    },
    {
      "name": "belt",
      "gcode": "..."
    },
    {
      "name": "pushoff",
      "gcode": "..."
    }
  ]
}

GET /{id}/printers/autoprint/GetGcodeTemplates

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
methods array Array of G-code templates for different methods.
methods[].name string Name of the method.
methods[].gcode string G-code template for the method.

AutoPrint set cleared beds amount

Required permission
autoprint_manage
curl https://api.simplyprint.io/{id}/printers/autoprint/SetClearedBedsAmount \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -H 'Content-Type: application/json' \
  -d '{
    "amount": 10
  }'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/printers/autoprint/SetClearedBedsAmount

Request Body

Parameter Type Description
pid integer[] The ID(s) of the printer(s) to set the cleared beds amount for.
amount integer The number of cleared beds to set for the printer(s). Must be between 0 and 100000.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Set printers out of order

curl https://api.simplyprint.io/{id}/printers/SetOutOfOrder?pid=1234,1235 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}
Required permission
printer_edit

This endpoint can be used to set one or multiple printers as out of order.

Request

POST /{id}/printers/SetOutOfOrder

Query parameters

Parameter Type Required Description
pid integer[] yes The ID(s) of the printer to set out of order. Comma separated list of printer IDs.

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Cancel reasons

ID Description
1 Print failed
2 Regretted print
3 No filament extruded / nozzle clog
4 Fell of the plate
5 Not enough filament
6 Other

Filament

List Filaments

curl https://api.simplyprint.io/{id}/filament/GetFilament \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "showid": true,
  "is_kg": false,
  "brands": {
    "test brand": 1,
    ...
  },
  "types": {
    "PLA": 1,
    ...
  },
  "filament": {
    "3017": {
      "id": 3017,
      "uid": "PL23",
      "type": {
        "id": 5637,
        "name": "PLA"
      },
      "brand": "test brand",
      "colorName": "test color",
      "colorHex": "#000000",
      "dia": 1.75,
      "note": null,
      "productionId": null,
      "batchId": null,
      "cost": 23.5,
      "qrId": null,
      "nfcId": null,
      "recyclable": false,
      "total": 335284,
      "left": 234699,
      "nozzle": 0,
      "extruder": 0,
      "bought": "2024-06-28T22:00:00+00:00",
      "firstUsedDate": null,
      "lastDriedDate": null,
      "created": 1630508337,
      "printer": 0,
      "nfc": 0,
      "qr": 0,
      "prodId": ""
    },
    ...
  }
}

This endpoint returns a list of all filaments as well as filament types and brands.

Note: Material information like density is not included in individual filament records in this endpoint's response. To get material information like density for filament types, use the Get Filament Types endpoint instead.

Request

GET /{id}/filament/GetFilament

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
showid boolean Whether to show filament id. (Frontend data)
is_kg boolean Whether to show filament in kg. (Frontend data)
brands object Filament brands.
brands.{brand} integer Number of filaments with {brand}.
types object Filament types such as PLA, ABS, PETG, etc.
types.{type} integer Number of filaments with {type}.
filament object Filament data where each key is a filament id.
filament.{id} object Filament data.
filament.{id}.id integer Filament id. (same as {id})
filament.{id}.uid string Four character code that is used to identify the filament. Refered to as filament id in the frontend.
filament.{id}.type object Filament type.
filament.{id}.type.id integer Filament type id.
filament.{id}.type.name string Filament type name.
filament.{id}.brand string Filament brand.
filament.{id}.colorName string Filament color name.
filament.{id}.colorHex string Filament color hex code.
filament.{id}.dia float Filament diameter.
filament.{id}.note string Custom note about the filament (null if empty).
filament.{id}.productionId string Production ID (null if empty).
filament.{id}.batchId string Batch ID (null if empty).
filament.{id}.cost float Cost of the filament.
filament.{id}.qrId string QR code ID (null if empty).
filament.{id}.nfcId string NFC ID (null if empty).
filament.{id}.recyclable boolean Whether the filament is recyclable.
filament.{id}.total integer Total filament length in mm.
filament.{id}.left integer Left filament length in mm.
filament.{id}.nozzle integer Which nozzle the filament is assigned to.
filament.{id}.extruder integer Which extruder the filament is assigned to.
filament.{id}.bought string ISO 8601 date string of when the filament was bought (null if not set).
filament.{id}.firstUsedDate integer Timestamp of when the filament was first used (null if not set).
filament.{id}.lastDriedDate integer Timestamp of when the filament was last dried (null if not set).
filament.{id}.created integer Timestamp of when the filament was created.
filament.{id}.printer integer Which printer the filament is assigned to (0 if not assigned).
filament.{id}.nfc integer Whether the filament has NFC (1 if yes, 0 if no).
filament.{id}.qr integer Whether the filament has QR (1 if yes, 0 if no).
filament.{id}.prodId string Filament product ID (same as productionId, kept for backwards compatibility).

Create or Update Existing Filament

curl https://api.simplyprint.io/{id}/filament/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"color_name": "Porcelain White", "color_hex": "#E5E5E5", "width": 1.75, "density": 1.24, "bought_at": "2022-12-24", "filament_type": "rPLA", "cost": 23, "brand": "lostboyslab", "slicing_settings": {"nozzle_temp": 200, "bed_temp": 60, "print_speed": 70}, "amount": 1, "total_length_type": "kg", "total_length": 1}'

Success response

{
  "status": true,
  "message": null,
  "filament_ids": [
    "NGGY"
  ],
  "qr_gen": 1
}

This endpoint can be used to create or update existing filament.

To update existing filament, you need to provide a fid query parameter, which is the filament id of the filament you want to update.

Required permissions
create_filament

Request

POST /{id}/filament/Create

Query Parameters

Parameter Type Required Description
fid string no Filament id of the filament you want to update.

Request Body

Parameter Type Required Description
color_name string yes Filament color name.
Max 64 characters
color_hex string yes Filament color hex code.
color_standard string no Filament color standard.
width float (enum) yes Filament width.
Value has to be one of [1.75, 2.85, 3.00]
density float yes Filament density.
bought_at string no Date of purchase.
Format: YYYY-MM-DD
filament_type string yes Filament type.
cost float no Cost of filament in your account-defined currency (changed in account settings).
custom_note string no Custom note.
Max 1000 characters
prod_id string no Filament product id.
brand string yes Filament brand.
brand_id integer no Filament brand id.
filgroup_id integer no Target SimplyPrint filament group id to insert filament into.
spool_id integer no Filament spool id.
slicing_settings object yes Slicing settings.
slicing_settings.nozzle_temp integer yes Nozzle temperature.
slicing_settings.nozzle_fl_temp integer yes Nozzle first layer temperature.
slicing_settings.bed_temp integer yes Bed temperature.
slicing_settings.bed_fl_temp integer yes Bed first layer temperature.
slicing_settings.print_speed integer yes Print speed.
slicing_settings.finish_rate float yes Finish rate.
slicing_settings.min_speed integer yes Minimum speed.
amount integer yes Amount of filament.
total_length_type string yes Total length type.
left_length_type string yes Left length type.
total_length float yes Total length.
length_used float yes Length used.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
filament_ids array Array of filament ids.
qr_gen integer Used for frontend, not important.

Delete Filament

curl https://api.simplyprint.io/{id}/filament/Delete?fid=4519 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}

This endpoint deletes a filament specified by the fid parameter.

Required permissions
create_filament

Request

GET /{id}/filament/Delete

Parameter Type Required Description
fid integer yes Filament id

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Assign Filament(s) To Printer

curl https://api.simplyprint.io/{id}/filament/Assign?pid=5123&fid=21812,31253 \
  -X POST \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"extruder": {"21812": 0, "31253": 1}}'

Success response

{
  "status": true,
  "message": null
}

This endpoint assigns filament(s) to a printer.

Required permissions
change_filament

Request

POST /{id}/filament/Assign

The request has both query parameters and a request body.

Query parameters

Parameter Type Required Description
pid integer yes Printer id.
fid integer yes Filament id(s), comma separated.

Request body

Parameter Type Required Description
extruder object yes Which filament to assign to which extruder.
extruder.{fid} integer yes Which extruder id to assign {fid} to.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Unassign Filament From Printer

curl https://api.simplyprint.io/{id}/filament/Unassign?fid=21812 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}

This endpoint unassigns a filament from a printer by filament id.

Required permissions
change_filament

Request

POST /{id}/filament/Unassign

Parameter Type Required Description
fid integer yes Filament id to unassign.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Get Filament Types

curl https://api.simplyprint.io/{id}/filament/type/Get \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 53970,
      "org_id": 2,
      "temps": {
        "nozzle": 250,
        "bed": 80,
        "margins": {
          "nozzle": 20,
          "bed": 20
        }
      },
      "profile_name": "PA-CF Carbonfiber nylon",
      "sort_order": 44,
      "material_type_name": "PA-CF",
      "generic": 0,
      "brand": {
        "id": 3,
        "name": "AzureFilm",
        "filament": {
          "id": 5,
          "name": "PA-CF Carbonfiber nylon"
        }
      },
      "density": 1.08,
      "deleted": 0,
      "cost": 24626,
      "filament_db_keep_updated": true,
      "DEPRECATION": "The following fields are deprecated and will be removed in the future: slicing, nozzle_temp, bed_temp, allowed_nozzle_temp_margin, allowed_bed_temp_margin, priority, filament_type_name, print_speed, finish_rate_factor, min_speed",
      "width": 1.75,
      "nozzle_temp": 250,
      "bed_temp": 80,
      "allowed_nozzle_temp_margin": 20,
      "allowed_bed_temp_margin": 20,
      "priority": 44,
      "filament_type_name": "PA-CF Carbonfiber nylon",
      "print_speed": 0,
      "finish_rate_factor": 1,
      "min_speed": 0,
      "slicing": {
        "printSpeed": 0,
        "finishRateFactor": 1,
        "minSpeed": 0
      }
    }
  ]
}

This endpoint returns a list of filament types available, including material information like density for each type.

Required permissions
see_filament_tab

Request

GET /{id}/filament/type/Get

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array Array of filament type objects.
data[].id integer Filament type ID.
data[].org_id integer Organization ID.
data[].temps object Temperature settings object.
data[].temps.nozzle integer Nozzle temperature in Celsius.
data[].temps.bed integer Bed temperature in Celsius.
data[].temps.margins object Temperature margin settings.
data[].temps.margins.nozzle integer Allowed nozzle temperature margin.
data[].temps.margins.bed integer Allowed bed temperature margin.
data[].profile_name string Profile name for the filament type.
data[].sort_order integer Sort order/priority for the filament type.
data[].material_type_name string Material type name (e.g., "PA-CF").
data[].generic integer Whether this is a generic filament type (0 = false, 1 = true).
data[].brand object Brand information object.
data[].brand.id integer Brand ID.
data[].brand.name string Brand name.
data[].brand.filament object Brand's filament information.
data[].brand.filament.id integer Brand's filament ID.
data[].brand.filament.name string Brand's filament name.
data[].density float Filament density in g/cm³.
data[].deleted integer Whether the filament type is deleted (0 = active, 1 = deleted).
data[].cost integer Cost of the filament type.
data[].filament_db_keep_updated boolean Whether to keep the filament database updated.
data[].DEPRECATION string Deprecation notice for legacy fields.
data[].width float Filament width/diameter in mm.
data[].nozzle_temp (deprecated) integer Deprecated - Use temps.nozzle instead.
data[].bed_temp (deprecated) integer Deprecated - Use temps.bed instead.
data[].allowed_nozzle_temp_margin (deprecated) integer Deprecated - Use temps.margins.nozzle instead.
data[].allowed_bed_temp_margin (deprecated) integer Deprecated - Use temps.margins.bed instead.
data[].priority (deprecated) integer Deprecated - Use sort_order instead.
data[].filament_type_name (deprecated) string Deprecated - Use profile_name instead.
data[].print_speed (deprecated) integer Deprecated - Use slicing.printSpeed instead.
data[].finish_rate_factor (deprecated) float Deprecated - Use slicing.finishRateFactor instead.
data[].min_speed (deprecated) integer Deprecated - Use slicing.minSpeed instead.
data[].slicing (deprecated) object Deprecated - Slicing settings object.
data[].slicing.printSpeed (deprecated) integer Deprecated - Print speed setting.
data[].slicing.finishRateFactor (deprecated) float Deprecated - Finish rate factor.
data[].slicing.minSpeed (deprecated) integer Deprecated - Minimum speed setting.

Print Jobs

Get print jobs

curl https://api.simplyprint.io/{id}/jobs/GetPaginatedPrintJobs \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "page": 1,
    "page_size": 10,
    "printer_ids": [
      385
    ],
    "status": [
      "cancelled",
      "finished"
    ],
    "start_date": "2023-02-28"
  }'

Success response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 549145,
      "uid": "7df103aa-b12c-4b33-8305-b55f91c11a4d",
      "status": "cancelled",
      "cancelReasonType": "5",
      "rating": -2,
      "filename": "Benchy.gcode",
      "startDate": "2023-02-28T21:05:50+00:00",
      "endDate": "2023-02-28T21:06:07+00:00",
      "user": 5933,
      "autoprint": false,
      "outsideSystem": false,
      "printer": 385,
      "filament": "{\"e0\": {\"usage\": 60}}",
      "filUsage": 60,
      "filUsageGram": 0,
      "currentPercentage": 48,
      "printTime": 17,
      "cost": {
        "estimate": false,
        "total_cost": 150,
        "lines": [
          {
            "id": 1,
            "label": "Material usage (account default)",
            "cost": 0.02
          },
          {
            "id": 2,
            "label": "Material markup",
            "cost": null
          },
          {
            "id": 3,
            "label": "Machine run time cost",
            "cost": null
          },
          {
            "id": 4,
            "label": "Energy cost",
            "cost": null
          },
          {
            "id": 5,
            "label": "Labor cost",
            "cost": 1000
          }
        ]
      },
      "queueItem": {
        "id": 1234,
        "user": 51,
        "queueNum": 3
      },
      "customFields": [
        {
          "id": "student_id",
          "value": {
            "string": "1234567890"
          }
        }
      ]
    },
    ...
  ],
  "page_amount": 1
}

Get paginated data about ongoing or finished print jobs.

Request

POST /{id}/jobs/GetPaginatedPrintJobs

Parameter Type Required Description
page integer yes The page number to get.
page_size integer yes The number of items per page. (Between 1 and 100)
printer_types[] integer[] no Array of printer type ids to filter on.
printer_ids[] integer[] no Array of printer ids to filter on.
user_ids[] integer[] no Array of user ids to filter on.
accepted_statuses[] string[] no Array of job statuses to filter on. One of ongoing, cancelled, failed, finished.
start_date string no The start date to filter on. In unix timestamp format. Can be set without end_date.
end_date string no The end date to filter on. In unix timestamp format. Can be set without start_date.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array The jobs.
data[].id integer The job id.
data[].uid string The job uid.
data[].status string The job status. One of ongoing, cancelled, failed, done. Note that done is the same as finished
data[].cancelReasonType string The job cancel reason type.
data[].rating integer The job rating.
data[].filename string The job filename. n
data[].startDate string The job start date.
data[].endDate string/null The job end date. Is null if the job is ongoing.
data[].user integer/null The user id of the user who started the job.
data[].autoprint boolean If the job was started automatically using the Auto-print feature
data[].outsideSystem boolean If the job was started outside SimplyPrint, via SD card, OctoPrint, Mailsail, Fluidd or else how
data[].printer integer The printer id that was used to print the job.
data[].filament string The filament usage. JSON encoded string with usage per extruder.
data[].filUsage integer The filament usage in mm.
data[].filUsageGram integer The filament usage in grams.
data[].currentPercentage integer The current percentage of the job.
data[].cost object/null Potential calculated cost of job.
data[].queueItem object/null The queue item that was used to start the job. Please note that this is only shown if you have access to view the Print Queue.
data[].queueItem.id integer The id of the queue item that was used to start the job.
data[].queueItem.user integer The user id of the user who created the queue item.
data[].queueItem.queueNum integer The queue number of the queue item.
page_amount integer The total number of pages for the given parameters.
total integer Total number of print jobs matching the filters.
users array (Optional) Array of user objects when ?getusers=1 is set.
users[].id integer User ID.
users[].first_name string User's first name.
users[].last_name string User's last name.

Get details

curl https://api.simplyprint.io/{id}/jobs/GetDetails?id=123 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "job": {
    "id": 123,
    "filament": [
      ...
    ],
    "pauses": [
      ...
    ],
    "currentTime": 1697040000,
    "pictures": [
      ...
    ],
    "notificationsSent": [
      ...
    ],
    "cost": 12.34,
    "customFields": {
      ...
    },
    "ended": 3600,
    "failedReason": "string",
    "cancelInfo": {
      "reason": "string",
      "comment": "string",
      "by": "string",
      "byOther": 1
    },
    "analysis": {
      ...
    },
    "notifications": {
      ...
    },
    "outsideSystem": true,
    "rating": 5,
    "started": 7200,
    "created": 10800,
    "state": "string",
    "file": "filename.gcode",
    "percentage": 50,
    "time": 1800,
    "canPreview": true,
    "layer": 10,
    "ai": [
      0.1,
      0.2,
      0.3
    ],
    "printer": {
      "id": 456,
      "name": "Printer Name",
      "extruders": 2,
      "image": "https://cdn.simplyprint.io/prints/images/printer_image.jpg",
      "deleted": 1
    },
    "spools": [
      ...
    ]
  }
}

GET /{id}/jobs/GetDetails?id={job_id}

Request Body

Parameter Type Description
id string The job UID.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
job object Details about the print job.
job.id integer Unique identifier for the job.
job.filament array Array of filament data.
job.pauses array Array of pause history.
job.currentTime integer Current timestamp.
job.pictures array Array of pictures related to the job.
job.notificationsSent array Array of notifications sent.
job.cost float Cost of the print job.
job.customFields object Custom fields for the job.
job.ended integer Time since the job ended.
job.failedReason string Reason for job failure, if any.
job.cancelInfo object Information about job cancellation.
job.analysis object G-code analysis data.
job.notifications object Notification data.
job.outsideSystem boolean true if the job is outside the system.
job.rating integer Rating of the job.
job.started integer Time since the job started.
job.created integer Time since the job was created.
job.state string Current state of the job.
job.file string Original filename of the job.
job.percentage integer Current completion percentage.
job.time integer Time left or time since the job ended.
job.canPreview boolean true if the job can be previewed.
job.layer integer Current layer of the print.
job.ai array Array of AI detection values.
job.printer object Details about the printer.
job.users object User information related to the job.
job.users.main object Main user who queued/owns the job.
job.users.main.id integer User ID of the main user.
job.users.main.name string Full name of the main user.
job.users.main.none boolean True if no user is associated with job.
job.users.startedBy object User who actually started the job.
job.users.startedBy.id integer User ID of the user who started the job.
job.users.startedBy.name string Full name of the user who started job.
job.timeline array Timeline of events that happened during the print job.
job.reprintable boolean Whether the job can be reprinted by current user.
job.canDownload boolean Whether the current user can download the file.
job.queued object Queue information if job was from queue.
job.autoprinted boolean Whether job was started automatically.
job.totalPrintTime integer Total print time in seconds (if completed).
job.archived boolean Whether the job is archived.
job.spools array Array of spool data.

API Files

The base URL for the SimplyPrint Files API is https://files.simplyprint.io/{id}/. Use the exact same authentication as the normal api endpoint. It is very important you ensure you send files with the correct file extension. The API will not be able to determine the file type based on the content.

Upload a file using the API

POST /{id}/files/Upload

Example request to upload a file less than 100MB

curl -X POST "https://files.simplyprint.io/{id}/files/Upload" \
    -H 'accept: application/json' \
    -H "X-API-KEY: {API_KEY}" \
    -F "file=@/path/to/file.gcode"

Success response

{
  "status": true,
  "message": null,
  "file": {
    "id": "f568ead4bbc2d881efc8a9a05f3bd585334cd8c662347ba2dfad7250176b0abd",
    "name": "file.gcode",
    "size": 13439
  }
}

Multiple parts for a single file larger than 100MB. The first filename is the filename of the entire file.

curl -X POST "https://files.simplyprint.io/{id}/files/Upload" \
    -H 'accept: application/json' \
    -H "X-API-KEY: {API_KEY}" \
    -F "file=@/path/to/part1.3mf"
    -F "totalSize=3352316"

Success response with continueToken

{
  "status": true,
  "message": null,
  "continueToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzM4NCJ9.eyJ0eXBlIjoiYWN0ao9uX3Rva2VuIiwiYWN0aW9uIjoiZmlsZV9jb250aW51ZV91cGxvYWQiLCJ1c2VyIjo2OTc2LCJjb21wYW55IjoyLCJkYXRhIja7ImJ1Y2tldEhhc2giOiI0MGQ2MzgwNmQwYWUxODhkNjc5YzY0NjA0M2RiYjUxMTc0NTViNTc1NjNlODEzZDc2MGRjMTJkMzVaYjdmY2Y0IiwidG90YWxTaXplIjoxNjc2MTU4NH0sImlhdCI6MTcyNTU2MjEzMywiZXhwIjoxNzI1NjQ4NTMzfQ.9qyNyx9A4Ox_6GrFSxXpxlpLcAKaSr8ln84X3yuWdhT_2O3L8-lGWaXAbQk9VvR-3pu1-a9p40amnt6Fghy49InjzCfNMRp-6-Ft_uMRf6PbmcCCrksvRxNP38ImoXy6"
}

Continue uploading the file (send next part with only the continueToken)

curl -X POST "https://files.simplyprint.io/{id}/files/Upload" \
    -H 'accept: application/json' \
    -H "X-API-KEY: {API_KEY}" \
    -F "continueToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzM4NCJ9.eyJ0eXBlIjoiYWN0ao9uX3Rva2VuIiwiYWN0aW9uIjoiZmlsZV9jb250aW51ZV91cGxvYWQiLCJ1c2VyIjo2OTc2LCJjb21wYW55IjoyLCJkYXRhIja7ImJ1Y2tldEhhc2giOiI0MGQ2MzgwNmQwYWUxODhkNjc5YzY0NjA0M2RiYjUxMTc0NTViNTc1NjNlODEzZDc2MGRjMTJkMzVaYjdmY2Y0IiwidG90YWxTaXplIjoxNjc2MTU4NH0sImlhdCI6MTcyNTU2MjEzMywiZXhwIjoxNzI1NjQ4NTMzfQ.9qyNyx9A4Ox_6GrFSxXpxlpLcAKaSr8ln84X3yuWdhT_2O3L8-lGWaXAbQk9VvR-3pu1-a9p40amnt6Fghy49InjzCfNMRp-6-Ft_uMRf6PbmcCCrksvRxNP38ImoXy6" \
    -F "file=@/path/to/part2.3mf"

Sucessful final response as we ensured to only send exactly the total size of the file.

{
  "status": true,
  "message": null,
  "file": {
    "id": "f568ead4bbc2d881efc8a9a05f3bd585334cd8c662347ba2dfad7250176b0abd",
    "name": "part1.3mf",
    "size": 3352316
  }
}

Request

Parameter Type Required Description
file file yes Uploaded file (Max 100mb)
continueToken string no Optional token you'll get if you need to continue the upload for files greater than 100MB.
totalSize integer no Send this if you want a continueToken, by providing the total size of the entire file you want to upload

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
continueToken string For every subsequent request that still has some pending size based on the total size this will be returned instead of the file.
file.* object Final file object after entire file has been uploaded
file.id string The API File ID you'll need to use other SimplyPrint APIs
file.name string Name used to reference the file
file.size int Total size of uploaded file
file.uploaded_at string ISO timestamp when the file was uploaded.
file.expires_at string ISO timestamp when the file will expire.

List existing API files

curl https://files.simplyprint.io/{id}/files/ListExisting \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "files": [
    {
      "id": "f568ead4bbc2d881efc8a9a05f3bd585334cd8c662347ba2dfad7250176b0abd",
      "name": "sample_file.gcode",
      "size": 13439,
      "uploaded": "2024-01-15T10:30:00Z",
      "expires": "2024-01-22T10:30:00Z"
    }
  ]
}

This endpoint returns a list of all existing API files that haven't expired for the current user and company.

Request

GET /{id}/files/ListExisting

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
files array Array of existing API file objects.
files[].id string The API File ID.
files[].name string Name of the file.
files[].size integer Size of the file in bytes.
files[].uploaded_at string ISO timestamp when the file was uploaded.
files[].expires_at string ISO timestamp when the file will expire.

Queue

Add item to queue

curl https://api.simplyprint.io/{id}/queue/AddItem \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "filesystem": "1a077dd6296417fe75555bf806b68089",
    "amount": 5,
    "group": 0
  }'

Success response

{
  "status": true,
  "message": null,
  "created_id": 1337
}

This endpoint adds a file to the queue. The file can either be a file on the filesystem or an uploaded stl/3mf/obj/gcode/gco/nc/npg file.

Note: if you want to specify which printer/printer type/printer model the print job should be assigned, you can edit the print job after it has been added to the queue.

Request

POST /{id}/queue/AddItem

Parameter Type Required Description
filesystem string no The filesystem id of the file to add to the queue.
amount integer no The amount of prints to add to the queue.
Default: 1
group integer no If you have Queue Groups - ID of the group the item should be added to.
Default: 0 - required if you have Queue Groups
fileId string no Optional File ID from API File - use this to add a file uploaded via the API.
tags object no Tags to assign. Only send nozzle body, material body or custom body, without type, id or edited
for_printers array no An array of printer ids to assign the queue item to.
for_models array no An array of printer model ids to assign the queue item to.
for_groups array no An array of group ids to assign the queue item to.
custom_fields array no An array with custom fields to assign to the queue item. Each custom field consists of {customFieldId: string, value: <value>} where the <value> is a Custom Field Submission Value.
position string no Where in the group to insert. Accepts alphanumeric sort keys used by the panel (e.g. "top", "bottom").

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
created_id integer The id of the created queue item

Get next queue item

curl https://api.simplyprint.io/{id}/queue/GetNextItems?pid=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "settings": {
      "filament": false,
      "filamentTemps": false,
      "fit": true,
      "gcodeAnalysis": false,
      "printerTemps": false
    }
  }'

Success response

{
  "status": true,
  "message": null,
  "queue": {
    "total": 1,
    "printers": [
      48013
    ],
    "matches": [
      {
        "id": 430379,
        "name": "UM3E_calicat.gcode",
        "sort_order": 8,
        "left": 0,
        "printed": 1,
        "group": 213,
        "match": true,
        "printable_match": true,
        "model_match": false,
        "errors": null,
        "issues": null,
        "mapper": null,
        "gcodeAnalysis": {
          "v": 12,
          "printArea": {
            "maxX": 149.25,
            "maxY": 149.23,
            "maxZ": 37,
            "minX": 113.95,
            "minY": 106.77,
            "minZ": 0.2
          },
          "movement": {
            "eRelative": 0,
            "mRelative": 1
          },
          "temps": {
            "bed": 60,
            "tool": {
              "T0": 205
            },
            "maxTool": 205
          },
          "modelSize": {
            "x": 35.3,
            "y": 42.46,
            "z": 34.6
          },
          "materialData": null,
          "slicer": "Cura",
          "estimate": 2550,
          "filament": [
            997
          ],
          "nozzleSize": 0.4,
          "nozzles": [
            {
              "size": 0.4
            }
          ],
          "bedType": null,
          "gcodeFlavor": "Griffin",
          "layerHeight": null,
          "firstLayerHeight": null,
          "totalLayers": 175,
          "slicerVersion": null,
          "minDeltaRadius": 202.91,
          "forPrinterModel": null,
          "objects": null
        },
        "custom_fields": [],
        "cost": {
          "estimate": false,
          "currency": "USD",
          "total_cost": 1.21,
          "used_fallback_cost": true,
          "lines": [
            {
              "id": 1,
              "cost": 0.45,
              "label": "Material usage (account default)",
              "material": {
                "gram": 2.97,
                "extruder": 0,
                "fromPercent": null,
                "toPercent": null,
                "isEstimate": false,
                "usedFallbackCost": true
              }
            },
            {
              "id": 2,
              "cost": null,
              "label": "Material markup"
            }
          ]
        },
        "printer": 48013
      }
    ],
    "groups": [
      {
        "id": 213,
        "name": "Workshop A",
        "virtual": false,
        "extensions": null,
        "sort_order": 0,
        "items_count": 8,
        "for": {
          "printers": null,
          "models": null,
          "groups": null
        },
        "visibility": {
          "user_ranks": null
        },
        "approval": {
          "requires_approval": null,
          "required_ranks": [
            493,
            562
          ],
          "exempt_ranks": null
        }
      },
      {
        "id": 1774,
        "name": "John Doe",
        "virtual": false,
        "extensions": null,
        "sort_order": 1,
        "items_count": 0,
        "for": {
          "printers": [
            40131,
            43492
          ],
          "models": null,
          "groups": null
        },
        "visibility": {
          "user_ranks": null
        },
        "approval": {
          "requires_approval": null,
          "required_ranks": null,
          "exempt_ranks": null
        }
      }
    ]
  }
}

Failed response (Could not find any items that match the specified conditions)

{
  "status": true,
  "message": null,
  "queue": {
    "total": 15,
    "printers": [
      385
    ],
    "matches": [
      {
        "printer": 385,
        "match": false,
        "issues": [
          "size",
          "temps"
        ],
        "missed": 4
      }
    ]
  }
}

This endpoint gets the next item in the queue for the specified printer. The next item is the item that has the highest priority. The result will have skipped all items that do not meet the specified conditions.

Request

POST /{id}/queue/GetNextItems

Query parameters

Parameter Type Required Description
pid integer[] yes Comma separated list of printer ids to get the next items for.
deselects integer[] no Comma separated list of queue item ids to exclude from matching (e.g. items already chosen).

Request body

Parameter Type Required Description
settings object no Conditions that must be met for the next item.
settings.filament boolean no Must have enough filament.
Default: true
settings.filamentTemps boolean no Printer's filament temperature must match filament temperature of file.
Default: true
settings.fit boolean no Print must fit printer's bed.
Default: true
settings.gcodeAnalysis boolean no Must have gcode analysis.
Default: true
settings.printerTemps boolean no File must have a max temperature that is lower than the printer's max temperature.
Default: true
settings.tags boolean no Printer must match possible queue item tags (nozzle size, material data & custom tags).
Default: true
settings.nozzleSize boolean no Printer's loaded nozzle size must match the file's required nozzle size.
Default: true
settings.colorMatchLevel integer no How strict the material color match must be (0 disables, higher values require closer matches). Supersedes settings.materialColor.
sorting object no Sort order for candidate items, shaped like PrintQueueSort.
filters object[] no Additional filters applied per candidate, each shaped like PrintQueueFilter.
skippedQueueItems integer[] no Queue item ids to skip over when selecting the next item.
specificQueueGroups integer[] no Limit matching to only these queue group ids.
queueGroupsOrder integer[] no Override the queue group iteration order (by group id).

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
queue object The queue object.
queue.total integer The total amount of items in the queue.
queue.printers integer[] The printer ids that were requested.
queue.matches array The next items for each printer.
queue.matches[].id integer The id of the next item. Only present if match is true.
queue.matches[].index integer The index of the item in the queue. Only present if match is true.
queue.matches[].printer integer The id of the printer that the item is for.
queue.matches[].match boolean True if a match was found.
queue.matches[].issues string[] The issues that are present in the item. Can also have values if an item was matched but would have been catched by other settings.
queue.matches[].missed integer The amount of items that were skipped.
queue.matches[].name string The name of the item. Only present if match is true.
queue.matches[].printed integer The amount of completed prints of this item (from print queue). Only present if match is true.
queue.matches[].left integer The amount of prints left (from print queue). Only present if match is true.

Inspect printer

Required permissions
print_queue
curl https://api.simplyprint.io/{id}/queue/InspectPrinter?p=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "inspector": {
    "matches": [
      {
        "id": 430379,
        "filename": "UM3E_calicat.gcode",
        "note": null,
        "model": false,
        "printable": true,
        "type": "printable",
        "zipPrintable": false,
        "zipNoModel": false,
        "left": 1,
        "printed": 0,
        "filesystem_id": "40dc8db415fb454492e6796cbc96d4f7",
        "for": {
          "printers": null,
          "models": null,
          "groups": null
        },
        "tags": {
          "nozzleData": [
            {
              "size": 0.4,
              "i": 0,
              "nozzleIndex": 0
            }
          ]
        },
        "group": 213,
        "analysis": {
          "v": 12,
          "printArea": {
            "maxX": 149.25,
            "maxY": 149.23,
            "maxZ": 37,
            "minX": 113.95,
            "minY": 106.77,
            "minZ": 0.2
          },
          "movement": {
            "eRelative": 0,
            "mRelative": 1
          },
          "temps": {
            "bed": 60,
            "tool": {
              "T0": 205
            },
            "maxTool": 205
          },
          "modelSize": {
            "x": 35.3,
            "y": 42.46,
            "z": 34.6
          },
          "materialData": null,
          "slicer": "Cura",
          "estimate": 2550,
          "filament": [
            997
          ],
          "nozzleSize": 0.4,
          "nozzles": [
            {
              "size": 0.4
            }
          ],
          "bedType": null,
          "gcodeFlavor": "Griffin",
          "layerHeight": null,
          "firstLayerHeight": null,
          "totalLayers": 175,
          "slicerVersion": null,
          "minDeltaRadius": 202.91,
          "forPrinterModel": null,
          "objects": null
        },
        "added": "2026-04-13T16:32:44+00:00",
        "size": 0,
        "index": null,
        "cost": {
          "estimate": false,
          "currency": "USD",
          "total_cost": 1.21,
          "used_fallback_cost": true,
          "lines": [
            {
              "id": 1,
              "cost": 0.45,
              "label": "Material usage (account default)",
              "material": {
                "gram": 2.97,
                "extruder": 0,
                "fromPercent": null,
                "toPercent": null,
                "isEstimate": false,
                "usedFallbackCost": true
              }
            },
            {
              "id": 2,
              "cost": null,
              "label": "Material markup"
            }
          ]
        },
        "sort_order": 7,
        "user": "Test Email",
        "user_id": 78013,
        "custom_fields": [],
        "approval": {
          "status": "approved",
          "approved_by": 43343,
          "approved_by_name": "Frida Rosenaa",
          "approved_at": "2026-04-13T16:34:01+00:00"
        },
        "quota_warnings": {
          "over_quota": false,
          "insufficient_balance": false,
          "would_exceed": [],
          "details": []
        },
        "mapper": null,
        "match": true,
        "issues": []
      }
    ],
    "misses": [
      {
        "id": 430365,
        "filename": "farmloop_Cube.3mf",
        "note": null,
        "model": false,
        "printable": true,
        "type": "printable",
        "zipPrintable": true,
        "zipNoModel": true,
        "left": 7,
        "printed": 2,
        "filesystem_id": null,
        "for": {
          "printers": null,
          "models": null,
          "groups": null
        },
        "tags": {
          "nozzleData": [
            {
              "volumeType": "standard",
              "size": 0.4,
              "i": 0,
              "nozzleIndex": 0
            }
          ],
          "material": [
            {
              "type": 122941,
              "color": "Blue",
              "hex": "#2196F3",
              "ext": 4,
              "width": 1.75
            }
          ],
          "bedType": {
            "type": "bambu_textured_pei_plate"
          }
        },
        "group": 213,
        "analysis": {
          "v": 12,
          "printArea": {
            "maxX": 131.79,
            "maxY": 131.79,
            "maxZ": 83.98,
            "minX": 124.21,
            "minY": 124.21,
            "minZ": 0.2
          },
          "movement": {
            "eRelative": 1,
            "mRelative": 1
          },
          "temps": {
            "bed": 60,
            "tool": {
              "T4": 220
            },
            "maxTool": 220
          },
          "modelSize": {
            "x": 7.58,
            "y": 7.58,
            "z": 7.76
          },
          "materialData": [
            {},
            {}
          ],
          "slicer": "BambuStudio",
          "estimate": 504,
          "filament": [
            0,
            0
          ],
          "nozzleSize": 0.4,
          "nozzles": [
            {
              "size": 0.4,
              "type": "hardened_steel",
              "volumeType": "Standard"
            }
          ],
          "bedType": "Textured PEI Plate",
          "gcodeFlavor": "Marlin",
          "layerHeight": 0.08,
          "firstLayerHeight": null,
          "totalLayers": 98,
          "slicerVersion": "02.05.00.66",
          "minDeltaRadius": 186.34,
          "forPrinterModel": "Bambu Lab P2S",
          "objects": null
        },
        "added": "2026-03-24T20:08:46+00:00",
        "size": 45636,
        "index": null,
        "cost": {
          "estimate": false,
          "currency": "USD",
          "total_cost": 0.22,
          "used_fallback_cost": true,
          "lines": [
            {
              "id": 1,
              "cost": 0.06,
              "label": "Material usage (account default)",
              "material": {
                "gram": 0.39,
                "extruder": 4,
                "fromPercent": null,
                "toPercent": null,
                "isEstimate": false,
                "usedFallbackCost": true
              }
            },
            {
              "id": 2,
              "cost": null,
              "label": "Material markup"
            }
          ]
        },
        "sort_order": 0,
        "user": "John Doe ",
        "user_id": 1234,
        "custom_fields": [],
        "quota_warnings": {
          "over_quota": false,
          "insufficient_balance": false,
          "would_exceed": [],
          "details": []
        },
        "mapper": null,
        "match": false,
        "issues": [
          "printer_file_unsupported"
        ],
        "errors": [
          "Printer does not support this file type"
        ]
      },
      {
        "id": 430372,
        "filename": "Sphere.3mf",
        "note": null,
        "model": false,
        "printable": true,
        "type": "printable",
        "zipPrintable": true,
        "zipNoModel": true,
        "left": 9,
        "printed": 0,
        "filesystem_id": null,
        "for": {
          "printers": null,
          "models": [
            582
          ],
          "groups": null
        },
        "tags": {
          "nozzleData": [
            {
              "volumeType": "standard",
              "size": 0.4,
              "i": 1,
              "nozzleIndex": 1
            }
          ],
          "material": [
            {
              "type": 51822,
              "color": "Red",
              "hex": "#C12E1F",
              "nozzle": 1,
              "ext": 3,
              "width": 1.75,
              "spoolId": 78372
            }
          ],
          "bedType": {
            "type": "bambu_smooth_pei_plate"
          }
        },
        "group": 1838,
        "analysis": {
          "v": 12,
          "printArea": {
            "maxX": 184.78,
            "maxY": 169.79,
            "maxZ": 110,
            "minX": 165.23,
            "minY": 150.21,
            "minZ": 0.2
          },
          "movement": {
            "eRelative": 0,
            "mRelative": 0
          },
          "temps": {
            "bed": 55,
            "tool": {
              "T4": 220
            },
            "maxTool": 220
          },
          "modelSize": {
            "x": 19.55,
            "y": 19.58,
            "z": 19.8
          },
          "materialData": [
            {},
            {
              "nozzle": 1
            }
          ],
          "slicer": "BambuStudio",
          "estimate": 759,
          "filament": [
            0,
            0
          ],
          "nozzleSize": 0.4,
          "nozzles": [
            {
              "size": 0.4,
              "type": "hardened_steel",
              "volumeType": "Standard"
            },
            {
              "size": 0.4,
              "type": "hardened_steel",
              "volumeType": "Standard"
            }
          ],
          "bedType": "High Temp Plate",
          "gcodeFlavor": "Marlin",
          "layerHeight": 0.12,
          "firstLayerHeight": null,
          "totalLayers": 166,
          "slicerVersion": "02.05.02.51",
          "minDeltaRadius": 246.81,
          "forPrinterModel": "Bambu Lab H2D",
          "objects": null
        },
        "added": "2026-04-11T12:05:41+00:00",
        "size": 312308,
        "index": null,
        "cost": {
          "estimate": true,
          "currency": "USD",
          "total_cost": 0.55,
          "used_fallback_cost": true,
          "lines": [
            {
              "id": 1,
              "cost": 0.32,
              "label": "Material usage (account default)",
              "material": {
                "gram": 2.11,
                "extruder": 4,
                "fromPercent": null,
                "toPercent": null,
                "isEstimate": true,
                "usedFallbackCost": true
              }
            },
            {
              "id": 2,
              "cost": null,
              "label": "Material markup"
            }
          ]
        },
        "sort_order": 0,
        "user": "John Doe ",
        "user_id": 1234,
        "custom_fields": [],
        "quota_warnings": {
          "over_quota": false,
          "insufficient_balance": false,
          "would_exceed": [],
          "details": []
        },
        "mapper": null,
        "match": false,
        "issues": [
          "not_assigned_model"
        ],
        "errors": [
          "Item is not for this printer model"
        ]
      }
    ],
    "groups": [
      {
        "id": 213,
        "name": "Workshop A",
        "virtual": false,
        "extensions": null,
        "sort_order": 0,
        "items_count": 8,
        "for": {
          "printers": null,
          "models": null,
          "groups": null
        },
        "visibility": {
          "user_ranks": null
        },
        "approval": {
          "requires_approval": null,
          "required_ranks": [
            493,
            562
          ],
          "exempt_ranks": null
        }
      },
      {
        "id": 1838,
        "name": "Workshop A",
        "virtual": false,
        "extensions": null,
        "sort_order": 2,
        "items_count": 1,
        "for": {
          "printers": null,
          "models": null,
          "groups": null
        },
        "visibility": {
          "user_ranks": null
        },
        "approval": {
          "requires_approval": null,
          "required_ranks": null,
          "exempt_ranks": null
        }
      }
    ],
    "issues": {
      "printer_file_unsupported": 1,
      "not_assigned_model": 6,
      "not_assigned_printer": 1
    },
    "criteria": {
      "gcodeAnalysis": false,
      "fit": true,
      "bedType": true,
      "printerTemps": false,
      "filament": true,
      "filamentTemps": true,
      "tags": true,
      "nozzleSize": true,
      "nozzleType": false,
      "nozzleVolume": false,
      "colorMatchLevel": 5,
      "materialType": false,
      "materialTypeStrict": true
    },
    "other_criteria": {
      "gcodeAnalysis": false,
      "fit": true,
      "bedType": true,
      "printerTemps": false,
      "filament": true,
      "filamentTemps": true,
      "tags": true,
      "nozzleSize": true,
      "nozzleType": false,
      "nozzleVolume": false,
      "colorMatchLevel": 5,
      "materialType": false,
      "materialTypeStrict": true
    },
    "mode": "queue"
  }
}

Returns the queue items the given printer could pull next, split into matches (items that fit the printer) and misses (items in range that failed one or more checks like filament type, nozzle size, or bed fit). Use this to diagnose why a specific printer is idle when the queue is not empty.

Request

GET /{id}/queue/InspectPrinter

Parameter Type Required Description
p integer yes Printer id to inspect.
mode string no Restrict the inspection context. Accepted values: autoprint.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
inspector.matches array Queue items that match the printer. Shape matches queue items elsewhere.
inspector.misses array Queue items considered but rejected, each annotated with the failing conditions.

Get queue item

curl https://api.simplyprint.io/{id}/queue/GetItem?id=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "item": {
    "id": 430372,
    "filename": "Sphere.3mf",
    "note": null,
    "model": false,
    "printable": true,
    "type": "printable",
    "zipPrintable": true,
    "zipNoModel": true,
    "left": 9,
    "printed": 0,
    "filesystem_id": null,
    "for": {
      "printers": null,
      "models": [
        582
      ],
      "groups": null
    },
    "tags": {
      "nozzleData": [
        {
          "volumeType": "standard",
          "size": 0.4,
          "i": 1,
          "nozzleIndex": 1
        }
      ],
      "material": [
        {
          "type": 51822,
          "color": "Red",
          "hex": "#C12E1F",
          "nozzle": 1,
          "ext": 3,
          "width": 1.75,
          "spoolId": 78372
        }
      ],
      "bedType": {
        "type": "bambu_smooth_pei_plate"
      }
    },
    "group": 1838,
    "analysis": {
      "v": 12,
      "printArea": {
        "maxX": 184.78,
        "maxY": 169.79,
        "maxZ": 110,
        "minX": 165.23,
        "minY": 150.21,
        "minZ": 0.2
      },
      "movement": {
        "eRelative": 0,
        "mRelative": 0
      },
      "temps": {
        "bed": 55,
        "tool": {
          "T4": 220
        },
        "maxTool": 220
      },
      "modelSize": {
        "x": 19.55,
        "y": 19.58,
        "z": 19.8
      },
      "materialData": [
        {},
        {
          "nozzle": 1
        }
      ],
      "slicer": "BambuStudio",
      "estimate": 759,
      "filament": [
        0,
        0
      ],
      "nozzleSize": 0.4,
      "nozzles": [
        {
          "size": 0.4,
          "type": "hardened_steel",
          "volumeType": "Standard"
        },
        {
          "size": 0.4,
          "type": "hardened_steel",
          "volumeType": "Standard"
        }
      ],
      "bedType": "High Temp Plate",
      "gcodeFlavor": "Marlin",
      "layerHeight": 0.12,
      "firstLayerHeight": null,
      "totalLayers": 166,
      "slicerVersion": "02.05.02.51",
      "minDeltaRadius": 246.81,
      "forPrinterModel": "Bambu Lab H2D",
      "objects": null
    },
    "added": "2026-04-11T12:05:41+00:00",
    "size": 312308,
    "index": null,
    "cost": {
      "estimate": true,
      "currency": "USD",
      "total_cost": 0.55,
      "used_fallback_cost": true,
      "lines": [
        {
          "id": 1,
          "cost": 0.32,
          "label": "Material usage (account default)",
          "material": {
            "gram": 2.11,
            "extruder": 4,
            "fromPercent": null,
            "toPercent": null,
            "isEstimate": true,
            "usedFallbackCost": true
          }
        },
        {
          "id": 2,
          "cost": null,
          "label": "Material markup"
        }
      ]
    },
    "sort_order": 0,
    "user": "John Doe",
    "user_id": 1234,
    "custom_fields": [],
    "quota_warnings": {
      "over_quota": false,
      "insufficient_balance": false,
      "would_exceed": [],
      "details": []
    }
  }
}
Required permissions
print_queue

This endpoint returns the queue item with the specified id.

Request

GET /{id}/queue/GetItem

Parameter Type Required Description
id integer yes The queue item id to get details for.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
item object The queue item object.

Get queue items

curl https://api.simplyprint.io/{id}/queue/GetItems?pid=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "queue": [
    {
      "id": 430365,
      "filename": "farmloop_Cube.3mf",
      "note": null,
      "model": false,
      "printable": true,
      "type": "printable",
      "zipPrintable": true,
      "zipNoModel": true,
      "left": 7,
      "printed": 2,
      "filesystem_id": null,
      "for": {
        "printers": null,
        "models": null,
        "groups": null
      },
      "tags": {
        "nozzleData": [
          {
            "volumeType": "standard",
            "size": 0.4,
            "i": 0,
            "nozzleIndex": 0
          }
        ],
        "material": [
          {
            "type": 122941,
            "color": "Blue",
            "hex": "#2196F3",
            "ext": 4,
            "width": 1.75
          }
        ],
        "bedType": {
          "type": "bambu_textured_pei_plate"
        }
      },
      "group": 213,
      "analysis": {
        "v": 12,
        "printArea": {
          "maxX": 131.79,
          "maxY": 131.79,
          "maxZ": 83.98,
          "minX": 124.21,
          "minY": 124.21,
          "minZ": 0.2
        },
        "movement": {
          "eRelative": 1,
          "mRelative": 1
        },
        "temps": {
          "bed": 60,
          "tool": {
            "T4": 220
          },
          "maxTool": 220
        },
        "modelSize": {
          "x": 7.58,
          "y": 7.58,
          "z": 7.76
        },
        "materialData": [
          {},
          {}
        ],
        "slicer": "BambuStudio",
        "estimate": 504,
        "filament": [
          0,
          0
        ],
        "nozzleSize": 0.4,
        "nozzles": [
          {
            "size": 0.4,
            "type": "hardened_steel",
            "volumeType": "Standard"
          }
        ],
        "bedType": "Textured PEI Plate",
        "gcodeFlavor": "Marlin",
        "layerHeight": 0.08,
        "firstLayerHeight": null,
        "totalLayers": 98,
        "slicerVersion": "02.05.00.66",
        "minDeltaRadius": 186.34,
        "forPrinterModel": "Bambu Lab P2S",
        "objects": null
      },
      "added": "2026-03-24T20:08:46+00:00",
      "size": 45636,
      "index": 0,
      "cost": {
        "estimate": false,
        "currency": "USD",
        "total_cost": 0.22,
        "used_fallback_cost": true,
        "lines": [
          {
            "id": 1,
            "cost": 0.06,
            "label": "Material usage (account default)",
            "material": {
              "gram": 0.39,
              "extruder": 4,
              "fromPercent": null,
              "toPercent": null,
              "isEstimate": false,
              "usedFallbackCost": true
            }
          },
          {
            "id": 2,
            "cost": null,
            "label": "Material markup"
          }
        ]
      },
      "sort_order": 0,
      "user": "John Doe ",
      "user_id": 1234,
      "custom_fields": [],
      "quota_warnings": {
        "over_quota": false,
        "insufficient_balance": false,
        "would_exceed": [],
        "details": []
      }
    },
    {
      "id": 430372,
      "filename": "Sphere.3mf",
      "note": null,
      "model": false,
      "printable": true,
      "type": "printable",
      "zipPrintable": true,
      "zipNoModel": true,
      "left": 9,
      "printed": 0,
      "filesystem_id": null,
      "for": {
        "printers": null,
        "models": [
          582
        ],
        "groups": null
      },
      "tags": {
        "nozzleData": [
          {
            "volumeType": "standard",
            "size": 0.4,
            "i": 1,
            "nozzleIndex": 1
          }
        ],
        "material": [
          {
            "type": 51822,
            "color": "Red",
            "hex": "#C12E1F",
            "nozzle": 1,
            "ext": 3,
            "width": 1.75,
            "spoolId": 78372
          }
        ],
        "bedType": {
          "type": "bambu_smooth_pei_plate"
        }
      },
      "group": 1838,
      "analysis": {
        "v": 12,
        "printArea": {
          "maxX": 184.78,
          "maxY": 169.79,
          "maxZ": 110,
          "minX": 165.23,
          "minY": 150.21,
          "minZ": 0.2
        },
        "movement": {
          "eRelative": 0,
          "mRelative": 0
        },
        "temps": {
          "bed": 55,
          "tool": {
            "T4": 220
          },
          "maxTool": 220
        },
        "modelSize": {
          "x": 19.55,
          "y": 19.58,
          "z": 19.8
        },
        "materialData": [
          {},
          {
            "nozzle": 1
          }
        ],
        "slicer": "BambuStudio",
        "estimate": 759,
        "filament": [
          0,
          0
        ],
        "nozzleSize": 0.4,
        "nozzles": [
          {
            "size": 0.4,
            "type": "hardened_steel",
            "volumeType": "Standard"
          },
          {
            "size": 0.4,
            "type": "hardened_steel",
            "volumeType": "Standard"
          }
        ],
        "bedType": "High Temp Plate",
        "gcodeFlavor": "Marlin",
        "layerHeight": 0.12,
        "firstLayerHeight": null,
        "totalLayers": 166,
        "slicerVersion": "02.05.02.51",
        "minDeltaRadius": 246.81,
        "forPrinterModel": "Bambu Lab H2D",
        "objects": null
      },
      "added": "2026-04-11T12:05:41+00:00",
      "size": 312308,
      "index": 1,
      "cost": {
        "estimate": true,
        "currency": "USD",
        "total_cost": 0.55,
        "used_fallback_cost": true,
        "lines": [
          {
            "id": 1,
            "cost": 0.32,
            "label": "Material usage (account default)",
            "material": {
              "gram": 2.11,
              "extruder": 4,
              "fromPercent": null,
              "toPercent": null,
              "isEstimate": true,
              "usedFallbackCost": true
            }
          },
          {
            "id": 2,
            "cost": null,
            "label": "Material markup"
          }
        ]
      },
      "sort_order": 0,
      "user": "John Doe ",
      "user_id": 1234,
      "custom_fields": [],
      "quota_warnings": {
        "over_quota": false,
        "insufficient_balance": false,
        "would_exceed": [],
        "details": []
      }
    }
  ],
  "users": true,
  "printers_count": 61,
  "delete_all": true,
  "custom_fields": null,
  "queue_approval_enabled": true
}
Required permissions
print_queue

This endpoint returns the queue for the specified or all printers.

Request

GET /{id}/queue/GetItems

Parameter Type Required Description
p integer no The printer id to get the queue for. If not specified, the queue for all printers will be returned.
pf integer no A printer filter id (printer id) to restrict the queue view to. Similar to p but used by the panel to filter by "for printer" in addition to the primary selection.
groups boolean no Attaches a list of print queue groups to the response. Note: this argument does not take a value.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
queue object The queue object.
queue.fits boolean Whether any items in the queue can be printed on the printer. (due to space, temperature)
queue.items array An array of queue item objects.
queue.items[].id integer The queue item id.
queue.items[].index integer The queue item index.
queue.items[].filename string The queue item filename.
queue.items[].note string/null Optional note text.
queue.items[].model boolean True if the queue item is a model.
queue.items[].printable boolean True if the queue is printable.
queue.items[].left integer The amount of prints left to print.
queue.items[].printed integer The amount of prints that have been printed.
queue.items[].filesystem_id string/null File id if print is from SimplyPrint filesystem.
queue.items[].group integer Possible ID of Queue Group.
queue.items[].for object For which printers, models and groups this queue item is for.
queue.items[].for.printers array An array of printer ids.
queue.items[].for.models array An array of printer model ids.
queue.items[].for.groups array An array of group ids.
queue.items[].analysis object The analysis object.
queue.items[].analysis.slicer string The slicer used to slice the file.
queue.items[].analysis.filament array An array of filament lengths.
queue.items[].analysis.estimate integer The estimated print time in seconds.
queue.items[].analysis.movement object The movement object.
queue.items[].analysis.temps object The temperatures object.
queue.items[].analysis.temps.tool object Temperature for each tool (extruder).
queue.items[].analysis.temps.bed integer Temperature for the bed.
queue.items[].analysis.modelSize object The model size object. Represented as x, y and z values in millimeters.
queue.items[].analysis.printArea object The print area object. Represented as maxX, minX, maxY, minY, maxZ and minZ values in millimeters.
queue.items[].analysis.minDeltaRadius float Minimum radius for delta printers.
queue.items[].analysis.v integer The analysis version.
queue.items[].user string The user name of who added the queue item.
queue.items[].user_id integer The user id of who added the queue item.
queue.items[].tags object/null Tags for queue item; custom tags, static material data & nozzle size
queue.done_items array If groups GET is set, an array of done queue items, or ones where the last remaining item is being printed includes all the same fields as queue items, with a few extra;.
queue.done_items[].... Fields inherited from regular queue items.
queue.done_items[].size integer Byte-size used by this item - 0 if the file is from the filesystem.
queue.done_items[].ongoing boolean If the item is currently ongoing.
queue.done_items[].done UTC date/null UTC date that the item was finished.
queue.done_items[].expires UTC date/null UTC date that the item expires and is removed from the platform.
groups array If groups GET is set, an array of print queue groups.
groups[].id integer The group id.
groups[].name string The group name.
groups[].virtual boolean Whether the group is a virtual queue group.
groups[].extensions array/null An array of file extensions that are allowed in the group.
groups[].sort_order integer The sort index of the group.

Update queue item

curl https://api.simplyprint.io/{id}/queue/UpdateItem?job=1234 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "for_groups": [
      1234
    ],
    "for_models": [
      1234
    ],
    "for_printers": [
      1234
    ]
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
print_queue

This endpoint updates the queue item with the specified id.

Request

POST /{id}/queue/UpdateItem

Query parameters

Parameter Type Required Description
job integer yes The queue item id to update.

Request body

Parameter Type Required Description
for_groups array no An array of group ids to assign the queue item to.
for_models array no An array of printer model ids to assign the queue item to.
for_printers array no An array of printer ids to assign the queue item to.
amount integer no The new total amount to print.
printed integer no Override the amount of prints already completed for this item.
note string no Free-text note (max 255 chars). Pass null to clear the note.
time integer no Override the estimated print time (seconds).
material_usage number no Override the material usage (grams).

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Delete queue item

curl 'https://api.simplyprint.io/{id}/queue/DeleteItem?job=1234' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}
Required permissions
print_queue

This endpoint deletes the queue item with the specified id.

Request

GET /{id}/queue/DeleteItem

Pass one of job or jobs.

Parameter Type Required Description
job integer yes (or jobs) The queue item id to delete.
jobs integer[] yes (or job) Comma separated list of queue item ids to delete in a single call.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Change queue order

curl https://api.simplyprint.io/{id}/queue/SetOrder?queue_item=1234&to=1 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "success": true,
  "message": null
}
Required permissions
print_queue
reorder_queue
queue_see_others

This endpoint changes the order of the queue items by moving the queue item with the specified id.

Request

GET /{id}/queue/SetOrder

Parameter Type Required Description
queue_item integer yes The queue item id to move.
from integer yes Deprecated. Must be a positive integer; the server no longer uses the value. Kept for backwards compatibility.
to integer yes The new position of the queue item.

Response

Parameter Type Description
success boolean True if the request was successful.
message string Success message or error message if success is false.

Move queue items

curl 'https://api.simplyprint.io/{id}/queue/MoveItem?jobs=1234,1235&moveTo=42' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}
Required permissions
print_queue
queue_move_items
Required OAuth scopes
queue.write

Moves one or more queue items into a different queue group. Use this when you want to relocate items across groups (e.g. moving from an "Incoming" group to a "Ready to print" group). To reorder within a group, use Change queue order instead.

Request

GET /{id}/queue/MoveItem

Parameter Type Required Description
jobs integer[] yes Comma separated list of queue item ids to move.
moveTo integer yes The id of the queue group to move the items into.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Empty queue

curl https://api.simplyprint.io/{id}/queue/EmptyQueue \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"group": 213}'

Success response

{
  "status": true,
  "message": null
}
Required Permissions
print_queue
print_queue_remove_all

This endpoint empties the queue.

Request

POST /{id}/queue/EmptyQueue

Parameter Type Required Description
group integer no ID of Queue Group to empty.
Default: 0 - required if you have Queue Groups
done_items boolean no If true, clear the "done items" (completed) history instead of the active queue.
Default: false

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Revive item

Required permissions
print_queue
queue_revive_done_items
curl https://api.simplyprint.io/{id}/queue/ReviveItem?job=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \

Success response

{
  "status": true,
  "message": null
}

POST /{id}/queue/ReviveItem

Request Parameters

Parameter Type Description
job integer The ID of the job to revive.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Get groups

Required permissions
print_queue
curl https://api.simplyprint.io/{id}/queue/groups/Get \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "list": [
    {
      "id": 213,
      "name": "Workshop A",
      "virtual": false,
      "extensions": null,
      "sort_order": 0,
      "items_count": 8,
      "for": {
        "printers": null,
        "models": null,
        "groups": null
      },
      "visibility": {
        "user_ranks": null
      },
      "approval": {
        "requires_approval": null,
        "required_ranks": [
          493,
          562
        ],
        "exempt_ranks": null,
        "user_needs_approval": false
      }
    },
    {
      "id": 1774,
      "name": "John Doe",
      "virtual": false,
      "extensions": null,
      "sort_order": 1,
      "items_count": 0,
      "for": {
        "printers": [
          40131,
          43492
        ],
        "models": null,
        "groups": null
      },
      "visibility": {
        "user_ranks": null
      },
      "approval": {
        "requires_approval": null,
        "required_ranks": null,
        "exempt_ranks": null,
        "user_needs_approval": false
      }
    }
  ],
  "groups_exist": true,
  "total_queue_count": 9,
  "queue_approval_enabled": true,
  "queue_approval_show_approver_name": true
}

GET /{id}/queue/groups/Get

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
list array Array of print queue groups.
list[].id integer Unique identifier for the group.
list[].name string Name of the group.
list[].virtual boolean Whether the group is a virtual queue group.
list[].extensions array An array of file extensions that are allowed in the group. (without punctuation)
list[].sort_order integer The sort order of the group.
list[].for object For which printers, models and groups this queue item is for.

Save group

Required permissions
print_queue
queue_groups
curl https://api.simplyprint.io/{id}/queue/groups/Save \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "id": 123,
    "name": "New Queue Group",
    "accepted_extensions": ["gcode", "bgcode"],
    "virtual_only": false,
    "for_printers": "1,2,3",
    "for_models": "4,5,6",
    "for_groups": "7,8,9"
  }'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/queue/groups/Save

Request Body

Parameter Type Description
id integer The ID of the group to update (optional for creating a new group).
name string The name of the queue group.
accepted_extensions array List of accepted file extensions.
virtual_only boolean Whether the group is virtual only.
for_printers string Comma-separated list of printer IDs.
for_models string Comma-separated list of printer model IDs.
for_groups string Comma-separated list of printer group IDs.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Delete group

Required permissions
print_queue
queue_groups
curl https://api.simplyprint.io/{id}/queue/groups/Delete?id=123 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \

Success response

{
  "status": true,
  "message": null
}

POST /{id}/queue/groups/Delete

Request Parameters

Parameter Type Description
id integer The ID of the group to delete.

Request Body

Parameter Type Description
move_to integer The ID of the group to move items to. Defaults to any other group.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Set group order

Required permissions
queue_groups
reorder_queue
curl https://api.simplyprint.io/{id}/queue/groups/SetOrder?queue_group=123 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "from": 1,
    "to": 2
  }'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/queue/groups/SetOrder

Request Parameters

Parameter Type Description
queue_group integer The ID of the queue group.

Request Body

Parameter Type Description
to integer The new sorting order of the group.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Get pending approval items

Required permissions
print_queue
curl https://api.simplyprint.io/{id}/queue/approval/GetPendingItems \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "items": [],
  "total": 0,
  "page": 1,
  "per_page": 50
}

Lists queue items that are waiting for approval before they can print. Approval is an opt-in gate used on School accounts so that a teacher or manager reviews submissions before they reach a printer.

Request

GET /{id}/queue/approval/GetPendingItems

Parameter Type Required Description
status string no Filter by approval status. Omit to return all pending items.
page integer no 1-based page index for paginated results.
per_page integer no Items per page.
Default: 50, max: 100

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
items array Pending queue items awaiting approval.
total integer Total number of pending items across all pages.
page integer The page returned.
per_page integer Items per page.

Approve queue item

Required permissions
queue_approve
curl 'https://api.simplyprint.io/{id}/queue/approval/ApproveItem?job=1234' \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"comment": "Looks good, approved."}'

Success response

{
  "status": true,
  "message": null
}

Approves one or more pending queue items so they enter the active queue and become eligible for printing. Optionally attach a comment visible to the submitter.

Request

POST /{id}/queue/approval/ApproveItem

One of job or jobs is required.

Query parameters

Parameter Type Required Description
job integer yes (or jobs) A single queue item id to approve.
jobs integer[] yes (or job) Comma separated list of queue item ids to approve.

Request body

Parameter Type Required Description
comment string no Optional approval note (max 2000 chars). Stored as a comment on the item.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Deny queue item

Required permissions
queue_approve
curl 'https://api.simplyprint.io/{id}/queue/approval/DenyItem?job=1234' \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "comment": "Please rescale the part and resubmit.",
    "remove": false
  }'

Success response

{
  "status": true,
  "message": null
}

Denies one or more pending queue items. By default the item stays in the approval list with status denied so the submitter can revise and resubmit. Pass remove: true to delete the item entirely instead.

Request

POST /{id}/queue/approval/DenyItem

One of job or jobs is required.

Query parameters

Parameter Type Required Description
job integer yes (or jobs) A single queue item id to deny.
jobs integer[] yes (or job) Comma separated list of queue item ids to deny.

Request body

Parameter Type Required Description
comment string no Reason for denial (max 2000 chars). Posted as a comment the submitter can see.
remove boolean no If true, delete the item immediately. If false (default), keep it in the denied state so the submitter can request changes.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Send queue item back for revision

Required permissions
queue_approve
curl 'https://api.simplyprint.io/{id}/queue/approval/SendBack?job=1234' \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"comment": "Revoking approval - please update the slice settings."}'

Success response

{
  "status": true,
  "message": null
}

Revokes an already-approved queue item and sends it back to the submitter for revision. The item's approval status becomes revision and it is parked outside the active sort until it is resubmitted and re-approved.

Request

POST /{id}/queue/approval/SendBack

Query parameters

Parameter Type Required Description
job integer yes The queue item id to send back.

Request body

Parameter Type Required Description
comment string no Reason for revoking approval (max 2000 chars).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Resubmit queue item

Required permissions
print_queue
curl 'https://api.simplyprint.io/{id}/queue/approval/ResubmitItem?job=1234' \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"comment": "Rescaled model and re-sliced at 0.2mm layer height."}'

Success response

{
  "status": true,
  "message": null
}

Resubmits a denied or sent-back queue item back into the approval pipeline. The item's status returns to pending and reviewers see it again in Get pending approval items. Replacing the underlying file via this endpoint is not supported through the API; resubmit with an updated comment only.

Request

POST /{id}/queue/approval/ResubmitItem

Query parameters

Parameter Type Required Description
job integer yes The queue item id to resubmit.

Request body

Parameter Type Required Description
comment string no Note explaining what changed in the revision (max 2000 chars).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Get approval comments

Required permissions
print_queue
curl 'https://api.simplyprint.io/{id}/queue/approval/GetComments?item_id=1234' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "comments": []
}

Returns the reviewer/submitter comment thread attached to a queue item pending approval. Pass either item_id for an existing queue item or file_id for a file not yet enqueued.

Request

GET /{id}/queue/approval/GetComments

One of item_id or file_id is required.

Parameter Type Required Description
item_id integer yes (or file_id) Queue item to fetch comments for.
file_id string yes (or item_id) File id (for items not yet in the queue).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
comments array Chronological comment thread for the item.

Add approval comment

Required permissions
print_queue
curl https://api.simplyprint.io/{id}/queue/approval/AddComment \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "item_id": 1234,
    "type": "general",
    "comment": "Please switch to PETG for the flexible hinge."
  }'

Success response

{
  "status": true,
  "message": null,
  "comment": {
    "id": 143,
    "comment": "API docs capture test comment",
    "type": "general",
    "user": {
      "id": 1234,
      "name": "John Doe"
    },
    "attachments": null,
    "print_queue_item_id": 430379,
    "user_file_id": null,
    "created_at": "2026-04-20T09:37:26+00:00",
    "updated_at": "2026-04-20T09:37:26+00:00"
  }
}

Adds a comment to a queue item (via item_id) or an uploaded file that is not yet enqueued (via file_id). Comments are part of the approval thread and visible to both reviewers and the submitter. Either comment text, file_ids attachments, or both must be provided.

Request

POST /{id}/queue/approval/AddComment

One of item_id or file_id is required.

Parameter Type Required Description
item_id integer yes (or file_id) Queue item id to attach the comment to.
file_id string yes (or item_id) File id (for comments on files not yet enqueued).
comment string no Comment text (max 5000 chars). Required if no file_ids are attached.
type string no Comment type: general or feedback.
Default: general
file_ids integer[] no Ids of previously uploaded attachments (via Upload comment attachment) to associate with this comment.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
comment object The created comment.
comment.id integer Comment id - pass this to update / delete endpoints.
comment.comment string Comment text.
comment.type string general or feedback.
comment.user object Author of the comment ({id, name}).
comment.attachments array / null Attached files, if any.
comment.print_queue_item_id integer / null Attached queue item id (when posted via item_id).
comment.user_file_id string / null Attached file id (when posted via file_id).
comment.created_at string ISO 8601 creation timestamp.
comment.updated_at string ISO 8601 last-modified timestamp.

Update approval comment

Required permissions
print_queue
curl https://api.simplyprint.io/{id}/queue/approval/UpdateComment \
  -X POST \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {OAUTH_TOKEN}' \
  -d '{
    "id": 143,
    "comment": "Updated: please switch to PETG and add a 1mm chamfer."
  }'

Success response

{
  "status": true,
  "message": null
}

Updates the text of a comment you authored. Users can only edit their own comments.

Request

POST /{id}/queue/approval/UpdateComment

Parameter Type Required Description
id integer yes The comment id to update.
comment string yes New comment text (1 to 5000 chars).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Delete approval comment

Required permissions
print_queue
queue_delete_others_comments*

* queue_delete_others_comments is only required when deleting another user's comment. Users can always delete their own.

curl https://api.simplyprint.io/{id}/queue/approval/DeleteComment \
  -X POST \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {OAUTH_TOKEN}' \
  -d '{"id": 143}'

Success response

{
  "status": true,
  "message": null
}

Deletes a comment. Users can delete their own comments. Deleting someone else's comment requires the queue_delete_others_comments permission.

Request

POST /{id}/queue/approval/DeleteComment

Parameter Type Required Description
id integer yes The comment id to delete.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Upload comment attachment

Required permissions
print_queue
curl https://api.simplyprint.io/{id}/queue/approval/UploadCommentFile \
  -X POST \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer {OAUTH_TOKEN}' \
  -F 'file=@./annotated_part.png'

Success response

{
  "status": true,
  "message": null,
  "file": {
    "file_id": 987,
    "url": "https://cdn.simplyprint.io/path/to/file.png"
  }
}

Uploads an image or PDF attachment to be referenced by one or more approval comments. Pass the returned file.file_id in the file_ids array when calling Add approval comment.

Accepted file types: images (PNG, JPG, GIF, WebP, SVG) and PDF. Maximum size: 10 MB.

Request

POST /{id}/queue/approval/UploadCommentFile (multipart/form-data)

Parameter Type Required Description
file file yes The attachment to upload (image or PDF, <= 10MB).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
file object The uploaded file.
file.file_id integer Id of the uploaded attachment. Pass to file_ids when adding a comment.
file.url string Public CDN URL where the attachment is served.

Printer Groups

Get groups

curl https://api.simplyprint.io/{id}/groups/Get \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \

Success response

{
  "status": true,
  "message": null,
  "groups": [
    {
      "id": 1,
      "name": "Group 1"
    },
    {
      "id": 2,
      "name": "Group 2"
    }
  ]
}

GET /{id}/groups/Get

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
groups array Array of printer groups.
groups[].id integer Unique identifier for the group.
groups[].name string Name of the group.

Create group

curl https://api.simplyprint.io/{id}/groups/Create \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"name": "New Group Name"}'

Success response

{
  "status": true,
  "message": null,
  "id": 123
}

POST /{id}/groups/Create

Required permissions
printer_edit

Request Body

Parameter Type Description
name string The name of the new group.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
id integer Unique identifier for the new group.

Update group

curl https://api.simplyprint.io/{id}/groups/Update?group=123 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"name": "Updated Group Name"}'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/groups/Update

Required permissions
printer_edit

Request Parameters

Parameter Type Description
group integer The ID of the group to update.

Request Body

Parameter Type Description
name string The new name for the group.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Delete group

curl https://api.simplyprint.io/{id}/groups/Delete?group=123 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/groups/Delete

Required permissions
printer_edit

Request Parameters

Parameter Type Description
group integer The ID of the group to delete.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Arrange printers and groups

# Move multiple printers and groups in a single request
curl https://api.simplyprint.io/{id}/groups/ArrangeMultiple \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "group": [
      {"id": 123, "position": 1},
      {"id": 456, "position": 0}
    ],
    "printer": [
      {"id": 1234, "group": 123, "position": 0},
      {"id": 1235, "position": 2},
      {"id": 1236, "group": 456}
    ]
  }'

Success response

{
  "status": true,
  "message": null
}

You can arrange the ordering of printers in printer groups, or the order of groups themselves. This endpoint allows you to move multiple printers and groups in a single request:

  1. Set the position of one or more printer groups - Use the group array to change the sort order of groups
  2. Move printers between groups - Use printer[].group to transfer printers from one group to another
  3. Reorder printers within a group - Use printer[].position to set new positions (omit printer[].group to keep in current group, or combine both to move to a new group at a specific position)

POST /{id}/groups/ArrangeMultiple

Required permissions
printer_edit

Request Body

Parameter Type Required Description
group array no Array of groups to move.
group[].id integer yes The ID of the group to move.
group[].position integer yes The new position for the group (0-indexed).
printer array no Array of printers to move.
printer[].id integer yes The ID of the printer to move.
printer[].group integer no The new group to move the printer into. If omitted, reorders the printer within its current group.
printer[].position integer no The new position for the printer (0-indexed). If omitted when changing groups, printer is placed at end.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Arrange individual printer or group (deprecated)

# Move printer within a group or to another group
curl https://api.simplyprint.io/{id}/groups/Arrange?pid=1234&group=123 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"from": 1, "to": 2}'
# Move printer to different group (omit 'from' parameter)
curl https://api.simplyprint.io/{id}/groups/Arrange?pid=1234&group=456 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"from": null, "to": 2}'
# Change group sort position (omit 'pid' parameter)
curl https://api.simplyprint.io/{id}/groups/Arrange?group=123 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"from": 1, "to": 3}'

Success response

{
  "status": true,
  "message": null
}

This endpoint can arrange printers within groups, move printers between groups, and change group sort positions.

POST /{id}/groups/Arrange

Required permissions
printer_edit

Request Parameters

Parameter Type Required Description
pid integer no The ID of the printer to arrange. Omit to arrange groups instead.
group integer yes The target group ID. For printer moves, this is the destination group.

Request Body

Parameter Type Required Description
from integer/null yes Current position. Set to null when moving printer to a different group.
to integer yes New position in the target group or new group sort position.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Files

Add an API File to files

POST {id}/files/Upload?folder={folder}

Parameter Type Required Description
folder (GET) integer no Folder ID to get files for. Defaults to 0 (root folder)
fileId (POST) string yes File ID from API Files

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
id string User file ID of newly added file
curl -X POST https://api.simplyprint.io/{id}/files/Upload?folder=5290 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -F 'fileId=43aaad56548c959f655d0524027b726a7514493ec8436f4942f876bb07eab731'

Success Response

{
  "status": true,
  "message": null,
  "id": "6f7d79212f384c6b8eae2811c37d9338"
}

List Files and Folders

curl https://api.simplyprint.io/{id}/files/GetFiles?f=123&search=benchy \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "files": [
    {
      "id": "d82ab9e1cc3c20850d94d5cf539390c0",
      "name": "3DBenchy",
      "ext": "stl",
      "type": "model",
      "size": 11285384,
      "created": "December 23, 2022, 17:35",
      "createdint": 1671813336,
      "printData": {
        "printsDone": 0,
        "printsCancelled": 0,
        "printsFailed": 0,
        "timesSliced": 0
      },
      "user_id": 123,
      "thumbnail": 1,
      "folder": 0,
      "user": 123
    },
    {
      "id": "e82ab9e1cc3c20850d94d5cf539390c0",
      "name": "3DBenchy",
      "ext": "gcode",
      "type": "printable",
      "size": 1285384,
      "created": "December 23, 2022, 18:00",
      "createdint": 1671813330,
      "printData": {
        "printsDone": 10,
        "printsCancelled": 5,
        "printsFailed": 0,
        "timesSliced": 0
      },
      "user_id": 123,
      "thumbnail": 1,
      "folder": 0,
      "user": 123,
      "forPrinters": [
        // list of printers IDs selected for file; key not present if no printers are selected 
        1,
        2,
        3
      ],
      "tags": {
        "nozzle": 0.6,
        "material": [
          {
            "ext": 0,
            "type": 123,
            "color": "Green",
            "hex": "#4CAF50"
          }
        ],
        "custom": [
          1,
          2,
          3
        ]
      },
      "cost": {
        "estimate": false,
        "total_cost": 150,
        "lines": [
          {
            "id": 1,
            "label": "Material usage (account default)",
            "cost": 0.02
          },
          {
            "id": 2,
            "label": "Material markup",
            "cost": null
          },
          {
            "id": 3,
            "label": "Machine run time cost",
            "cost": null
          },
          {
            "id": 4,
            "label": "Energy cost",
            "cost": null
          },
          {
            "id": 5,
            "label": "Labor cost",
            "cost": 1000
          }
        ]
      }
    }
  ],
  "customFields": [
    {
      "id": "student_id",
      "value": {
        "string": "1234567890"
      }
    }
  ],
  "folders": [
    {
      "id": 5290,
      "name": "random_folder_called_benchy",
      "items": {
        "files": 0,
        "folders": 0
      },
      "created": "December 23, 2022",
      "createdInt": 1671814215,
      "parent_folder_id": 0,
      "depth": 0
    }
  ],
  "path": [
    [
      "Your search...",
      0
    ]
  ],
  "sort_type": "",
  "space": 10000000000,
  "space_used": 131446609
}

This endpoint returns a list of files and folders in a given folder. If no folder is specified, the root folder is used.

Request

GET /{id}/files/GetFiles

Parameter Type Required Description
f integer no Folder ID to get files for. Defaults to 0 (root folder)
search string no Search string to filter files by.
global_search boolean no If true, search all files in the account, not just the folder specified by f.
pid integer no For print cost calculation, if you want the files to use the material of a printer, request with the ID of the printer - don't include the pid argument otherwise

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
files array Array of file objects.
folders array Array of folder objects.
path array Array of arrays containing the path to the current folder.
sort_type string Sort type from user's settings.
space integer The total space available in bytes.
space_used integer The total space used in bytes.

Move File(s) to Folder

curl https://api.simplyprint.io/{id}/files/MoveFiles?files=d82ab9e1cc3c20850d94d5cf539390c0&folder=5290 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": "Moved 1 files"
}

This endpoint moves one or more files to a given folder.

Request

GET /{id}/files/MoveFiles

Parameter Type Required Description
files array yes Array of file IDs to move. Separate multiple IDs with a comma.
folder integer yes Folder ID to move files to.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Get Folder Details

curl https://api.simplyprint.io/{id}/files/GetFolder?id=5290 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "folder": {
    "id": 5290,
    "name": "org_folder_called_benchy",
    "org": true,
    "permissions": {
      "view": [
        112,
        151
      ],
      "upload": [
        112
      ],
      "modify": [
        112
      ]
    }
  }
}

This endpoint returns details about a given folder.

Request

GET /{id}/files/GetFolder

Parameter Type Required Description
id integer yes Folder ID to get details for.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
folder object Folder object.
folder.id integer Folder ID.
folder.name string Folder name.
folder.org boolean True if the folder is an organization folder.
Requires Print Farm plan
folder.permissions object/null Folder permissions.
folder.permissions.view array Array of group IDs that can view the folder.
folder.permissions.upload array Array of group IDs that can upload files to the folder.
folder.permissions.modify array Array of group IDs that can modify the folder.

Move Folder

curl https://api.simplyprint.io/{id}/files/MoveFolder?folder=5290&target=5291 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": "Moved folder 5298 to folder 5297"
}

This endpoint moves a folder to a given folder.

Please note that the root folder cannot be moved, but folders can be moved into the root folder by setting target=0. Also, folders cannot be moved into themselves.

Request

GET /{id}/files/MoveFolder

Parameter Type Required Description
folder integer yes Folder ID to move.
target integer yes Folder ID to move to.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Delete File(s)

curl https://api.simplyprint.io/{id}/files/DeleteFile?file=abc123,def456 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "deleted": 2
}

Partial failure response (some files deleted, some failed)

{
  "status": false,
  "message": "One or more files failed to be deleted",
  "errors": [
    "File abc123 doesn't exist or doesn't belong to you"
  ],
  "deleted": 1
}

Failure response: no file IDs specified

{
  "status": false,
  "message": "No file ID(s) specified"
}

Failure response: no matching files found

{
  "status": false,
  "message": "No file(s) with ID(s) exist"
}

This endpoint deletes one or more files. Each file ID must belong to the requesting user and be modifiable; if any file cannot be deleted (e.g., due to missing permission or nonexistence), the call fails with error details.

Request

GET /{id}/files/DeleteFile

Parameter Type Required Description
file string yes Comma-separated list of file IDs to delete.

Response

Parameter Type Description
status boolean True if the request succeeded (all specified deletions succeeded).
message string/null Error message if something went wrong.
deleted integer Number of files actually deleted.
errors string[] (Optional) Array of error strings explaining why specific file deletions failed.

Delete Folder(s)

curl https://api.simplyprint.io/{id}/files/DeleteFolder?folder=123,456 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "deleted": 2
}

Partial failure response (some folders deleted, some failed during removal)

{
  "status": false,
  "message": "One or more folders failed to be deleted",
  "deleted": 1,
  "errors": [
    "Failed to remove folder with ID 456: underlying exception message"
  ]
}

Failure response: no folder IDs specified

{
  "status": false,
  "message": "No file ID(s) specified"
}

Failure response: folder does not exist or not modifiable (either because it’s missing or the user lacks permission)

{
  "status": false,
  "message": "One or more folders do not exist"
}

This endpoint deletes one or more folders. All specified folder IDs must exist and be modifiable by the requesting user; if existence or permission validation fails up front, the request fails immediately. If some deletions fail during removal, those errors are returned while successful deletions are counted.

Request

GET /{id}/files/DeleteFolder

Parameter Type Required Description
folder string yes Comma-separated list of folder IDs to delete.

Response

Parameter Type Description
status boolean True if the request succeeded (all specified deletions succeeded).
message string/null null on full success; error message if something went wrong.
deleted integer Number of folders actually deleted.
errors string[] (Optional) Array of error strings explaining failures during deletion (partial failure).

Account

Create company groups

curl https://api.simplyprint.io/{id}/account/settings/groups/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "ranks": [
      {
        "title": "name of group",
        "description": "group description",
        "sort_order": 3,
        "permissions": {
          "view_news": true,
          "org_admin": true
        }
      }
    ]
  }'

Success response

{
  "status": true,
  "message": null,
  "data": [
    {
      "title": "name of group",
      "description": "group description",
      "company_id": 2,
      "company_type": 2,
      "sort_order": 3,
      "permissions": {
        "view_news": true,
        "org_admin": true,
        "panel_printing": true,
        "printer_restart": true,
        "printer_edit": true,
        "bed_leveling": true,
        "gcode_profiles": true,
        "printer_settings": true,
        "filament_settings": true,
        "change_filament": true,
        "create_filament": true,
        "see_filament_tab": true,
        "view_users": true,
        "change_user_rank": true,
        "manual_user_email_confirm": true,
        "invite_users": true,
        "delete_user": true,
        "org_user_registration_settings": true,
        "org_hub_settings": true,
        "org_rank_management": true,
        "org_view_statistics": true,
        "refill_quota": true,
        "custom_slicer_profiles": true,
        "org_profiles": true,
        "all_slicer_modes": true,
        "queue_remove_all": true,
        "org_api": true,
        "create_org_folder": true,
        "cancel_others": true,
        "see_who_printed": true,
        "max_print_size": [],
        "default_slicer_mode": 2
      },
      "id": 319
    }
  ]
}
Required permissions
org_rank_management

This endpoint creates a new group in the company.

Request

POST /{id}/account/settings/groups/Create

Parameter Type Required Description
ranks array yes Array of groups to create.
ranks[].title string yes The name of the group.
ranks[].description string no The description of the group.
ranks[].sort_order integer yes The sort index of the group.
ranks[].permissions object yes Object containing permissions for the group. Use permission strings from the Permissions table as keys with boolean values.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array Array of the created groups.

Update company groups

curl https://api.simplyprint.io/{id}/account/settings/groups/Update \
  -X POST \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "ranks": [
      {
        "id": 319,
        "title": "TITLE",
        "description": "DESCRIPTION",
        "permissions": {
          "view_news": true,
          "org_admin": true
        },
        "sort_order": 3
      }
    ]
  }'

Success repsonse

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 319,
      "title": "NAME",
      "description": "DESCRIPTION",
      "company_id": 2,
      "company_type": 2,
      "permissions": {
        "view_news": true,
        "org_admin": true,
        "panel_printing": true,
        "printer_restart": true,
        "printer_edit": true,
        "bed_leveling": true,
        "gcode_profiles": true,
        "printer_settings": true,
        "filament_settings": true,
        "change_filament": true,
        "create_filament": true,
        "see_filament_tab": true,
        "view_users": true,
        "change_user_rank": true,
        "manual_user_email_confirm": true,
        "invite_users": true,
        "delete_user": true,
        "org_user_registration_settings": true,
        "org_hub_settings": true,
        "org_rank_management": true,
        "org_view_statistics": true,
        "refill_quota": true,
        "custom_slicer_profiles": true,
        "org_profiles": true,
        "all_slicer_modes": true,
        "queue_remove_all": true,
        "org_api": true,
        "create_org_folder": true,
        "cancel_others": true,
        "see_who_printed": true,
      },
      "sort_order": 3,
      "created": "2023-01-03 14:35:28"
    }
  ]
}
Required permissions
org_rank_management

This endpoint updates the groups in the company.

Request

POST /{id}/account/settings/groups/Update

Parameter Type Required Description
ranks array yes Array of groups to update.
ranks[].id integer yes The id of the group to update.
ranks[].title string no The name of the group.
ranks[].description string no The description of the group.
ranks[].permissions object no Object containing permissions for the group. Use permission strings from the Permissions table as keys with boolean values.
ranks[].sort_order integer no The sort index of the group.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array Array of the updated groups.
data[].id integer The id of the group.
data[].title string The name of the group.
data[].description string The description of the group.
data[].company_id integer The id of the company.
data[].company_type integer The type of the company.
data[].permissions object Object containing permissions for the group. Use permission strings from the Permissions table as keys with boolean values.
data[].sort_order integer The sort order of the group.
data[].created string The date and time the group was created.

Get company groups

curl https://api.simplyprint.io/{id}/account/GetGroups \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "groups": [
    {
      "id": 112,
      "name": "Administrator"
    },
    {
      "id": 151,
      "name": "Manager"
    },
    {
      "id": 153,
      "name": "User"
    }
  ]
}
Required permissions
org_rank_management

This endpoint returns a list of groups that exist in the company.

Request

GET /{id}/account/GetGroups

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
groups array Array of group objects.
groups[].id integer Group ID.
groups[].name string Group name.
groups[].description string Group description.

Delete company group

curl https://api.simplyprint.io/{id}/account/settings/groups/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"id": 112, "replacementRankId": 151}'

Success response

{
  "status": true,
  "message": null
}
Required permissions
org_rank_management

Request

POST /{id}/account/settings/groups/Delete

Parameter Type Required Description
id integer yes The id of the group to delete.
replacementRankId integer maybe The id of the group to replace the deleted group with.
This is only required if the group has users.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Get statistics

curl https://api.simplyprint.io/{id}/account/GetStatistics \
  -X POST \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"users": [1234, 1235, 1945], "printers": [1234, 1235, 1945], "start_date": "1677629786", "end_date": "1677629786"}'

Success response

{
  "status": true,
  "message": null,
  "data": {
    "total_print_seconds": 1234,
    "total_filament_usage_gram": 1241.1231231,
    "print_job_count": 123,
    "regretted_print_jobs": 123,
    "failed_print_jobs": 123,
    "printer_error_print_jobs": 123,
    "done_print_jobs": 123,
    "date_range": {
      "from": "2023-02-22",
      "to": "2023-03-02",
      "general": false
    },
    "printers": {
      "3104": {
        "name": "Printer 1",
        "done": 0,
        "failed": 0,
        "printer_error": 0,
        "regretted": 0,
        "filament_usage_gram": 0
      },
      ...
    },
    "print_jobs": [
      {
        "date": "2023-02-27",
        "started": "2023-02-27 11:39:34",
        "ended": "2023-02-27 11:56:18",
        "cancelled": 1,
        "failed": 0,
        "cancel_reason_type": 5,
        "print_seconds": 1004,
        "filament_usage_gram": 0.03758012402132279
      },
      ...
    ]
  }
}

This endpoint returns statistics for the user / company.

Request

POST /{id}/account/GetStatistics

Parameter Type Required Description
users array no Array of user ids to get statistics for. Don't include this parameter to get statistics for all users.
printers array no Array of printer ids to get statistics for. Don't include this parameter to get statistics for all printers.
start_date string no The start date of the statistics. Provide a unix timestamp in seconds.
end_date string no The end date of the statistics. Provide a unix timestamp in seconds.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data object Statistics object.
data.total_print_seconds integer Total print seconds.
data.total_filament_usage_gram float Total filament usage in grams.
data.print_job_count integer Total print job count.
data.regretted_print_jobs integer Total regretted print job count.
data.failed_print_jobs integer Total failed print job count.
data.printer_error_print_jobs integer Total printer error print job count.
data.done_print_jobs integer Total successful print job count.
data.date_range object Date range object.
data.date_range.from string Start date of the statistics.
data.date_range.to string End date of the statistics.
data.date_range.general boolean True if the date range is general.
data.printers object Object of printer statistics.
data.printers.{id} object Printer statistics object.
data.printers.{id}.name string Printer name.
data.printers.{id}.done integer Successful print job count.
data.printers.{id}.failed integer Failed print job count.
data.printers.{id}.printer_error integer Printer error print job count.
data.printers.{id}.regretted integer Regretted print job count.
data.printers.{id}.filament_usage_gram float Filament usage in grams.
data.print_jobs array Array of print job statistics.
data.print_jobs[].date string Date of the print job.
data.print_jobs[].started string Start time of the print job.
data.print_jobs[].ended string End time of the print job.
data.print_jobs[].cancelled integer True if the print job was cancelled.
data.print_jobs[].failed integer True if the print job failed.
data.print_jobs[].cancel_reason_type integer The reason for cancelling the print job.
data.print_jobs[].print_seconds integer Print seconds.
data.print_jobs[].filament_usage_gram float Filament usage in grams.

User Management

Get Company Users

curl https://api.simplyprint.io/{id}/users/GetPaginatedUsers \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "page": 1,
    "page_size": 10,
    "approved": true,
    "search": "John Doe",
    "sort_id": 1,
    "sort_dir": "asc"
  }'

Success response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 1234,
      "relation_id": 4321,
      "name": "John Doe",
      "email_confirmed": true,
      "email": "johndoe@example.com",
      "phone": "",
      "relation_created_at": "2022-07-28 23:30:14",
      "last_online": "2023-03-02 15:44:44",
      "approved_at": "2022-07-29 11:14:52",
      "org_account": false,
      "total_prints": 68,
      "rank": 185,
      "teacher": false,
      "classes": [
        1234,
        5678
      ]
    }
  ],
  "page_amount": 1
}
Required permissions
view_users

Request

POST /{id}/users/GetPaginatedUsers

Parameter Type Required Description
page integer yes The page number to retrieve.
page_size integer yes The number of users to retrieve per page.
approved boolean no If true, only approved users will be returned. If false, only pending users will be returned.
Defaults to true
search string no A search string to filter the users by. Searches for name, email and phone number.
sort_id string no Which field to sort by. Options: name, contact, rank, lastOnline, added, totalPrints.
sort_dir string no The sort direction. Either asc or desc.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
page_amount integer The total number of pages.
data array An array of users.
data[].id integer The id of the user.
data[].relation_id integer The id of the user-company relation.
data[].name string The name of the user.
data[].email_confirmed boolean True if the user has confirmed their email address.
data[].email string The email address of the user.
data[].phone string The phone number of the user.
data[].relation_created_at string The date and time the user joined the company.
data[].sso boolean True if the user was created via SSO.
Approved users only
data[].last_online string The date and time the user was last online.
data[].approved_at string The date and time the user was approved.
data[].org_account boolean True if the user is an organization account.
data[].total_prints integer The total number of prints the user has made on this company.
data[].rank integer The id of the rank of the user.
Schools only
data[].teacher boolean True if the user is a teacher.
data[].classes array An array of class IDs the user is a member of.
curl https://api.simplyprint.io/{id}/users/CreateInvitationLink \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "maxUses": 10
  }'

Success response

{
  "status": true,
  "message": null,
  "link": "https://simplyprint.io/accept_invitation/b3d9b5a0-5b5b-11e9-8d7c-2d3b9e84aafd"
}
Required permissions
invite_users

This endpoint creates an invitation link that can be used to invite new users to the company. Please note that links with unlimited uses expire at the end of the day.

Request

POST /{id}/users/CreateInvitationLink

Parameter Type Required Description
maxUses integer no The maximum number of times the link can be used. Specify 0 for unlimited uses.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
link string The invitation link.

Invite Users By Email

curl https://api.simplyprint.io/{id}/users/InviteSpecificUser \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "emails": [
      "test@example.com",
      "test2@example.com"
    ],
    "rank": 192,
    "lang": "en"
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
invite_users

This endpoint invites one or more users to the company by email.

Request

POST /{id}/users/InviteSpecificUser

Parameter Type Required Description
emails string[] yes The emails of the users to invite.
rank integer no The rank id that the users should be assigned.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Accept or Deny Pending User

curl https://api.simplyprint.io/{id}/users/SetPendingUserState \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "relation_id": 1234,
    "approve": true,
    "notify": true
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
invite_users

Request

POST /{id}/users/SetPendingUserState

Parameter Type Required Description
relation_id integer yes The id of the pending user-company relation.
approve boolean yes True to approve the user, false to deny.
notify boolean yes True to notify the user of the decision. Will send an email if the user has an email address.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Change User Rank

curl https://api.simplyprint.io/{id}/users/ChangeUserRank \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "relation_id": 1234,
    "rank_id": 192
  }'

Success response

{
  "status": true,
  "message": null
}

Request

POST /{id}/users/ChangeUserRank

Parameter Type Required Description
relation_id integer yes The id of the user-company relation.
rank_id integer yes The id of the rank to assign to the user.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Delete User

curl https://api.simplyprint.io/{id}/users/DeleteUser \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "user_id": 1234
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
delete_user

This endpoint deletes a user from the company. Use this endpoint with caution.

Request

POST /{id}/users/DeleteUser

Parameter Type Required Description
user_id integer yes The id of the user to delete.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Set Teacher

POST /{id}/users/SetIsTeacher

Example request

curl -X POST \
https://api.simplyprint.io/{id}/users/SetIsTeacher \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: {API_KEY}' \
-d '{"relation_id": 123, "is_teacher": true}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
relation_id integer yes The ID of the company-user relation to update.
is_teacher boolean yes Set to true to mark the user as a teacher or false otherwise.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Schools

List classes

GET /{id}/account/settings/school/classes/GetClasses

Example request

curl https://api.simplyprint.io/{id}/account/settings/school/classes/GetClasses \
-H 'accept: application/json' \
-H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "objects": {
    "classes": [
      {
        "id": 1,
        "name": "Class A",
        "endMonthDay": "06-30",
        "fullStartDate": "2024-09-01",
        "fullEndDate": "2025-06-30",
        "nextClass": 2,
        "deleteUserAfterClassEnd": false,
        "autoNextClass": true,
        "googleClassroomLink": "https://classroom.google.com/c/...",
        "ssoGroupId": "group_id",
        "lastSsoSync": "2024-09-01T12:00:00Z",
        "updatedAt": "2024-09-07T08:30:00Z",
        "createdAt": "2024-08-30T08:30:00Z",
        "sortPosition": 1
      }
    ],
    "settings": {
      "defaultClass": 1,
      "maxClasses": 5,
      "userCanAddClasses": true
    }
  }
}

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
objects object The main object containing the response data.
objects.classes array An array of classes.
objects.classes[].id integer The unique ID of the class.
objects.classes[].name string The name of the class.
objects.classes[].endMonthDay string The end month and day of the class (MM-DD format).
objects.classes[].fullStartDate string The full start date of the class (YYYY-MM-DD format).
objects.classes[].fullEndDate string The full end date of the class (YYYY-MM-DD format).
objects.classes[].nextClass integer The ID of the next class, if any.
objects.classes[].deleteUserAfterClassEnd boolean Whether to delete the user after the class ends.
objects.classes[].autoNextClass boolean Whether to automatically enroll in the next class.
objects.classes[].googleClassroomLink string The Google Classroom link associated with the class.
objects.classes[].ssoGroupId string The SSO group ID associated with the class.
objects.classes[].lastSsoSync string The timestamp of the last SSO sync, or null if never synced.
objects.classes[].updatedAt string The timestamp of the last update (UTC).
objects.classes[].createdAt string The timestamp of when the class was created (UTC).
objects.classes[].sortPosition integer The sort position of the class.
objects.settings object The settings related to school classes.
objects.settings.defaultClass integer The ID of the default class.
objects.settings.maxClasses integer The maximum number of classes per user, or null if unlimited.
objects.settings.userCanAddClasses boolean Whether the user has permission to add new classes.

Create or update a class

Required permissions
org_school_settings_manage

POST /{id}/account/settings/school/classes/SaveClass

Example Request

{
  "id": 1,
  "name": "Physics 101",
  "endMonthDay": "12-31",
  "fullStartDate": "2024-01-01",
  "fullEndDate": "2024-12-31",
  "autoNextClass": true,
  "nextClass": 2,
  "deleteUserAfterClassEnd": false,
  "googleClassroomLink": "https://classroom.google.com/c/abc123",
  "ssoGroupId": "group1"
}

Request Parameters

Parameter Type Required Description
id integer No The unique ID of the class. If provided, the endpoint updates the existing class; otherwise, a new class is created.
name string Yes The name of the class (maximum length: 16 characters).
endMonthDay string No The end month and day of the class in MM-DD format.
fullStartDate string No The full start date of the class in YYYY-MM-DD format.
fullEndDate string No The full end date of the class in YYYY-MM-DD format.
autoNextClass boolean No Indicates if users should be automatically enrolled in the next class.
nextClass integer No The ID of the next class, if autoNextClass is true.
deleteUserAfterClassEnd boolean No Indicates if the user should be deleted after the class ends.
googleClassroomLink string No The URL to the Google Classroom link associated with the class. Must be a valid HTTPS URL.
ssoGroupId string No The SSO group ID associated with the class.

Response

Parameter Type Description
objects object The main object containing the response data.
objects.class object The saved class object.
objects.class.id integer The unique ID of the class.
objects.class.name string The name of the class.
objects.class.endMonthDay string The end month and day of the class (MM-DD format).
objects.class.fullStartDate string The full start date of the class (YYYY-MM-DD format).
objects.class.fullEndDate string The full end date of the class (YYYY-MM-DD format).
objects.class.autoNextClass boolean Indicates if users are automatically enrolled in the next class.
objects.class.nextClass integer The ID of the next class, if applicable.
objects.class.deleteUserAfterClassEnd boolean Indicates if users should be deleted after the class ends.
objects.class.googleClassroomLink string The Google Classroom link associated with the class.
objects.class.ssoGroupId string The SSO group ID associated with the class.
objects.class.lastSsoSync string The date and time of the last SSO synchronization in UTC format, or null if none.
objects.class.updatedAt string The date and time when the class was last updated in UTC format, or null if none.
objects.class.createdAt string The date and time when the class was created in UTC format, or null if none.
objects.class.sortPosition integer The sort position of the class.

Slicer

List Slicer Profiles

curl https://api.simplyprint.io/{id}/slicer/ListProfiles \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "profiles": [
    {
      "id": 785,
      "name": "Prusa profile",
      "for_printers": null,
      "org": true
    }
  ]
}

This endpoint returns a list overview of slicer profiles that the user has access to. Includes personal and company profiles.

Request

GET /{id}/slicer/ListProfiles

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.
profiles array An array of profile objects.
profiles.*.id integer The ID of the profile.
profiles.*.name string The name of the profile.
profiles.*.for_printers array The printers ids that this profile is made for.
profiles.*.org boolean True if this profile is owned by the company, and not by the user.

Get Slicer Profile

curl https://api.simplyprint.io/{id}/slicer/Get?id=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "profile": {
    "id": 785,
    "name": "Prusa profile",
    "settings": {
      "sliceHeight": 0.2,
      "sliceFillSparse": 30,
      "sliceShells": 2,
      "sliceShellOrder": "in-out",
      "sliceTopLayers": 3,
      "sliceSolidLayers": 2,
      "sliceBottomLayers": 2,
      "outputFillMult": 1.1,
      "sliceFillAngle": 45,
      "outputShellMult": 1,
      "outputCoastDist": 0,
      "sliceSolidMinArea": 5,
      "sliceMinHeight": 0,
      "sliceLayerStart": "center",
      "sliceFillType": "hex",
      "sliceFillRate": 130,
      "outputSparseMult": 1.1,
      "sliceFillOverlap": 35,
      "firstSliceHeight": 0.2,
      "firstLayerLineMult": 100,
      "firstLayerFillRate": 35,
      "firstLayerRate": 10,
      "firstLayerPrintMult": 1,
      "firstLayerFanSpeed": 0,
      "sliceSupportOutline": 1,
      "sliceSupportAngle": 1,
      "sliceSupportDensity": 25,
      "sliceSupportSize": 6,
      "sliceSupportOffset": 0.4,
      "sliceSupportGap": 0,
      "sliceSupportSpan": 5,
      "sliceSupportArea": 0.25,
      "sliceSupportExtra": 0,
      "outputBrimCount": 0,
      "outputBrimOffset": 2,
      "outputRaftSpacing": 0.3,
      "outputSeekrate": 150,
      "outputFanLayer": 2,
      "fanSpeed": 100,
      "outputRetractDist": 1,
      "outputRetractSpeed": 100,
      "outputRetractDwell": 0,
      "outputRetractWipe": 2,
      "outputShortPoly": 50,
      "zHopDistance": 0,
      "antiBacklash": 0,
      "gcodePause": 0,
      "newLayerGcode": "",
      "firstLayerBeltLead": 0,
      "firstLayerBeltBump": 0,
      "firstLayerFlatten": 0,
      "firstLayerBrimIn": 0,
      "sliceSupportEnable": 0,
      "outputRaft": 0,
      "outputLayerRetract": 0
    },
    "for_printers": null,
    "org": true
  }
}

This endpoint can be used to get a slicer profile by its ID. This includes the settings of the profile.

Request

GET /{id}/printers/Delete

Parameter Type Required Description
id integer yes The id of the profile to fetch.

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.
profile object The profile object.
profile.id integer The ID of the profile.
profile.name string The name of the profile.
profile.settings object The settings of the profile.
profile.for_printers array The printers ids that this profile is made for.
profile.org boolean True if this profile is owned by the company, and not by the user.

Save or Create Slicer Profile

curl https://api.simplyprint.io/{id}/slicer/SaveProfile?id=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

TODO

Delete Slicer Profile

curl https://api.simplyprint.io/{id}/slicer/DeleteProfile?id=1234 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}
Required permissions Description
slicer_org_profiles If the profile is owned by the company.

This endpoint can be used to delete a slicer profile by its ID.

Request

GET /{id}/printers/Delete

Parameter Type Required Description
id integer yes The id of the profile to delete.

Response

Field Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Tags

Tags describe what a printer, printer group, file, or queue item is set up for. SimplyPrint treats five things as tags: nozzle size / type, material, bed type, and custom tags (free-form labels you create). The queue matcher uses these to decide which queue items can print on which printers, so they are worth setting accurately on both sides.

All tags are assigned through the single Assign tags endpoint. The four tag kinds each have their own payload shape, documented below.

Custom tags and custom bed types are created and listed through dedicated endpoints; stock bed types and material types come from built-in enums (bed type enum reference).

Create or update custom tag

curl https://api.simplyprint.io/{id}/tags/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "name": "Nighttime only",
    "badge": "info"
  }'

Success response

{
  "status": true,
  "message": null,
  "id": 993,
  "tags": [
    {
      "id": 30,
      "name": "Tag 1",
      "badge": "light",
      "used_by": {
        "printers": 0,
        "printer_groups": 0,
        "files": 7,
        "queue_items": 6
      }
    },
    {
      "id": 31,
      "name": "Tag 2",
      "badge": "dark",
      "used_by": {
        "printers": 0,
        "printer_groups": 0,
        "files": 5,
        "queue_items": 1
      }
    }
  ]
}
Required permissions
edit_tags
Required OAuth scopes
tags.write

Creates a new custom tag, or updates an existing one when id is provided. Tag names must be unique per account.

Request

POST /{id}/tags/Create

Parameter Type Required Description
id integer no ID of the tag to update. Omit to create a new tag.
name string yes Tag name (max 32 chars).
badge string yes Badge color. One of the values in the colors reference.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
id integer ID of the created or updated tag.
tags array Full list of custom tags on the account after the write.
tags[].id integer Tag id.
tags[].name string Tag name.
tags[].badge string Badge color of the tag.
tags[].used_by object Reference counts. Only present when the tag is attached to at least one subject.
tags[].used_by.printers integer Number of printers the tag is attached to.
tags[].used_by.printer_groups integer Number of printer groups the tag is attached to.
tags[].used_by.files integer Number of files the tag is attached to.
tags[].used_by.queue_items integer Number of queue items the tag is attached to.

Get custom tag(s)

curl https://api.simplyprint.io/{id}/tags/Get \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

All tags

{
  "status": true,
  "message": null,
  "tags": [
    {
      "id": 136,
      "name": "jobox2",
      "badge": "light",
      "used_by": {
        "printers": 1,
        "printer_groups": 0,
        "files": 0,
        "queue_items": 3
      }
    },
    {
      "id": 130,
      "name": "jobox",
      "badge": "light",
      "used_by": {
        "printers": 1,
        "printer_groups": 0,
        "files": 0,
        "queue_items": 8
      }
    }
  ]
}
curl 'https://api.simplyprint.io/{id}/tags/Get?id=130' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

A single tag

{
  "status": true,
  "message": null,
  "tag": {
    "id": 130,
    "name": "jobox",
    "badge": "light",
    "used_by": {
      "printers": 1,
      "printer_groups": 0,
      "files": 5,
      "queue_items": 8
    }
  }
}
Required OAuth scopes
tags.read

Returns all custom tags on the account, or a single tag when id is supplied. Only custom tags are returned - built-in tag kinds (nozzle, material, bed type) come from enums instead.

Request

GET /{id}/tags/Get

Parameter Type Required Description
id integer no Tag id to fetch. Omit to return the full list.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
tag object Present only when id was supplied. Same shape as tags[] entries.
tags array Present only when id was omitted. Array of tag objects (same shape as tags[] above).

Delete custom tag

curl 'https://api.simplyprint.io/{id}/tags/Delete?id=993' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "tags": [
    {
      "id": 30,
      "name": "Tag 1",
      "badge": "light",
      "used_by": {
        "printers": 0,
        "printer_groups": 0,
        "files": 7,
        "queue_items": 6
      }
    },
    {
      "id": 31,
      "name": "Tag 2",
      "badge": "dark",
      "used_by": {
        "printers": 0,
        "printer_groups": 0,
        "files": 5,
        "queue_items": 1
      }
    }
  ]
}
Required permissions
edit_tags
Required OAuth scopes
tags.write

Deletes a custom tag and detaches it from every subject it was attached to.

Request

GET /{id}/tags/Delete

Parameter Type Required Description
id integer yes Tag id to delete.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
tags array Full list of remaining custom tags after the delete.

Create or update custom bed type

curl https://api.simplyprint.io/{id}/bed_types/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "name": "Shop-floor garolite",
    "generic_bed_type": "high_temp_plate",
    "brands": ["Bambu Lab"]
  }'

Success response

{
  "status": true,
  "message": null,
  "id": 2,
  "custom_bed_types": [
    {
      "id": 2,
      "type": "custom",
      "genericBedType": "smooth_pei_plate",
      "fullName": "Shop-floor garolite",
      "shortName": "Shop-floor garolite",
      "brands": [
        "Bambu Lab"
      ],
      "printerModels": null,
      "buyLink": null,
      "coldBed": false,
      "childOf": null,
      "image": null,
      "minTemperature": null,
      "maxTemperature": null,
      "isOfficialFromBrand": null,
      "isAftermarket": false,
      "deprecated": false,
      "notes": null,
      "description": null,
      "gcodeIdentifiers": null,
      "slicing": {
        "orcaslicer": {
          "settingsKey": "curr_bed_type",
          "value": "High Temp Plate",
          "default": true
        },
        "bambustudio": {
          "settingsKey": "curr_bed_type",
          "value": "High Temp Plate",
          "default": true
        }
      },
      "custom": true
    }
  ]
}
Required permissions
edit_tags
Required OAuth scopes
tags.write

Creates a new custom bed type (build plate), or updates an existing one when id is set. Use custom bed types to represent aftermarket or in-house plates that aren't covered by the built-in bed type enum.

Bed type images are not uploadable through the API - create the record here, then upload an image through the SimplyPrint panel.

Request

POST /{id}/bed_types/Create

Parameter Type Required Description
id integer no ID of an existing custom bed type to update. Omit to create a new one.
name string yes Display name (max 64 chars). Must be unique per account.
generic_bed_type string no Slicer mapping: one of smooth_cool_plate, engineering_plate, smooth_high_temp_plate, high_temp_plate, textured_pei_plate, smooth_pei_plate, textured_cool_plate, textured_high_temp_plate, supertack_plate, glass_plate, pp_plate. Determines which stock slicer profile is used for this custom plate.
brands string[] no Brand names the bed type is intended for (e.g. ["Prusa", "Elegoo"]).

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
id integer ID of the created or updated custom bed type.
custom_bed_types array Full list of custom bed types on the account after the write.
custom_bed_types[].id integer Custom bed type id.
custom_bed_types[].type string Always "custom".
custom_bed_types[].genericBedType string / null The generic_bed_type mapping, if set.
custom_bed_types[].fullName string Display name.
custom_bed_types[].shortName string Short name (currently same as fullName).
custom_bed_types[].brands string[]/null Brands the plate is intended for.
custom_bed_types[].image string / null Public CDN URL of the bed type image, when one has been uploaded through the panel.
custom_bed_types[].slicing object Slicer-specific settings to emit when slicing with this plate. Keyed by slicer (orcaslicer, bambustudio).
custom_bed_types[].custom boolean Always true for custom bed types.

Delete custom bed type

curl 'https://api.simplyprint.io/{id}/bed_types/Delete?id=2' \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "custom_bed_types": []
}
Required permissions
edit_tags
Required OAuth scopes
tags.write

Deletes a custom bed type. Any printer or queue item that had this bed type attached falls back to no bed type set.

Request

GET /{id}/bed_types/Delete

Parameter Type Required Description
id integer yes Custom bed type id to delete.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.
custom_bed_types array Full list of remaining custom bed types after the delete.

Assign tags overview

All four tag kinds (nozzle, material, custom, bed type) go through the same tags/Assign endpoint. The parameters fall into two groups: subject fields (what to tag) and payload fields (which tags to set).

The detailed sections below show the payload shape for each tag kind. You can combine multiple kinds in a single call (e.g. set nozzleData + material + bedType together).

Request

POST /{id}/tags/Assign

Subject (shared across all tag kinds)

Parameter Type Required Description
type integer yes Subject kind: 1 = printer, 2 = printer group, 3 = file, 4 = queue item.
id integer/string yes (or ids) Subject id.
ids array yes (or id) Array of subject ids for bulk assign.
edited string no Which aspect is being changed: nozzle, material, custom, or bedType. Only used for the audit log entry; the endpoint applies whatever payload fields are present.
override boolean no When using ids (bulk), if true each subject's existing tags are cleared before the new ones are applied.
detach_tag_ids integer[] no Custom tag ids to detach in the same call.

Permissions and OAuth scope per subject type

The permission and OAuth scope required depend on the subject type:

Subject type Permission OAuth scope
1 printer edit_printer printers.write
2 printer group edit_printer_group printers.write
3 file edit_file files.write
4 queue item print_queue queue.write

Assigning a custom tag additionally requires the edit_tags permission. Using custom bed types additionally requires the Print Farm plan; custom tags themselves require the Print Farm plan too. Stock bed types (from the bed type enum), nozzle size, and material are available on all plans.

Response

All four assignments return the same envelope:

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Assign nozzle size tag

curl https://api.simplyprint.io/{id}/tags/Assign \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "type": 1,
    "id": 48013,
    "edited": "nozzle",
    "nozzleData": [
      {"size": 0.4, "i": 0, "type": "hardened_steel", "volumeType": "standard"}
    ]
  }'

Success response

{
  "status": true,
  "message": null
}

Sets the nozzle(s) currently installed on a printer (or the nozzle a file was sliced for). Multi-nozzle machines send one entry per nozzle, indexed by i.

Payload

Parameter Type Required Description
nozzleData array yes One entry per nozzle.
nozzleData[].size number yes Nozzle diameter in mm (0 to 100).
nozzleData[].i integer no Nozzle index (0-based). Default: 0. Required on multi-nozzle machines.
nozzleData[].type string no Nozzle material: standard, plated_brass, hardened_steel, stainless_steel, tungsten_carbide, ruby_tipped, hemispherical.
nozzleData[].volumeType string no Volume class: standard, high_flow.
nozzle number no Deprecated - single-nozzle shorthand. Pass nozzleData instead.

To clear the nozzle(s), send nozzleData: [].

Assign material tag

curl https://api.simplyprint.io/{id}/tags/Assign \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "type": 1,
    "id": 48013,
    "edited": "material",
    "material": [
      {"ext": 0, "type": 1, "hex": "#ff3547", "color": "Red"}
    ]
  }'

Success response

{
  "status": true,
  "message": null
}

Sets the material(s) currently loaded on a printer (or the material a file was sliced for). Multi-material setups send one entry per extruder, indexed by ext.

Payload

Parameter Type Required Description
material array yes One entry per extruder.
material[].ext integer yes Extruder index (0-based, 0 to 1000).
material[].type integer no Filament profile id (from filament_profiles). A null/omitted type means "unknown material, color only".
material[].color string no Color display name (max 32 chars, e.g. "Red", "Matte Black").
material[].hex string no Color hex code (e.g. "#ff3547"). Max 9 chars (supports #RRGGBBAA).

To clear the materials, send material: [].

Assign custom tag

curl https://api.simplyprint.io/{id}/tags/Assign \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "type": 1,
    "id": 48013,
    "edited": "custom",
    "tag_id": 993,
    "custom": [993, 994]
  }'

Success response

{
  "status": true,
  "message": null
}

Attaches one or more custom tags (created through Create or update custom tag) to a subject.

Payload

Parameter Type Required Description
tag_id integer yes when edited=custom Primary custom tag id being attached. Required by the validator; for multi-tag assignment, pass the first id here and the full list in custom.
custom integer[] no Full list of custom tag ids to set on the subject. Replaces the subject's existing custom tags.
tag_ids integer[] no Alias for custom (accepted for backwards compatibility; use custom in new code).

To detach custom tags, either call Detach custom tag, or send custom: [] alongside tag_id set to the id being detached last.

Assign bed type tag

curl https://api.simplyprint.io/{id}/tags/Assign \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "type": 1,
    "id": 48013,
    "edited": "bedType",
    "bedType": {"type": "bambu_textured_pei_plate"}
  }'
curl https://api.simplyprint.io/{id}/tags/Assign \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "type": 1,
    "id": 48013,
    "edited": "bedType",
    "bedType": {"type": "custom", "custom": 2}
  }'

Success response

{
  "status": true,
  "message": null
}

Sets the bed type (build plate) currently installed on a printer, or the plate a file was sliced for. Pass either a built-in bed type from the enum reference, or type: "custom" with a custom bed type id from Create or update custom bed type.

Payload

Parameter Type Required Description
bedType object / null yes Bed type object. Pass null to clear the bed type.
bedType.type string yes A value from the bed type enum, or the literal string "custom" when using a custom plate.
bedType.custom integer only when bedType.type = "custom" Custom bed type id (from Create or update custom bed type).

Detach custom tag

curl https://api.simplyprint.io/{id}/tags/Detach \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "type": 1,
    "id": 48013,
    "tag_id": 993
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
edit_tags

Removes a single custom tag from a printer, printer group, file, or queue item. To clear other tag kinds (nozzle, material, bed type), use Assign tags with an empty payload for that kind.

Request

POST /{id}/tags/Detach

Parameter Type Required Description
type integer yes Subject kind: 1 = printer, 2 = printer group, 3 = file, 4 = queue item.
id integer/string yes Subject id.
tag_id integer yes Custom tag id to detach.

The OAuth scope required depends on type: printers.write for printer / printer group, files.write for file, queue.write for queue item.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Success message or error message if status is false.

Colors

Custom tag badges use one of these named colors.

Color Name Preview
Blue primary Primary
Purple secondary Secondary
Green success Success
Red danger Danger
Yellow warning Warning
Turquoise info Info
Light grey light Light
Dark dark Dark

Bed type enum reference

Use these string values for bedType.type in Assign bed type tag. Custom plates created through Create or update custom bed type use type: "custom" plus custom: <id>.

Brand Values
Prusa prusa_smooth_sheet, prusa_textured_sheet, prusa_satin_sheet, prusa_nylon_sheet, prusa_pp_sheet
Bambu Lab bambu_cool_plate, bambu_cool_plate_supertack, bambu_engineering_plate, bambu_smooth_pei_plate, bambu_textured_pei_plate, bambu_3d_effect_plate, bambu_galaxy_surface_plate, bambu_starry_surface_plate, bambu_diamond_effect_plate, bambu_carbon_fiber_effect_plate
BIQU Panda biqu_panda_designer_honeycomb, biqu_panda_build_plate_designer_houndstooth, biqu_panda_cryogrip_frostbite, biqu_panda_cryogrip_glacier, biqu_panda_cryogrip_textured_steel_sheet, biqu_cryogrip_frostbite_snapmaker, biqu_cryogrip_glacier_snapmaker
Snapmaker snapmaker_textured_pei_sheet, snapmaker_smooth_pei_sheet
Elegoo elegoo_textured_pei_surface, elegoo_smooth_pei_surface, elegoo_starry_surface, elegoo_diamond_surface, elegoo_carbon_fiber_surface, elegoo_cool_plate_surface
Creality creality_hi_epoxy_resin_plate, creality_hi_textured_pei_plate, creality_k1_textured_pei_plate, creality_k1_smooth_pei_plate, creality_k1max_textured_pei_plate, creality_k1max_smooth_pei_plate, creality_k2plus_epoxy_resin_plate, creality_k2plus_pei_frosted_plate, creality_k2_pei_frosted_plate
Darkmoon 3D darkmoon_g10_garolite, darkmoon_satin, darkmoon_ice, darkmoon_cfx, darkmoon_lux
Generic generic_flexible_pei_sheet, generic_garolite_g10_plate, generic_glass_plate, generic_pp_sheet, aftermarket_pei_sheet
Custom custom (paired with bedType.custom = <id>)

Custom Fields

Custom Fields allow you to add your own data-fields inside SimplyPrint.

Read more about Custom Fields on our Helpdesk

List custom fields

Required permissions
custom_fields_manage

POST /{id}/custom_fields/Get

Example request

curl -X POST https://api.simplyprint.io/{id}/custom_fields/Get \
    -H 'accept: application/json' \
    -H "X-API-KEY: {API_KEY}" \
    -F "page=1" -F "page_size=10"

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 7,
      "fieldId": "student_id",
      "fieldLabel": "Student ID",
      "fieldDescription": "",
      "fieldPlaceholder": null,
      "fieldType": "text",
      "fieldOptions": null,
      "category": "print",
      "subCategory": [
        "user_file",
        "print_queue",
        "print_job"
      ],
      "required": false,
      "enabled": true,
      "defaultValue": null,
      "visibleRequiredPermissions": null,
      "editRequiredPermissions": null,
      "visibleToGroups": [],
      "editableByGroups": [],
      "validation": null,
      "createdByUser": -1,
      "user": "John Doe",
      "forPrinters": [],
      "forModels": [],
      "forGroups": [],
      "showOnRegistration": null,
      "showBeforeStartPrint": null,
      "position": 0,
      "created": "2024-09-07T13:46:59+00:00",
      "updated": "2024-09-07T13:46:59+00:00"
    }
  ],
  "page_amount": 1,
  "total": 1
}

Request

Parameter Type Required Description
page integer yes Which page to show
page_size integer yes Amount of items per page (1-100)
search string no The search filter to apply
sort_id string no What key to sort on (id, fieldId, fieldLabel, fieldDescription, fieldType, category, enabled, created, updated)
sort_dir string no Sort direction (asc, desc)

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array List of custom fields.

Create or update a custom field

Required permissions
custom_fields_manage

POST /{id}/custom_fields/Save

Example request

curl -X POST https://api.simplyprint.io/{id}/custom_fields/Save \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"category":"print","subCategory":["user_file","print_queue","print_job"],"fieldType":"text","fieldId":"student_id","fieldLabel":"Student ID","required":false,"enabled":true}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer no If you want to update an existing custom field, specify this
category string yes One of print, user, printer, filament
subCategory array no Array of subcategories. Valid subcategories: print_queue, print_job, user_file
fieldId string yes ID of the field
fieldType string yes One of boolean, text, longtext, number, date, datetime, phone, email, url, select, multiselect, radio, checkbox
fieldLabel string yes Label of the field
fieldOptions object no Field options. An object with one entry, options, whose value is an array of {label: string, value: string}
FieldDescription string no Description of the field
fieldPlaceholder string no Placeholder text for the field
required boolean yes Whether the field is required
defaultValue object no Default value of the field. Object key should be either string, number, boolean, date, options, with the appropriate value type
validation object no Validation rules for the field. Object keys can be any of stringRegex, stringMinLength, stringMaxLength, numberAllowDecimals, numberMinValue, numberMaxValue, validationMessage
forPrinters array no Array of printer IDs the field should be visible for
forModels array no Array of model IDs the field should be visible for
forGroups array no Array of group IDs the field should be visible for
showOnRegistration boolean no Whether the field should be shown on registration
showBeforeStartPrint boolean no Whether the field should be shown before starting a print

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Enable or disable a custom field

Required permissions
custom_fields_manage

POST /{id}/custom_fields/SetEnabled

Example request

curl -X POST https://api.simplyprint.io/{id}/custom_fields/SetEnabled \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"id": 123, "enabled": true}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes ID of the custom field to enable or disable
enabled boolean yes Whether the custom field should be enabled (true) or disabled (false)

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Delete custom fields

Required permissions
custom_fields_manage

POST /{id}/custom_fields/Delete

Example request

curl https://api.simplyprint.io/{id}/custom_fields/Delete?id=123 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example request with multiple IDs

curl https://api.simplyprint.io/{id}/custom_fields/Delete?ids=123,124,125 \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes (if ids is not provided) The ID of the custom field to delete.
ids string yes (if id is not provided) A comma-separated list of custom field IDs to delete. Valid if multiple fields need to be removed.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Custom field submission

POST /{id}/custom_fields/SubmitValues

Example request

curl -X POST https://api.simplyprint.io/{id}/custom_fields/SubmitValues \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{"category": "printer", "subCategory": "print_job", entityIds: [1234], "values": [{customFieldId: "student_id", value: {"string": "1234567890"}}]}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
category string yes One of print, user, printer, filament
subCategory string yes One of print_queue, print_job, user_file
entityIds array yes Array of entity IDs to submit values for
values array yes Array of custom field values to submit. Each value looks like {customFieldId: string, value: CustomFieldValue}

Custom field submission value

The value of a custom field when submitted via the API is an object with a key corresponding to the field type. See the examples to the right for the different field types.

A text field would have a value like this:

{
  "string": "1234567890"
}

A number field would have a value like this:

{
  "number": 1234567890
}

A date field would have a value like this:

{
  "date": "2024-09-07"
}

A select field would have a value like this:

{
  "string": "Selected option"
}

A multi-select field would have a value like this:

{
  "options": [
    "Option 1",
    "Option 2"
  ]
}

Webhooks

Webhooks allow you to build or set up integrations that subscribe to certain events on SimplyPrint. When one of those events is triggered, we'll send an HTTP POST payload to the webhook's configured URL.

List webhooks

Required permissions
webhooks_manage

GET /{id}/webhooks/Get

Example request

curl "https://api.simplyprint.io/{id}/webhooks/Get" \
    -H 'accept: application/json' \
    -H "X-API-KEY: {API_KEY}"

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 11,
      "created_by": {
        "id": 12640,
        "first_name": "John",
        "last_name": "Doe",
        "avatar": "https://example.com/avatar.jpg"
      },
      "name": "Example Webhook",
      "url": "https:\/\/actions.nasa.gov\/print_events",
      "format": 0,
      "events": [
        "job.started",
        "job.paused",
        "job.resumed",
        "job.cancelled",
        "job.done",
        "job.failed",
        "job.bed_cleared",
        "printer.nozzle_size_changed"
      ],
      "secret": null,
      "enabled": true,
      "oauth_client_id": null,
      "created_at": "2024-09-07T18:16:51+00:00",
      "updated_at": "2024-09-07T18:16:51+00:00"
    }
  ],
  "oauth_clients": []
}

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array Array of webhooks.
oauth_clients array OAuth clients referenced by returned webhooks, keyed by client ID.

Create or update a webhook

Required permissions
webhooks_manage

POST /{id}/webhooks/Create

Example request

curl -X POST \
https://api.simplyprint.io/{id}/webhooks/Create \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: {API_KEY}' \
-d '{ "name": "Printer updates", "url": "https://example.com/webhook", "secret": "mysecret", "enabled": true, "events": ["printer.nozzle_size_changed", "filament.update"] }'

Example response

{
  "status": true,
  "message": null,
  "webhook": {
    "id": 123,
    "created_by": {
      "id": 12640,
      "first_name": "John",
      "last_name": "Doe",
      "avatar": "https://example.com/avatar.jpg"
    },
    "name": "Printer updates",
    "url": "https://example.com/webhook",
    "format": 0,
    "events": [
      "printer.nozzle_size_changed",
      "filament.update"
    ],
    "secret": "mysecret",
    "enabled": true,
    "oauth_client_id": null,
    "created_at": "2024-09-07T18:16:51+00:00",
    "updated_at": "2024-09-07T18:16:51+00:00"
  }
}

Request

Parameter Type Required Description
id integer no The ID of the webhook. Required if updating an existing webhook.
name string yes The name of the webhook.
description string no A description of the webhook.
url string yes The URL where the webhook will send requests. Must be a valid URL.
secret string no A secret key sent with each webhook delivery in the X-SP-Secret header. Use this to verify that requests originate from SimplyPrint.
enabled boolean no Whether the webhook is enabled or not. Defaults to true for new webhooks.
events array yes A list of events that the webhook will listen to. Must be at least one. Each event should match a valid WebhookEvent.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
webhook object Details of the created or updated webhook. Contains fields like id, created_by, name, url, format, events, and timestamps.

Delete a webhook

Required permissions
webhooks_manage

POST /{id}/webhooks/Delete

Example request

curl -X POST \
https://api.simplyprint.io/{id}/webhooks/Delete \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: {API_KEY}' \
-d '{"id": 123}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes The ID of the webhook to delete.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Enable or disable a webhook

Required permissions
webhooks_manage

POST /{id}/webhooks/SetEnabled

Example request

curl -X POST \
https://api.simplyprint.io/{id}/webhooks/SetEnabled \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: {API_KEY}' \
-d '{"id": 123, "enabled": true}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes The ID of the webhook to enable or disable.
enabled boolean yes Set to true to enable or false to disable.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Manually trigger webhook

The event type will be test.

This endpoint only checks that the Webhooks feature is available for the company and that the webhook belongs to the current company.

POST /{id}/webhooks/TriggerTestWebhook

Example request

curl -X POST \
https://api.simplyprint.io/{id}/webhooks/TriggerTestWebhook \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: {API_KEY}' \
-d '{"id": 123}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes The ID of the webhook to trigger.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.

Get webhook logs

Required permissions
webhooks_manage

POST /{id}/webhooks/GetLogs

Example request

curl -X POST \
https://api.simplyprint.io/{id}/webhooks/GetLogs \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: {API_KEY}' \
-d '{"webhook_id": 123, "page": 1, "page_size": 10, "sort_id": "createdAt", "sort_dir": "desc"}'

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 456,
      "webhook_id": 123,
      "succeeded": true,
      "url": "https://example.com/webhook",
      "status_code": 200,
      "duration_ms": 154,
      "request": "{\"webhook_id\":123,\"event\":\"printer.nozzle_size_changed\",\"timestamp\":1725733011,\"data\":{...}}",
      "attempts": 1,
      "reported": true,
      "receipt_received_at": "2024-09-07T18:16:52+00:00",
      "created_at": "2024-09-07T18:16:51+00:00"
    }
  ],
  "page_amount": 1,
  "total": 1
}

Request

Parameter Type Required Description
webhook_id integer yes The webhook ID to fetch logs for.
page integer yes 1-based page number.
page_size integer yes Number of log rows per page. Must be between 1 and 100.
sort_id string no Column to sort by. Common values are createdAt, statusCode, durationMs, or attempts.
sort_dir string no Sort direction. Must be asc or desc.
start_date string no Start of date range filter in UTC or a supported user-input date format.
end_date string no End of date range filter in UTC or a supported user-input date format.

Response

Parameter Type Description
status boolean True if the request was successful.
message string Error message if status is false.
data array Paginated webhook log entries.
page_amount integer Total number of available pages.
total integer Total number of matching log entries.

WebhookEvent

Event Name Description
job.started Triggered when a job is started.
job.paused Triggered when a job is paused.
job.resumed Triggered when a job is resumed.
job.cancelled Triggered when a job is cancelled.
job.done Triggered when a job is done.
job.failed Triggered when a job has failed.
job.bed_cleared Triggered when the bed is cleared.
job.objects_skipped Triggered when objects are skipped in a print job.
printer.autoprint_state_changed Triggered when the autoprint state of a printer is changed.
printer.nozzle_size_changed Triggered when the nozzle size of a printer is changed.
printer.material_changed Triggered when the material of a printer is changed.
printer.custom_tag_assigned Triggered when a custom tag is assigned to a printer.
printer.custom_tag_detached Triggered when a custom tag is detached from a printer.
printer.out_of_order_state_changed Triggered when a printer enters or leaves out-of-order state.
company.autoprint_state_changed Triggered when the autoprint state of a company is changed.
queue.add_item Triggered when a queue item is added.
queue.delete_item Triggered when a queue item is deleted.
queue.empty_queue Triggered when a queue is emptied.
queue.move_item Triggered when a queue item is moved.
queue.revive_item Triggered when a done queue item is revived.
queue.item_pending_approval Triggered when a queue item requires approval.
queue.item_approved Triggered when a queue item is approved.
queue.item_denied Triggered when a queue item is denied.
filament.create Triggered when filament is created.
filament.update Triggered when filament is updated.
filament.delete Triggered when filament is deleted.
filament.assigned Triggered when filament is assigned to a printer.
filament.unassigned Triggered when filament is unassigned from a printer.
printer.ai_state_changed Triggered when a printer AI state changes.
organization.user_signup Triggered when a user signs up to an organization.
organization.user_pending Triggered when a user is pending approval for an organization.
printer.ai_failure_detected Triggered when AI detects a potential print failure.
printer.ai_failure_false_positive Triggered when a detected AI failure is resolved as a false positive.
printer.autoprint_max_cycles Triggered when a printer reaches its configured autoprint max cycles.
balance.charged Triggered when balance is charged.
balance.refunded Triggered when balance is refunded.
balance.topped_up Triggered when balance is topped up.
balance.adjusted Triggered when balance is adjusted.
quota.request_new Triggered when a new quota request is created.
quota.request_resolved Triggered when a quota request is resolved.
quota.adjusted Triggered when quota is adjusted.
quota.reset Triggered when quota is reset.
maintenance.job_created Triggered when a maintenance job is created.
maintenance.job_started Triggered when a maintenance job is started.
maintenance.job_completed Triggered when a maintenance job is completed.
maintenance.job_cancelled Triggered when a maintenance job is cancelled.
maintenance.job_overdue Triggered when a maintenance job becomes overdue.
maintenance.job_reopened Triggered when a maintenance job is reopened.
maintenance.problem_reported Triggered when a maintenance problem is reported.
maintenance.problem_resolved Triggered when a maintenance problem is resolved.
maintenance.low_stock Triggered when a maintenance spare part reaches low stock.
maintenance.task_completed Triggered when a maintenance task is completed.
maintenance.task_skipped Triggered when a maintenance task is skipped.
maintenance.schedule_created Triggered when a maintenance schedule is created.
maintenance.schedule_updated Triggered when a maintenance schedule is updated.
maintenance.schedule_deleted Triggered when a maintenance schedule is deleted.
maintenance.job_updated Triggered when a maintenance job is updated.
maintenance.job_deleted Triggered when a maintenance job is deleted.
maintenance.spare_part_created Triggered when a maintenance spare part is created.
maintenance.spare_part_updated Triggered when a maintenance spare part is updated.
maintenance.spare_part_deleted Triggered when a maintenance spare part is deleted.
maintenance.stock_adjusted Triggered when maintenance spare part stock is adjusted.

Available events

Event Description
balance.adjusted Triggered when balance is adjusted.
balance.charged Triggered when balance is charged.
balance.refunded Triggered when balance is refunded.
balance.topped_up Triggered when balance is topped up.
company.autoprint_state_changed Triggered when the autoprint state of a company is changed.
filament.assigned Triggered when filament is assigned to a printer.
filament.create Triggered when filament is created.
filament.delete Triggered when filament is deleted.
filament.unassigned Triggered when filament is unassigned from a printer.
filament.update Triggered when filament is updated.
job.bed_cleared Triggered when the bed is cleared.
job.cancelled Triggered when a job is cancelled.
job.done Triggered when a job is done.
job.failed Triggered when a job has failed.
job.objects_skipped Triggered when objects are skipped in a print job.
job.paused Triggered when a job is paused.
job.resumed Triggered when a job is resumed.
job.started Triggered when a job is started.
maintenance.job_cancelled Triggered when a maintenance job is cancelled.
maintenance.job_completed Triggered when a maintenance job is completed.
maintenance.job_created Triggered when a maintenance job is created.
maintenance.job_deleted Triggered when a maintenance job is deleted.
maintenance.job_overdue Triggered when a maintenance job becomes overdue.
maintenance.job_reopened Triggered when a maintenance job is reopened.
maintenance.job_started Triggered when a maintenance job is started.
maintenance.job_updated Triggered when a maintenance job is updated.
maintenance.low_stock Triggered when a maintenance spare part reaches low stock.
maintenance.problem_reported Triggered when a maintenance problem is reported.
maintenance.problem_resolved Triggered when a maintenance problem is resolved.
maintenance.schedule_created Triggered when a maintenance schedule is created.
maintenance.schedule_deleted Triggered when a maintenance schedule is deleted.
maintenance.schedule_updated Triggered when a maintenance schedule is updated.
maintenance.spare_part_created Triggered when a maintenance spare part is created.
maintenance.spare_part_deleted Triggered when a maintenance spare part is deleted.
maintenance.spare_part_updated Triggered when a maintenance spare part is updated.
maintenance.stock_adjusted Triggered when maintenance spare part stock is adjusted.
maintenance.task_completed Triggered when a maintenance task is completed.
maintenance.task_skipped Triggered when a maintenance task is skipped.
organization.user_pending Triggered when a user is pending approval for an organization.
organization.user_signup Triggered when a user signs up to an organization.
printer.ai_failure_detected Triggered when AI detects a potential print failure.
printer.ai_failure_false_positive Triggered when a detected AI failure is resolved as a false positive.
printer.ai_state_changed Triggered when a printer AI state changes.
printer.autoprint_max_cycles Triggered when a printer reaches its configured autoprint max cycles.
printer.autoprint_state_changed Triggered when the autoprint state of a printer is changed.
printer.custom_tag_assigned Triggered when a custom tag is assigned to a printer.
printer.custom_tag_detached Triggered when a custom tag is detached from a printer.
printer.material_changed Triggered when the material of a printer is changed.
printer.nozzle_size_changed Triggered when the nozzle size of a printer is changed.
printer.out_of_order_state_changed Triggered when a printer enters or leaves out-of-order state.
queue.add_item Triggered when a queue item is added.
queue.delete_item Triggered when a queue item is deleted.
queue.empty_queue Triggered when a queue is emptied.
queue.item_approved Triggered when a queue item is approved.
queue.item_denied Triggered when a queue item is denied.
queue.item_pending_approval Triggered when a queue item requires approval.
queue.move_item Triggered when a queue item is moved.
queue.revive_item Triggered when a done queue item is revived.
quota.adjusted Triggered when quota is adjusted.
quota.request_new Triggered when a new quota request is created.
quota.request_resolved Triggered when a quota request is resolved.
quota.reset Triggered when quota is reset.

GCode Macros

Get overview

curl https://api.simplyprint.io/{id}/gcode_macros/GetOverview \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "gcodeCompletions": [
    {
      "label": "G0",
      "type": "variable",
      "info": "Add a straight line movement to the planner",
      "detail": "X, Y, Z, E, F, S"
    }
  ],
  "macro_groups": [
    {
      "name": "<i class='fas fa-infinity'><\/i> AutoPrint <i>(advanced)<\/i>",
      "desc": "The AutoPrint feature can automatically start prints. Here you define what Gcode should be executed to make sure the bed is clear.",
      "macros": [
        "is_autoprint_clear"
      ],
      "nopersonal": true
    }
  ],
  "macros_cards": {
    "is_start": {
      "name": "Start print",
      "description": "GCODE to be executed at start of print when using our slicer"
    }
  },
  "macros": {
    "company": [
      {
        "gcodes": {
          "printer_225": [
            "{snippet:2731}"
          ],
          "printer_10063": null,
          "printer_10372": [
            "{snippet:2796}"
          ]
        },
        "type": "is_start"
      }
    ],
    "personal": null,
    "sp": [
      {
        "gcodes": {
          "type_0": [
            "{snippet:26}"
          ],
          "type_236": [
            "{snippet:1103}",
            "{snippet:26}"
          ]
        },
        "type": "is_pause"
      }
    ]
  },
  "snippets": {
    "company": [
      {
        "id": 28,
        "name": "Indentify Ender 5",
        "description": "Identify printer specifically for Ender 5",
        "priority": 0,
        "created": "2020-04-22T09:19:37+00:00"
      }
    ]
  },
  "variables": {
    "bed_x": "Printer bed X length in mm",
    "bed_y": "Printer bed Y length in mm"
  },
  "slicerVariables": {
    "temp": "Hot end temperature",
    "bed_temp": "Bed temperature",
    "fan_speed": "Active cooling fan speed (usually 0-255)"
  }
}

GET /{id}/gcode_macros/GetOverview

Response

See example response.

Get snippet

curl https://api.simplyprint.io/{id}/gcode_macros/GetSnippet?id=123 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \

Success Response

{
  "status": true,
  "message": null,
  "snippet": {
    "id": 123,
    "name": "Example Snippet",
    "description": "This is an example snippet",
    "priority": 0,
    "gcode": "G1 X10 Y10"
  }
}

GET /gcode_macros/GetSnippet

Request Parameters

Parameter Type Description
id integer The ID of the snippet to retrieve.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
snippet object The details of the snippet.
snippet.id integer Unique identifier for the snippet.
snippet.name string Name of the snippet.
snippet.description string Description of the snippet.
snippet.priority integer Priority of the snippet.
snippet.gcode string? GCode content of the snippet (if any).

Save snippet

curl -X POST https://api.simplyprint.io/{id}/gcode_macros/SaveSnippet?id=123&type=private \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "name": "Updated Snippet",
    "description": "This is an updated snippet.",
    "gcode": ["G1 X10 Y10", "G1 X20 Y20"]
  }'

Success Response

{
  "status": true,
  "message": null,
  "new_data": {
    // Updated data of the GCODE snippets
  }
}

POST /gcode_macros/SaveSnippet

Request Parameters

Parameter Type Description
id integer The ID of the snippet to update (optional for creating a new snippet).
type string The type of the snippet (org, private, public).

Request Body

Parameter Type Description
name string The name of the GCODE snippet.
description string The description of the snippet.
gcode array The GCODE commands of the snippet.
gcode.* string A single GCODE command.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
created integer The ID of the newly created snippet (if applicable).
new_data object The updated data of the GCODE snippets.

Delete snippet

curl -X POST https://api.simplyprint.io/{id}/gcode_macros/DeleteSnippet?id=123 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success Response

{
  "status": true,
  "message": null,
  "new_data": {
    // Updated data of the GCODE snippets
  }
}

POST /gcode_macros/DeleteSnippet

Request Parameters

Parameter Type Description
id integer The ID of the snippet to delete (required if ids is not provided).
ids string Comma-separated list of IDs of snippets to delete (required if id is not provided).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
new_data object The updated data of the GCODE snippets.

Get macro

curl https://api.simplyprint.io/{id}/gcode_macros/GetMacroGcode?macro=is_start&printer=123&model=456&org=true&private=false&public=true \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \

Success Response

{
  "status": true,
  "message": null,
  "gcode": [
    "G1 X10 Y10",
    "G1 X20 Y20"
  ],
  "multiple": false
}

GET /gcode_macros/GetMacroGcode

Request Parameters

Parameter Type Description
macro string The type of the macro. Must be one of the enums defined in GcodeMacroType.
printer integer The ID of the printer.
model integer The ID of the printer model.
org boolean Whether to include organization macros.
private boolean Whether to include private macros.
public boolean Whether to include public macros.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
gcode array The GCODE commands of the macro.
multiple boolean Whether multiple GCODEs are returned.

Save macro

curl -X POST https://api.simplyprint.io/gcode_macros/SaveMacro?type=private \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
  "type": "is_start",
  "gcodes": {"printer_225": ["G1 X10 Y10"], "type_123": ["G1 X20 Y20", "{snippet:123}"]}
  }'

Success Response

{
  "status": true,
  "message": null
}
Required permission Description
gcode_profiles Required if macro is of type org.

POST /gcode_macros/SaveMacro

Request Parameters

Parameter Type Description
type string One of org, private

Request Body

Parameter Type Description
type string One of is_start, is_end, is_cancel, is_pause, is_resume, is_autorpint_clear
gcodes object Content of the macro.
gcodes.printer_{id} array GCODE commands for the printer with ID {id}.
gcodes.type_{id} array GCODE commands for the printer model with ID {id}.
gcodes.*[] string Can be a GCODE command or {snippet:{id}} to reference a snippet.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Arrange gcode order in macro

curl -X POST https://api.simplyprint.io/gcode_macros/Arrange \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "order": [4,2,3,1]
  }'

Success Response

{
  "status": true,
  "message": null
}

POST /gcode_macros/Arrange

Request Parameters

Parameter Type Description
order array An array of snippet IDs in the desired order.
order.* integer A single snippet ID.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Courses

Get course

curl https://api.simplyprint.io/{id}/courses/GetCourse?id=123 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "course": {
    // Course details
  },
  "slides": [
    // Course slides
  ],
  "embeds": [
    {
      "name": "Embed",
      "logo": "example.png",
      "privacy_policy": "https://example.com/privacy",
      "allowed_url": "https://example.com/embed",
      "how_to_embed_guide": "https://example.com/embed_guide"
    }
  ]
}
Required permission Description
courses_view Required to view courses.
courses_manage Required for teacher view.

GET /{id}/courses/GetCourse

Request Parameters

Parameter Type Description
id integer The ID of the course to retrieve.
teacher_view boolean Whether to retrieve the course in teacher view mode.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
course object The course details.
slides array The slides of the course.
embeds array The embed types for the course.

Delete course

curl -X POST https://api.simplyprint.io/{id}/courses/DeleteCourse \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "id": 123
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
courses_manage

POST /{id}/courses/DeleteCourse

Request Body

Parameter Type Description
id integer The ID of the course to delete.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Move course

curl -X POST https://api.simplyprint.io/{id}/courses/MoveCourse \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "course": 123,
    "category": 456
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
courses_manage

POST /{id}/courses/MoveCourse

Request Body

Parameter Type Description
course integer The ID of the course to move.
category integer The ID of the new category.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Publish/unpublish course

curl -X POST https://api.simplyprint.io/{id}/courses/PublishCourse \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "id": 123
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
courses_manage

POST /{id}/courses/PublishCourse

Request Parameters

Parameter Description
unpublish Set if the course should be unpublished (no value required).

Request Body

Parameter Type Description
id integer The ID of the course to publish.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Create/update category

curl -X POST https://api.simplyprint.io/{id}/courses/CreateCategory \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "name": "New Category",
    "public": true
  }'

Success response

{
  "status": true,
  "message": null,
  "category": {
    "id": 123,
    "name": "New Category",
    "public": true
  }
}
Required permissions
courses_manage

POST /{id}/courses/CreateCategory

Request Body

Parameter Type Description
language string The language code (2 characters) (optional).
id integer The ID of the category to update (optional to update existing category).
name string The name of the category.
public boolean Whether the category is public.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
category object The created or updated category details.

Delete category

curl -X POST https://api.simplyprint.io/{id}/courses/DeleteCategory \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "id": 123
  }'

Success response

{
  "status": true,
  "message": null
}
Required permissions
courses_manage

POST /{id}/courses/DeleteCategory

Request Body

Parameter Type Description
id integer The ID of the category to delete.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Partner

Get companies

curl -X POST https://api.simplyprint.io/{id}/partner/GetCompanies \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "page": 1,
    "page_size": 10,
    "search": "example",
    "sort_id": "name",
    "sort_dir": "asc"
  }'

Success response

{
  "status": true,
  "message": null,
  "data": [
    // List of companies
  ],
  "total": 100,
  "page_amount": 10
}

POST /{id}/partner/GetCompanies

Request Body

Parameter Type Description
page integer The page number to retrieve.
page_size integer The number of items per page (between 1 and 100).
search string Search term to filter companies (max 50 chars).
sort_id string The field to sort by.
sort_dir string The direction to sort (asc or desc).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
data array The list of companies.
total integer The total number of companies.
page_amount integer The total number of pages.

Get company

curl https://api.simplyprint.io/{id}/partner/GetCompany?company=123&initial=true \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "data": {
    "id": 123,
    "name": "Example Company",
    "vat": "12345678",
    "ean": "1234567890123",
    "trial_until": "2023-12-31T23:59:59",
    "country": "US",
    "uid": "unique-id",
    "created": "2023-01-01T00:00:00",
    "active": true,
    "sponsored": false,
    "public_edu": true,
    "plan": "premium",
    "type": "business",
    "max_printers": 10,
    "max_users": 50,
    "user_max_gb": 100,
    "address": "123 Example St",
    "contact_person": "John Doe",
    "contact_email": "john.doe@example.com",
    "contact_phone": "+1234567890",
    "user_count": 25,
    "printers_count": 5,
    "online_printers": 3,
    "week_jobs": 10,
    "total_jobs": 100,
    "filament": 20,
    "success_jobs": 8,
    "online_user_count": 15,
    "user_space_used": 50
  },
  "users_data": {
    // Initial user data if applicable
  }
}

GET /{id}/partner/GetCompany

Request Parameters

Parameter Type Description
company integer The ID of the company to retrieve.
initial boolean Whether to include initial user data (optional).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
data object The company details.
users_data object Initial user data if initial is true.

Get overview stats

curl https://api.simplyprint.io/{id}/partner/GetOverviewStats \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null,
  "total_active_managed_companies": 10,
  "total_trial_managed_companies": 2,
  "total_inactive_managed_companies": 3,
  "total_printers": 50,
  "total_online_printers": 30,
  "total_print_jobs": 200,
  "total_print_jobs_last_7_days": 20,
  "total_users": 100,
  "total_users_online_last_7_days": 15
}

GET /{id}/partner/GetOverviewStats

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
total_active_managed_companies integer Total number of active managed companies.
total_trial_managed_companies integer Total number of managed companies in trial.
total_inactive_managed_companies integer Total number of inactive managed companies.
total_printers integer Total number of printers for all managed companies.
total_online_printers integer Total number of online printers for all managed companies.
total_print_jobs integer Total number of print jobs for all managed companies.
total_print_jobs_last_7_days integer Total number of print jobs in the last 7 days.
total_users integer Total number of users for all managed companies.
total_users_online_last_7_days integer Total number of users online in the last 7 days.

Create/update company

curl -X POST https://api.simplyprint.io/{id}/partner/CreateCompany \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "name": "Example Company",
    "uid": "unique-id",
    "active": 1,
    "trial_until": "2023-12-31",
    "public_edu": true,
    "extra_printers": 5,
    "extra_users": 50,
    "extra_gb": 100,
    "active_plan": 5,
    "type": 1,
    "contact_email": "contact@example.com",
    "contact_phone": "+1234567890",
    "att_person": "John Doe",
    "uni_login": true,
    "uni_login_ids": "id1,id2",
    "address_stuff": {
      "street": "123 Example St",
      "city": "Example City",
      "country": "US",
      "postal_code": "12345"
    }
  }'

Success response

{
  "status": true,
  "message": null,
  "id": 123
}

POST /{id}/partner/CreateCompany

Request Parameters

Parameter Type Description
edit integer The ID of the company to edit (optional).

Request Body

Parameter Type Description
name string The name of the company (required, max 128 characters).
uid string The unique identifier for the company (required, max 32 characters).
active integer Whether the company is active (required, 0 or 1).
trial_until date The trial end date in Y-m-d format (optional).
public_edu boolean Whether the company is a public educational institution (required).
extra_printers integer The number of extra printers (required, min 0).
extra_users integer The number of extra users (required, min 0).
extra_gb integer The amount of extra storage in GB (required, min 0).
active_plan integer The active plan ID (required, must be 4 or 5).
type integer The type of company (required, must be 0, 1, 2, or 3).
contact_email string The contact email for the company (required, valid email format).
contact_phone string The contact phone number (optional, max 32 characters).
att_person string The name of the contact person (required, max 128 characters).
uni_login boolean Whether UniLogin is enabled (optional).
uni_login_ids string Comma-separated UniLogin IDs (optional).
address_stuff array The address details (required).

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
id integer The ID of the created or updated company.

Delete company

curl -X POST https://api.simplyprint.io/{id}/partner/DeleteCompany?company=123 \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Success response

{
  "status": true,
  "message": null
}

POST /{id}/partner/DeleteCompany

Request Parameters

Parameter Type Description
company integer The ID of the company to delete.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
curl -X POST https://api.simplyprint.io/{id}/partner/move/ValidatePrinter \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "ids": [1, 2, 3],
    "search": "example",
    "not_in": [4, 5]
  }'

Success response

{
  "status": true,
  "message": null,
  "items": [
    {
      "id": 1,
      "name": "Printer 1",
      "sku": "SKU123",
      "org_id": 10,
      "image": "https://example.com/printer1.jpg"
    },
    {
      "id": 2,
      "name": "Printer 2",
      "sku": "SKU456",
      "org_id": 11,
      "image": "https://example.com/printer2.jpg"
    }
  ]
}

Searches for printers across all partner-companies. Useful for finding printers to move between companies.

POST /{id}/partner/move/ValidatePrinter

Request Body

Parameter Type Description
ids array List of printer IDs to search (optional).
ids.* integer Each printer ID must be an integer.
search string Search term to filter printers (optional, max 256 chars).
not_in array List of printer IDs to exclude (optional).
not_in.* integer Each printer ID to exclude must be an integer.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
items array List of validated printers.
items.*.id integer The ID of the printer.
items.*.name string The name of the printer.
items.*.sku string The SKU of the printer.
items.*.org_id integer The ID of the company owning the printer.
items.*.image string URL of the printer's image.

Move printer

curl -X POST https://api.simplyprint.io/{id}/partner/move/MovePrinter \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "moveTo": 123,
    "moveToGroup": 456,
    "ids": [1, 2, 3]
  }'

Success response

{
  "status": true,
  "message": null
}

Find printers to move with ValidatePrinter endpoint.

POST /{id}/partner/move/MovePrinter

Request Parameters

Parameter Type Description
moveTo integer The ID of the target company (required).
moveToGroup integer The ID of the target printer group (required).
ids array List of printer IDs to move (required).
ids.* integer Each printer ID must be an integer.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
curl -X POST https://api.simplyprint.io/{id}/partner/move/ValidateFilament \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "ids": [1, 2, 3],
    "search": "example filament",
    "not_in": [4, 5]
  }'

Success response

{
  "status": true,
  "message": null,
  "items": [
    {
      "id": 1,
      "uniq_id": "UNIQ123",
      "color_name": "Red",
      "color_hex": "#FF0000",
      "org_id": 10,
      "brand": "Example Brand",
      "type_id": 1,
      "type_name": "PLA"
    }
  ]
}

Searches for filaments across all partner-companies. Useful for finding filaments to move between companies.

POST /{id}/partner/move/ValidateFilament

Request Body

Parameter Type Description
ids array List of filament IDs to search (optional).
ids.* integer Each filament ID must be an integer.
search string Search term to filter filament (optional, max 256 chars).
not_in array List of filament IDs to exclude (optional).
not_in.* integer Each filament ID to exclude must be an integer.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.
items array List of validated filaments.
items.*.id integer The ID of the filament.
items.*.uniq_id string The unique ID of the filament.
items.*.color_name string The name of the filament color.
items.*.color_hex string The hex code of the filament color.
items.*.org_id integer The ID of the company owning the filament.
items.*.brand string The brand of the filament.
items.*.type_id integer The ID of the filament type.
items.*.type_name string The name of the filament type.

Move filament

curl -X POST https://api.simplyprint.io/{id}/partner/move/MoveFilament \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
    "moveTo": 123,
    "moveToFilamentType": 456,
    "filamentMoveTypeClean": false,
    "ids": [1, 2, 3]
  }'

Success response

{
  "status": true,
  "message": null
}

Find filament to move with ValidateFilament endpoint.

POST /{id}/partner/move/MoveFilament

Request Parameters

Parameter Type Description
moveTo integer The ID of the target company (required).
moveToFilamentType integer The ID of the target filament type (required).
filamentMoveTypeClean boolean Whether to only change the filament company, or also change the type (optional).
ids array List of printer IDs to move (required).
ids.* integer Each printer ID must be an integer.

Response

Parameter Type Description
status boolean true if the request was successful.
message string Error message if status is false.

Maintenance

Maintenance endpoints let you track maintenance jobs, schedules, templates, problems, inventory, and comments for printers in your account.

Dashboard: Get

Retrieve dashboard.

Required permissions
maintenance_view

GET /{id}/maintenance/dashboard/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/dashboard/Get \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "stats": {
    "in_maintenance": 10,
    "scheduled": 61,
    "overdue": 4,
    "open_problems": 1,
    "low_stock_count": 3,
    "out_of_stock_count": 2,
    "total_parts_count": 10,
    "total_templates": 27,
    "total_plans": 18,
    "total_jobs": 278
  },
  "next_due": null,
  "recent_jobs": [
    {
      "id": 492,
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "schedule_id": null,
      "created_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "title": "Routine maintenance",
      "description": null,
      "status": "in_progress",
      "priority": "normal",
      "scheduled_date": null,
      "started_at": "2026-04-14T18:51:41+00:00",
      "completed_at": null,
      "cancelled_at": null,
      "completion_summary": null,
      "auto_created": false,
      "scheduled_date_manually_set": false,
      "progress": 0,
      "completed_tasks": 0,
      "total_tasks": 4,
      "required_tasks": 2,
      "completed_required_tasks": 0,
      "assignees": [],
      "problems": [
        {
          "id": 66,
          "status": "resolved",
          "description": null,
          "problem_type": null,
          "printer_id": 385,
          "reported_by": {
            "id": 1234,
            "name": "John Doe"
          },
          "created_at": "2026-04-14T18:43:57+00:00"
        }
      ],
      "batch_id": null,
      "task_assignment_enabled": true,
      "custom_field_values": [],
      "created_at": "2026-04-14T18:51:40+00:00"
    },
    {
      "id": 491,
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "schedule_id": null,
      "created_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "title": "Routine maintenance",
      "description": null,
      "status": "completed",
      "priority": "normal",
      "scheduled_date": null,
      "started_at": "2026-04-14T15:23:19+00:00",
      "completed_at": "2026-04-14T15:38:46+00:00",
      "cancelled_at": null,
      "completion_summary": null,
      "auto_created": false,
      "scheduled_date_manually_set": false,
      "progress": 100,
      "completed_tasks": 2,
      "total_tasks": 2,
      "required_tasks": 2,
      "completed_required_tasks": 2,
      "assignees": [],
      "problems": [],
      "batch_id": null,
      "task_assignment_enabled": true,
      "custom_field_values": [],
      "created_at": "2026-04-14T15:23:19+00:00"
    }
  ],
  "printer_status": [
    {
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "model": "A1 Mini Swapmod Combo",
      "model_brand": "Bambu Lab",
      "model_image": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini_swapmod_combo/product_photo_md.png",
      "group": {
        "id": 99,
        "name": "Workshop A"
      },
      "in_maintenance": true,
      "out_of_order": false,
      "open_problems": 0,
      "jobs": [
        {
          "id": 406,
          "title": "Scheduled maintenance - Workshop Printer",
          "status": "scheduled",
          "priority": "normal",
          "scheduled_date": null,
          "started_at": null,
          "batch_id": "c8716339-75e5-472b-9578-764454a69eb8",
          "is_overdue": false,
          "total_tasks": 0,
          "completed_tasks": 0,
          "progress": 0
        },
        {
          "id": 468,
          "title": "Scheduled maintenance - Workshop Printer",
          "status": "scheduled",
          "priority": "normal",
          "scheduled_date": null,
          "started_at": null,
          "batch_id": "4b1554e6-4bb4-44f1-a393-d258db74b294",
          "is_overdue": false,
          "total_tasks": 0,
          "completed_tasks": 0,
          "progress": 0
        }
      ]
    },
    {
      "printer_id": 48013,
      "printer_name": "Anycubic Kobra S1",
      "model": "Kobra S1",
      "model_brand": "Anycubic",
      "model_image": "https://cdn.simplyprint.io/i/printer_types/anycubic/kobra_s1/product_photo_md.png",
      "group": {
        "id": 99,
        "name": "Printers"
      },
      "in_maintenance": false,
      "out_of_order": false,
      "open_problems": 0,
      "jobs": [
        {
          "id": 298,
          "title": "Scheduled maintenance - Anycubic Kobra S1",
          "status": "scheduled",
          "priority": "urgent",
          "scheduled_date": null,
          "started_at": null,
          "batch_id": "4a4f36fb-67da-4e59-a3a8-ea30b76e54d3",
          "is_overdue": false,
          "total_tasks": 14,
          "completed_tasks": 3,
          "progress": 21
        },
        {
          "id": 359,
          "title": "Scheduled maintenance - Anycubic Kobra S1",
          "status": "scheduled",
          "priority": "urgent",
          "scheduled_date": null,
          "started_at": null,
          "batch_id": "eaf0274f-afc6-467b-a9ac-279691a7d90d",
          "is_overdue": false,
          "total_tasks": 14,
          "completed_tasks": 0,
          "progress": 0
        }
      ]
    }
  ],
  "low_stock_parts": [
    {
      "id": 152,
      "name": "Nozzle 0.4mm (brass)",
      "description": "Standard 0.4mm brass nozzle. Most common size for general-purpose printing.",
      "sku": null,
      "quantity": 0,
      "low_stock_threshold": 2,
      "unit": "pcs",
      "cost_per_unit": null,
      "currency": "USD",
      "buy_url": null,
      "category": "Nozzle",
      "image_url": null,
      "brands": null,
      "printer_models": [],
      "printer_model_ids": [],
      "is_low_stock": true,
      "is_out_of_stock": true,
      "custom_field_values": [],
      "created_at": "2026-03-31T12:50:42+00:00"
    },
    {
      "id": 156,
      "name": "Routine maintenance",
      "description": null,
      "sku": null,
      "quantity": 0,
      "low_stock_threshold": 3,
      "unit": "pcs",
      "cost_per_unit": null,
      "currency": "USD",
      "buy_url": null,
      "category": "replacement",
      "image_url": null,
      "brands": null,
      "printer_models": [],
      "printer_model_ids": [],
      "is_low_stock": true,
      "is_out_of_stock": true,
      "custom_field_values": [],
      "created_at": "2026-04-01T10:50:35+00:00"
    }
  ],
  "active_plans": [
    {
      "id": 96,
      "name": "Routine maintenance",
      "description": null,
      "enabled": true,
      "trigger_type": "interval_days",
      "trigger_value": 14,
      "trigger_config": {
        "mode": null,
        "template_ids": null,
        "cancel_reason_type": null
      },
      "task_assignment_mode": "manual",
      "auto_task_template_ids": null,
      "min_usage_threshold": null,
      "advance_notice_days": 7,
      "snooze_days": 7,
      "stagger_max_concurrent": null,
      "stagger_period": null,
      "auto_assign_user_ids": null,
      "job_title_template": null,
      "job_priority": "normal",
      "scope_type": "company",
      "scope_ids": null,
      "task_template_ids": [],
      "last_evaluated_at": null,
      "created_at": "2026-04-09T19:09:57+00:00",
      "active_job_count": 0
    },
    {
      "id": 107,
      "name": "Routine maintenance",
      "description": null,
      "enabled": true,
      "trigger_type": "interval_days",
      "trigger_value": 30,
      "trigger_config": {
        "mode": null,
        "template_ids": null,
        "cancel_reason_type": null
      },
      "task_assignment_mode": "manual",
      "auto_task_template_ids": null,
      "min_usage_threshold": null,
      "advance_notice_days": 7,
      "snooze_days": 7,
      "stagger_max_concurrent": null,
      "stagger_period": null,
      "auto_assign_user_ids": null,
      "job_title_template": null,
      "job_priority": "normal",
      "scope_type": "company",
      "scope_ids": null,
      "task_template_ids": [],
      "last_evaluated_at": null,
      "created_at": "2026-04-09T19:15:24+00:00",
      "active_job_count": 0
    }
  ]
}

Dashboard: Calendar

Retrieve the calendar view for dashboard.

Required permissions
maintenance_view

POST /{id}/maintenance/dashboard/Calendar

Example request

curl https://api.simplyprint.io/{id}/maintenance/dashboard/Calendar \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "start": "string",
      "end": "string"
    }'

Example response

{
  "status": true,
  "message": null,
  "events": [
    {
      "id": 491,
      "title": "Nozzle replacement",
      "start": "2026-04-14T15:23:19+00:00",
      "end": "2026-04-14T15:38:46+00:00",
      "color": "#0F9D58",
      "extendedProps": {
        "status": "completed",
        "priority": "normal",
        "printer_name": "Workshop Printer",
        "printer_id": 385,
        "progress": 100
      }
    },
    {
      "id": 492,
      "title": "Routine maintenance",
      "start": "2026-04-14T18:51:41+00:00",
      "end": null,
      "color": "#F4B400",
      "extendedProps": {
        "status": "in_progress",
        "priority": "normal",
        "printer_name": "Workshop Printer",
        "printer_id": 385,
        "progress": 0
      }
    },
    {
      "id": 232,
      "title": "Monthly maintenance - Workshop Printer",
      "start": "2026-04-11T19:08:55+00:00",
      "end": null,
      "color": "#DB4437",
      "extendedProps": {
        "status": "overdue",
        "priority": "low",
        "printer_name": "Workshop Printer",
        "printer_id": 385,
        "progress": 0
      }
    }
  ]
}

Request

Parameter Type Required Description
start string yes -
end string yes -

Jobs: Get

Retrieve job.

Required permissions
maintenance_view

POST /{id}/maintenance/jobs/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "total": 12,
  "page": 1,
  "page_size": 25,
  "page_amount": 1,
  "page_count": 1,
  "data": [
    {
      "id": 492,
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "schedule_id": null,
      "created_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "title": "Routine maintenance",
      "description": null,
      "status": "in_progress",
      "priority": "normal",
      "scheduled_date": null,
      "started_at": "2026-04-14T18:51:41+00:00",
      "completed_at": null,
      "cancelled_at": null,
      "completion_summary": null,
      "auto_created": false,
      "scheduled_date_manually_set": false,
      "progress": 0,
      "completed_tasks": 0,
      "total_tasks": 4,
      "required_tasks": 2,
      "completed_required_tasks": 0,
      "assignees": [],
      "problems": [
        {
          "id": 66,
          "status": "resolved",
          "description": null,
          "problem_type": null,
          "printer_id": 385,
          "reported_by": {
            "id": 1234,
            "name": "John Doe"
          },
          "created_at": "2026-04-14T18:43:57+00:00"
        }
      ],
      "batch_id": null,
      "task_assignment_enabled": true,
      "custom_field_values": [],
      "created_at": "2026-04-14T18:51:40+00:00",
      "printer_group": {
        "id": 99,
        "name": "Workshop A"
      },
      "printer_model_image": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini_swapmod_combo/product_photo_md.png",
      "printer_model_brand": "Bambu Lab"
    },
    {
      "id": 491,
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "schedule_id": null,
      "created_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "title": "Nozzle replacement",
      "description": null,
      "status": "completed",
      "priority": "normal",
      "scheduled_date": null,
      "started_at": "2026-04-14T15:23:19+00:00",
      "completed_at": "2026-04-14T15:38:46+00:00",
      "cancelled_at": null,
      "completion_summary": null,
      "auto_created": false,
      "scheduled_date_manually_set": false,
      "progress": 100,
      "completed_tasks": 2,
      "total_tasks": 2,
      "required_tasks": 2,
      "completed_required_tasks": 2,
      "assignees": [],
      "problems": [],
      "batch_id": null,
      "task_assignment_enabled": true,
      "custom_field_values": [],
      "created_at": "2026-04-14T15:23:19+00:00",
      "printer_group": {
        "id": 99,
        "name": "Workshop A"
      },
      "printer_model_image": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini_swapmod_combo/product_photo_md.png",
      "printer_model_brand": "Bambu Lab"
    }
  ],
  "batch_summary": [
    {
      "batch_id": "23e499bd-5f40-4967-a8aa-5bf4e4583e6b",
      "title": "Routine maintenance",
      "priority": "normal",
      "job_count": 4,
      "status_counts": {
        "completed": 2,
        "in_progress": 2
      }
    }
  ]
}

Request

Parameter Type Required Description
printer_id integer no -
printer_ids string no max 1000 characters
status string no -
search string no max 255 characters
page integer no min 1
page_size integer no between 1 and 100
sort_id string no One of: created_at, scheduled_date, status, priority, printer, title
sort_dir string no One of: asc, desc

Jobs: Get one

Retrieve a single job.

Required permissions
maintenance_view

POST /{id}/maintenance/jobs/GetOne

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/GetOne \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null,
  "data": {
    "id": 491,
    "printer_id": 385,
    "printer_name": "Workshop Printer",
    "schedule_id": null,
    "created_by": {
      "id": 1234,
      "name": "John Doe"
    },
    "title": "Nozzle replacement",
    "description": null,
    "status": "completed",
    "priority": "normal",
    "scheduled_date": null,
    "started_at": "2026-04-14T15:23:19+00:00",
    "completed_at": "2026-04-14T15:38:46+00:00",
    "cancelled_at": null,
    "completion_summary": null,
    "progress": 100,
    "completed_tasks": 2,
    "total_tasks": 2,
    "required_tasks": 2,
    "completed_required_tasks": 2,
    "assignees": [],
    "problems": [],
    "batch_id": null,
    "task_assignment_enabled": true,
    "custom_field_values": [],
    "created_at": "2026-04-14T15:23:19+00:00",
    "tasks": [
      {
        "id": 2128,
        "template_id": 240,
        "name": "Inspect nozzle",
        "description": "Check the nozzle for wear, clogs, or damage.",
        "is_required": true,
        "is_completed": true,
        "completed_at": "2026-04-14T15:38:44+00:00",
        "completed_by": {
          "id": 1234,
          "name": "John Doe"
        },
        "skipped_at": null,
        "skipped_by": null,
        "spare_part": null,
        "spare_part_quantity": 1,
        "instructions": "1. Heat the nozzle to printing temperature.\n2. Visually inspect the nozzle tip for deformation or buildup.\n3. Push filament through manually to check for partial clogs.\n4. If clogged, perform a cold pull or replace the nozzle.\n5. Check for any leaking around the heat block.",
        "reference_url": null,
        "youtube_url": null,
        "course_id": null,
        "course_url": null,
        "spare_part_category": null,
        "tool": null,
        "sort_order": 2,
        "assigned_to": null,
        "notes": null,
        "custom_field_values": []
      }
    ],
    "printer_info": {
      "id": 385,
      "name": "Workshop Printer",
      "group": {
        "id": 99,
        "name": "Workshop A"
      },
      "model": {
        "id": 573,
        "name": "A1 Mini",
        "brand": "Bambu Lab",
        "images": {
          "md": {
            "silhouette": null,
            "product": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini/product_photo_md.png",
            "custom": null
          }
        }
      },
      "stats": {
        "total_runtime_seconds": 44161,
        "runtime_since_maintenance_seconds": 0,
        "print_count": 41,
        "completed_print_count": 26,
        "prints_since_maintenance": 0,
        "success_rate": 63.4,
        "maintenance_count": 13,
        "last_maintenance_at": "2026-04-14T18:09:40+00:00"
      }
    },
    "loose_problems": []
  }
}

Request

Parameter Type Required Description
id integer yes -

Jobs: Get batch

Retrieve multiple job in one call.

Required permissions
maintenance_view

POST /{id}/maintenance/jobs/GetBatch

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/GetBatch \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "batch_id": "string"
    }'

Example response

{
  "status": true,
  "message": null,
  "data": {
    "shared": {
      "batch_id": "23e499bd-5f40-4967-a8aa-5bf4e4583e6b",
      "title": "Routine maintenance",
      "description": null,
      "priority": "normal",
      "scheduled_date": null,
      "auto_created": false,
      "schedule_id": null,
      "created_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "created_at": "2026-03-31T13:17:48+00:00",
      "assignees": []
    },
    "jobs": [
      {
        "id": 208,
        "printer_id": 385,
        "printer_name": "Workshop Printer",
        "schedule_id": null,
        "created_by": {
          "id": 1234,
          "name": "John Doe"
        },
        "title": "Routine maintenance",
        "description": null,
        "status": "completed",
        "priority": "normal",
        "scheduled_date": null,
        "started_at": "2026-03-31T13:17:51+00:00",
        "completed_at": "2026-04-07T13:02:54+00:00",
        "cancelled_at": null,
        "completion_summary": null,
        "auto_created": false,
        "scheduled_date_manually_set": false,
        "progress": 100,
        "completed_tasks": 13,
        "total_tasks": 13,
        "required_tasks": 8,
        "completed_required_tasks": 8,
        "assignees": [],
        "problems": [],
        "batch_id": "23e499bd-5f40-4967-a8aa-5bf4e4583e6b",
        "task_assignment_enabled": true,
        "custom_field_values": [],
        "created_at": "2026-03-31T13:17:48+00:00",
        "tasks": [
          {
            "id": 229,
            "template_id": 244,
            "name": "Calibrate bed leveling",
            "description": "Ensure the print bed is properly leveled and Z offset is correct.",
            "is_required": true,
            "is_completed": true,
            "completed_at": "2026-03-31T14:44:12+00:00",
            "completed_by": {
              "id": 1234,
              "name": "John Doe"
            },
            "skipped_at": null,
            "skipped_by": null,
            "spare_part": null,
            "spare_part_quantity": 0,
            "gcode_snippet_ids": null,
            "gcode_snippets": null,
            "instructions": "1. Preheat the bed to normal printing temperature.\n2. Run the printer's automatic bed leveling procedure if available.\n3. For manual leveling, use a piece of paper at each corner and the center.\n4. Adjust until there is slight resistance on the paper at all points.\n5. Print a test first layer to verify calibration.",
            "reference_url": null,
            "youtube_url": null,
            "course_id": null,
            "course_url": null,
            "spare_part_category": null,
            "tool": null,
            "sort_order": 6,
            "assigned_to": null,
            "notes": null,
            "custom_field_values": []
          },
          {
            "id": 230,
            "template_id": 241,
            "name": "Check belt tension",
            "description": "Verify that X and Y axis belts have proper tension.",
            "is_required": true,
            "is_completed": true,
            "completed_at": "2026-03-31T14:43:44+00:00",
            "completed_by": {
              "id": 1234,
              "name": "John Doe"
            },
            "skipped_at": null,
            "skipped_by": null,
            "spare_part": null,
            "spare_part_quantity": 0,
            "gcode_snippet_ids": null,
            "gcode_snippets": null,
            "instructions": "1. Power off the printer.\n2. Gently pluck each belt - it should vibrate like a guitar string, not sag.\n3. Check for fraying, cracking, or wear on the belt surface.\n4. Adjust tensioners if the belt is too loose or too tight.\n5. Verify smooth axis movement after adjustment.",
            "reference_url": null,
            "youtube_url": null,
            "course_id": null,
            "course_url": null,
            "spare_part_category": null,
            "tool": null,
            "sort_order": 3,
            "assigned_to": null,
            "notes": null,
            "custom_field_values": []
          }
        ],
        "printer_info": {
          "id": 385,
          "name": "Workshop Printer",
          "group": {
            "id": 99,
            "name": "Workshop A"
          },
          "model": {
            "id": 573,
            "name": "A1 Mini Swapmod Combo",
            "brand": "Bambu Lab",
            "images": {
              "md": {
                "silhouette": null,
                "product": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini_swapmod_combo/product_photo_md.png",
                "custom": null
              }
            }
          },
          "stats": {
            "total_runtime_seconds": 44161,
            "print_count": 41,
            "last_maintenance_at": "2026-04-14T18:09:40+00:00"
          }
        }
      },
      {
        "id": 210,
        "printer_id": 24342,
        "printer_name": "Bambu Lab P1P 2",
        "schedule_id": null,
        "created_by": {
          "id": 1234,
          "name": "John Doe"
        },
        "title": "Routine maintenance",
        "description": null,
        "status": "completed",
        "priority": "normal",
        "scheduled_date": null,
        "started_at": "2026-03-31T13:17:48+00:00",
        "completed_at": "2026-04-12T17:55:48+00:00",
        "cancelled_at": null,
        "completion_summary": null,
        "auto_created": false,
        "scheduled_date_manually_set": false,
        "progress": 100,
        "completed_tasks": 13,
        "total_tasks": 13,
        "required_tasks": 8,
        "completed_required_tasks": 8,
        "assignees": [],
        "problems": [],
        "batch_id": "23e499bd-5f40-4967-a8aa-5bf4e4583e6b",
        "task_assignment_enabled": true,
        "custom_field_values": [],
        "created_at": "2026-03-31T13:17:48+00:00",
        "tasks": [
          {
            "id": 255,
            "template_id": 244,
            "name": "Calibrate bed leveling",
            "description": "Ensure the print bed is properly leveled and Z offset is correct.",
            "is_required": true,
            "is_completed": true,
            "completed_at": "2026-03-31T14:44:12+00:00",
            "completed_by": {
              "id": 1234,
              "name": "John Doe"
            },
            "skipped_at": null,
            "skipped_by": null,
            "spare_part": null,
            "spare_part_quantity": 0,
            "gcode_snippet_ids": null,
            "gcode_snippets": null,
            "instructions": "1. Preheat the bed to normal printing temperature.\n2. Run the printer's automatic bed leveling procedure if available.\n3. For manual leveling, use a piece of paper at each corner and the center.\n4. Adjust until there is slight resistance on the paper at all points.\n5. Print a test first layer to verify calibration.",
            "reference_url": null,
            "youtube_url": null,
            "course_id": null,
            "course_url": null,
            "spare_part_category": null,
            "tool": null,
            "sort_order": 6,
            "assigned_to": null,
            "notes": null,
            "custom_field_values": []
          },
          {
            "id": 256,
            "template_id": 241,
            "name": "Check belt tension",
            "description": "Verify that X and Y axis belts have proper tension.",
            "is_required": true,
            "is_completed": true,
            "completed_at": "2026-03-31T14:43:44+00:00",
            "completed_by": {
              "id": 1234,
              "name": "John Doe"
            },
            "skipped_at": null,
            "skipped_by": null,
            "spare_part": null,
            "spare_part_quantity": 0,
            "gcode_snippet_ids": null,
            "gcode_snippets": null,
            "instructions": "1. Power off the printer.\n2. Gently pluck each belt - it should vibrate like a guitar string, not sag.\n3. Check for fraying, cracking, or wear on the belt surface.\n4. Adjust tensioners if the belt is too loose or too tight.\n5. Verify smooth axis movement after adjustment.",
            "reference_url": null,
            "youtube_url": null,
            "course_id": null,
            "course_url": null,
            "spare_part_category": null,
            "tool": null,
            "sort_order": 3,
            "assigned_to": null,
            "notes": null,
            "custom_field_values": []
          }
        ],
        "printer_info": {
          "id": 24342,
          "name": "Bambu Lab P1P 2",
          "group": {
            "id": 99,
            "name": "Workshop A"
          },
          "model": {
            "id": 658,
            "name": "P2S FarmLoop Combo",
            "brand": "Bambu Lab",
            "images": {
              "md": {
                "silhouette": null,
                "product": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/p2s_farmloop_combo/product_photo_md.png",
                "custom": null
              }
            }
          },
          "stats": {
            "total_runtime_seconds": 78376,
            "print_count": 47,
            "last_maintenance_at": "2026-04-12T17:55:48+00:00"
          }
        }
      }
    ],
    "template_tasks": [
      {
        "template_id": 250,
        "name": "Cleaning nozzle",
        "description": "Clean the darned nozzle",
        "is_required": true,
        "instructions": null,
        "reference_url": null,
        "youtube_url": null,
        "spare_part": null,
        "spare_part_quantity": 1,
        "spare_part_category": null,
        "gcode_snippet_ids": null,
        "tool": null,
        "sort_order": 0,
        "completions": [
          {
            "job_id": 208,
            "task_id": 235,
            "printer_id": 385,
            "printer_name": "Workshop Printer",
            "is_completed": true,
            "completed_at": "2026-04-01T13:13:04+00:00",
            "spare_part": {
              "id": 152,
              "name": "Nozzle 0.4mm (brass)"
            }
          },
          {
            "job_id": 210,
            "task_id": 261,
            "printer_id": 24342,
            "printer_name": "Bambu Lab P1P 2",
            "is_completed": false,
            "completed_at": null,
            "spare_part": null
          }
        ]
      },
      {
        "template_id": 249,
        "name": "Something whatever",
        "description": null,
        "is_required": true,
        "instructions": "<p>jhagjwagawg</p><p><br></p><p><strong><em><u>gagwa</u></em></strong></p>",
        "reference_url": null,
        "youtube_url": null,
        "spare_part": null,
        "spare_part_quantity": 1,
        "spare_part_category": null,
        "gcode_snippet_ids": [
          28,
          513
        ],
        "tool": "change_filament",
        "sort_order": 0,
        "completions": [
          {
            "job_id": 208,
            "task_id": 239,
            "printer_id": 385,
            "printer_name": "Workshop Printer",
            "is_completed": true,
            "completed_at": "2026-03-31T15:11:37+00:00",
            "spare_part": {
              "id": 152,
              "name": "Nozzle 0.4mm (brass)"
            }
          },
          {
            "job_id": 210,
            "task_id": 265,
            "printer_id": 24342,
            "printer_name": "Bambu Lab P1P 2",
            "is_completed": false,
            "completed_at": null,
            "spare_part": null
          }
        ]
      }
    ],
    "problems": [],
    "summary": {
      "job_count": 4,
      "status_counts": {
        "completed": 2,
        "in_progress": 2
      },
      "total_tasks": 52,
      "completed_tasks": 48,
      "progress": 92
    }
  }
}

Request

Parameter Type Required Description
batch_id string yes max 36 characters

Jobs: Export

Export job as a downloadable file.

Required permissions
maintenance_view

POST /{id}/maintenance/jobs/Export

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Export \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "csv": "\"ID\",\"Printer\",\"Title\",\"Status\",\"Priority\",\"Scheduled date\",\"Started at\",\"Completed at\",\"Tasks completed\",\"Tasks total\",\"Assignees\",\"Created by\"\n\"491\",\"Workshop Printer\",\"Nozzle replacement\",\"completed\",\"normal\",\"\",\"2026-04-14 15:23:19\",\"2026-04-14 15:38:46\",\"2\",\"2\",\"\",\"John Doe\"\n\"487\",\"Workshop Printer\",\"Nozzle replacement\",\"completed\",\"normal\",\"\",\"2026-04-13 12:25:51\",\"2026-04-13 12:32:43\",\"1\",\"1\",\"\",\"John Doe\"\n\"485\",\"Workshop Printer\",\"Routine maintenance\",\"cancelled\",\"normal\",\"\",\"2026-04-12 18:12:23\",\"\",\"0\",\"0\",\"\",\"John Doe\"\n\"344\",\"Workshop Printer\",\"Scheduled maintenance - Workshop Printer\",\"completed\",\"urgent\",\"\",\"2026-04-14 18:08:55\",\"2026-04-14 18:09:40\",\"9\",\"13\",\"\",\"John Doe\"\n",
  "filename": "maintenance-jobs-2026-04-19.csv",
  "total": 278
}

Request

Parameter Type Required Description
status string no -
date_from string no -
date_to string no -

Jobs: Create

Create a new job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Create

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "title": "string"
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
printer_id integer no -
printer_ids array no -
title string yes min 1; max 255 characters
description string no max 5000 characters
priority string no -
scheduled_date string no -
template_ids array no -
assignee_ids array no -
problem_ids array no -
task_assignments array no -
custom_fields array no -

Jobs: Create from problem

Create a new job from an existing problem.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/CreateFromProblem

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/CreateFromProblem \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "problem_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
problem_id integer yes -
title string no min 1; max 255 characters
priority string no -

Jobs: Add tasks

Add tasks to a job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/AddTasks

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/AddTasks \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1,
      "template_ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
template_ids array yes min 1

Jobs: Update

Update top-level fields on an existing maintenance job. Title, description, priority, and scheduled date can all be edited while the job is still in scheduled or in_progress. Tasks on the job are managed via the separate Add tasks / Complete task / Skip task endpoints; this endpoint does not modify the task list.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Update

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Update \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
title string no min 1; max 255 characters
description string no max 5000 characters
priority string no -
scheduled_date string no -
assignee_ids array no -
custom_fields array no -

Jobs: Assign task

Assign a user to a single task on an in-progress maintenance job, or clear the existing assignment by passing user_id: null. The task assignment feature must be enabled in the account settings, otherwise this returns a Failed response. By default, sends a notification to the newly-assigned user; set notify: false to suppress that. Returns the updated task object.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/AssignTask

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/AssignTask \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "task_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
task_id integer yes ID of the maintenance job task to (re-)assign.
user_id integer no ID of the user to assign. Pass null to clear the current assignment without assigning anyone else.
notify boolean no If true (default), notify the newly-assigned user. Pass false to skip the notification (useful when bulk-assigning).

Link problems to a job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/LinkProblems

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/LinkProblems \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1,
      "problem_ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
problem_ids array yes min 1

Jobs: Start

Start a job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Start

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Start \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -

Jobs: Bulk start

Start multiple job at once.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/BulkStart

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/BulkStart \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "job_ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
job_ids array yes min 1; max 100

Jobs: Complete

Mark a job as complete.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Complete

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Complete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
completion_summary string no max 5000 characters
resolve_problem_ids array no -
skip_resolve_linked boolean no -

Jobs: Bulk complete

Mark multiple job as complete.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/BulkComplete

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/BulkComplete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "job_ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
job_ids array yes min 1; max 100
completion_summary string no max 5000 characters

Jobs: Complete task

Mark a task as complete on a job.

Required permissions
maintenance_complete

POST /{id}/maintenance/jobs/CompleteTask

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/CompleteTask \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "task_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
task_id integer yes -
selected_spare_part_id integer no -
skip_spare_part boolean no -
custom_fields array no -

Jobs: Bulk complete task

Mark multiple tasks as complete on a job.

Required permissions
maintenance_complete

POST /{id}/maintenance/jobs/BulkCompleteTask

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/BulkCompleteTask \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "job_ids": [],
      "template_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
job_ids array yes min 1; max 100
template_id integer yes -
selected_spare_part_id integer no -

Jobs: Uncomplete task

Mark a previously-completed task as not complete on a job.

Required permissions
maintenance_complete

POST /{id}/maintenance/jobs/UncompleteTask

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/UncompleteTask \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "task_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
task_id integer yes -

Jobs: Skip task

Skip a task on a job.

Required permissions
maintenance_complete

POST /{id}/maintenance/jobs/SkipTask

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/SkipTask \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "task_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
task_id integer yes -

Jobs: Unskip task

Mark a previously-skipped task as not skipped on a job.

Required permissions
maintenance_complete

POST /{id}/maintenance/jobs/UnskipTask

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/UnskipTask \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "task_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
task_id integer yes -

Jobs: Send task gcode

Send the gcode associated with a task on a job.

Required permissions
maintenance_complete

POST /{id}/maintenance/jobs/SendTaskGcode

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/SendTaskGcode \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "task_id": 1,
      "snippet_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
task_id integer yes -
snippet_id integer yes -

Jobs: Cancel

Cancel a job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Cancel

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Cancel \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -

Jobs: Reopen

Reopen a previously closed job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Reopen

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Reopen \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -

Jobs: Delete

Delete a job.

Required permissions
maintenance_manage

POST /{id}/maintenance/jobs/Delete

Example request

curl https://api.simplyprint.io/{id}/maintenance/jobs/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
ids array yes -

Comments can be attached to either a maintenance job or a printer. File attachments are supported via separate uploads referenced by file_ids.

Comments: Get

Retrieve comment.

Required permissions
maintenance_view

POST /{id}/maintenance/comments/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/comments/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "commentable_type": "maintenance_job",
      "commentable_id": 1
    }'

Example response

{
  "status": true,
  "message": null,
  "comments": [
    {
      "id": 12,
      "commentable_type": "maintenance_job",
      "commentable_id": 491,
      "text": "Nozzle replaced with 0.4mm brass.",
      "user": {
        "id": 1234,
        "name": "John Doe"
      },
      "files": [],
      "created_at": "2026-04-14T15:38:50+00:00",
      "updated_at": null
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total": 1,
    "total_pages": 1
  }
}

Request

Parameter Type Required Description
commentable_type string yes One of: maintenance_job, printer
commentable_id integer yes -
page integer no min 1
per_page integer no min 1; max 100

Comments: Add

Add a comment.

Required permissions
maintenance_view

POST /{id}/maintenance/comments/Add

Example request

curl https://api.simplyprint.io/{id}/maintenance/comments/Add \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "commentable_type": "maintenance_job",
      "commentable_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
commentable_type string yes One of: maintenance_job, printer
commentable_id integer yes -
text string no max 5000 characters
file_ids array no -

Comments: Update

Update an existing comment.

Required permissions
maintenance_view

POST /{id}/maintenance/comments/Update

Example request

curl https://api.simplyprint.io/{id}/maintenance/comments/Update \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1,
      "text": "string"
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
text string yes max 5000 characters

Comments: Delete

Delete a comment.

Required permissions
maintenance_view

POST /{id}/maintenance/comments/Delete

Example request

curl https://api.simplyprint.io/{id}/maintenance/comments/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -

Tasks are the individual steps that make up a maintenance job (clean nozzle, lubricate rails, calibrate bed, etc.). They are stored as reusable task templates on the account, and copied into a job when the job is created. Editing a template does not affect tasks already on existing jobs.

Tasks: Get

Retrieve task.

Required permissions
maintenance_view

POST /{id}/maintenance/templates/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "total": 27,
  "page": 1,
  "page_size": 100,
  "page_amount": 1,
  "page_count": 1,
  "data": [
    {
      "id": 244,
      "name": "Calibrate bed leveling",
      "description": "Ensure the print bed is properly leveled and Z offset is correct.",
      "category": "calibration",
      "brands": null,
      "is_required": true,
      "system_default_key": "generic_calibrate_bed",
      "trigger_type": "time_interval",
      "trigger_config": {
        "interval_days": 30
      },
      "spare_part": null,
      "spare_part_quantity": 1,
      "spare_part_category": null,
      "estimated_minutes": 15,
      "instructions": "1. Preheat the bed to normal printing temperature.\n2. Run the printer's automatic bed leveling procedure if available.\n3. For manual leveling, use a piece of paper at each corner and the center.\n4. Adjust until there is slight resistance on the paper at all points.\n5. Print a test first layer to verify calibration.",
      "reference_url": null,
      "youtube_url": null,
      "course_id": null,
      "tool": null,
      "responsible_user_ids": null,
      "sort_order": 6,
      "printer_model_ids": [],
      "printer_ids": [],
      "gcode_snippet_ids": [],
      "created_at": "2026-03-31T12:50:16+00:00"
    },
    {
      "id": 240,
      "name": "Inspect nozzle",
      "description": "Check the nozzle for wear, clogs, or damage.",
      "category": "inspection",
      "brands": null,
      "is_required": true,
      "system_default_key": "generic_inspect_nozzle",
      "trigger_type": "usage_based",
      "trigger_config": {
        "print_hours": 200
      },
      "spare_part": null,
      "spare_part_quantity": 1,
      "spare_part_category": null,
      "estimated_minutes": 15,
      "instructions": "1. Heat the nozzle to printing temperature.\n2. Visually inspect the nozzle tip for deformation or buildup.\n3. Push filament through manually to check for partial clogs.\n4. If clogged, perform a cold pull or replace the nozzle.\n5. Check for any leaking around the heat block.",
      "reference_url": null,
      "youtube_url": null,
      "course_id": null,
      "tool": null,
      "responsible_user_ids": null,
      "sort_order": 2,
      "printer_model_ids": [],
      "printer_ids": [],
      "gcode_snippet_ids": [],
      "created_at": "2026-03-31T12:50:16+00:00"
    }
  ]
}

Request

Parameter Type Required Description
category string no -
search string no max 255 characters
page integer no min 1
page_size integer no between 1 and 100
sort_id string no One of: name, category, trigger_type, estimated_minutes, created_at, sort_order
sort_dir string no One of: asc, desc

Tasks: Get defaults

Retrieve the default task.

Required permissions
maintenance_manage

GET /{id}/maintenance/templates/GetDefaults

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/GetDefaults \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null
}

Retrieve recommended task.

Required permissions
maintenance_view

POST /{id}/maintenance/templates/GetRecommended

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/GetRecommended \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "printer_id": 1
    }'

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 273,
      "name": "Clean heater block exterior",
      "description": "Remove plastic buildup from the nozzle and heater block using a brass brush while heated.",
      "category": "cleaning",
      "brands": null,
      "is_required": false,
      "system_default_key": "generic_clean_heater_block",
      "trigger_type": "time_interval",
      "trigger_config": {
        "interval_days": 7
      },
      "spare_part": null,
      "spare_part_quantity": 1,
      "spare_part_category": null,
      "estimated_minutes": 5,
      "instructions": "1. Heat the nozzle to printing temperature.\n2. Use a small brass brush to clear old plastic.\n3. Wait for cooldown before touching.",
      "reference_url": null,
      "youtube_url": null,
      "course_id": null,
      "tool": null,
      "responsible_user_ids": null,
      "sort_order": 12,
      "printer_model_ids": [],
      "printer_ids": [],
      "gcode_snippet_ids": [],
      "created_at": "2026-04-09T15:51:08+00:00",
      "is_recommended": true,
      "is_due": true,
      "due_reason": "7 days since last (every 7 days)"
    },
    {
      "id": 244,
      "name": "Calibrate bed leveling",
      "description": "Ensure the print bed is properly leveled and Z offset is correct.",
      "category": "calibration",
      "brands": null,
      "is_required": true,
      "system_default_key": "generic_calibrate_bed",
      "trigger_type": "time_interval",
      "trigger_config": {
        "interval_days": 30
      },
      "spare_part": null,
      "spare_part_quantity": 1,
      "spare_part_category": null,
      "estimated_minutes": 15,
      "instructions": "1. Preheat the bed to normal printing temperature.\n2. Run the printer's automatic bed leveling procedure if available.",
      "reference_url": null,
      "youtube_url": null,
      "course_id": null,
      "tool": null,
      "responsible_user_ids": null,
      "sort_order": 6,
      "printer_model_ids": [],
      "printer_ids": [],
      "gcode_snippet_ids": [],
      "created_at": "2026-03-31T12:50:16+00:00",
      "is_recommended": false,
      "is_due": false,
      "due_reason": null
    }
  ]
}

Request

Parameter Type Required Description
printer_id integer yes -
exclude_template_ids array no -

Tasks: Get cancel reasons

Retrieve the available cancel reasons for task.

Required permissions
maintenance_view

GET /{id}/maintenance/templates/GetCancelReasons

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/GetCancelReasons \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 1,
      "label": "Print failed"
    },
    {
      "id": 7,
      "label": "Poor quality"
    },
    {
      "id": 3,
      "label": "No filament extruded / nozzle clog"
    },
    {
      "id": 8,
      "label": "Spaghetti print"
    },
    {
      "id": 4,
      "label": "Fell off the plate"
    },
    {
      "id": 5,
      "label": "Not enough filament"
    },
    {
      "id": 6,
      "label": "Other"
    }
  ]
}

Tasks: Get notification triggers

Retrieve the available notification triggers for task.

Required permissions
maintenance_view

POST /{id}/maintenance/templates/GetNotificationTriggers

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/GetNotificationTriggers \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "data": {
    "Bambu": {
      "LUBRICATE_RODS": {
        "category": "lubrication",
        "title": "Lubricate rods",
        "description": "Lubricate threaded rods and linear rails",
        "template_keys": [
          "bambu_grease_z_screws",
          "generic_lubricate_rails"
        ],
        "hms_patterns": [
          "0501040000030002"
        ],
        "error_codes": []
      },
      "CLEAN_NOZZLE": {
        "category": "cleaning",
        "title": "Clean/unclog nozzle",
        "description": "Nozzle or extruder clog detected - clean or perform cold pull",
        "template_keys": [
          "bambu_cold_pull",
          "generic_inspect_nozzle"
        ],
        "hms_patterns": [
          "03001A0000020001"
        ],
        "error_codes": [
          "03004006",
          "03008014"
        ]
      },
      "BED_LEVELING": {
        "category": "calibration",
        "title": "Bed leveling",
        "description": "Heatbed leveling data is abnormal or leveling failed",
        "template_keys": [
          "generic_calibrate_bed"
        ],
        "hms_patterns": [
          "03000D000001000C"
        ],
        "error_codes": [
          "03004002"
        ]
      }
    }
  }
}

Request

Parameter Type Required Description
printer_api string no -
code string no max 16 characters

Tasks: Create

Create a new task template -- a reusable definition of a single maintenance step (clean nozzle, lubricate rails, etc.). Templates are not maintenance jobs themselves; they are copied into a job when the job is created or when Add tasks is called. Templates can target specific printer models or printer IDs, declare a spare_part they consume, link to a course/video, and ship gcode snippets to run.

Required permissions
maintenance_manage

POST /{id}/maintenance/templates/Create

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "name": "string"
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
name string yes min 1; max 255 characters
description string no max 5000 characters
category string no -
brands array no -
is_required boolean no -
trigger_type string no -
trigger_config array no -
spare_part_id integer no -
spare_part_quantity integer no min 1
estimated_minutes integer no min 1
instructions string no max 10000 characters
reference_url string no max 512 characters
youtube_url string no max 512 characters
course_id integer no -
printer_model_ids array no -
printer_ids array no -
gcode_snippet_ids array no -
tool string no -
spare_part_category string no max 128 characters
responsible_user_ids array no -

Tasks: Update

Update an existing task.

Required permissions
maintenance_manage

POST /{id}/maintenance/templates/Update

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/Update \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
name string no min 1; max 255 characters
description string no max 5000 characters
category string no -
brands array no -
is_required boolean no -
trigger_type string no -
trigger_config array no -
spare_part_id integer no -
spare_part_quantity integer no min 1
estimated_minutes integer no min 1
instructions string no max 10000 characters
reference_url string no max 512 characters
youtube_url string no max 512 characters
course_id integer no -
printer_model_ids array no -
printer_ids array no -
gcode_snippet_ids array no -
tool string no -
spare_part_category string no max 128 characters
responsible_user_ids array no -

Tasks: Adopt defaults

Apply the default task settings.

Required permissions
maintenance_manage

POST /{id}/maintenance/templates/AdoptDefaults

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/AdoptDefaults \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "template_keys": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
template_keys array yes min 1

Tasks: Delete

Delete a task.

Required permissions
maintenance_manage

POST /{id}/maintenance/templates/Delete

Example request

curl https://api.simplyprint.io/{id}/maintenance/templates/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer no -
ids array no min 1

Schedules automatically create maintenance jobs based on a trigger -- elapsed time, print hours, completed prints, filament weight, or accumulated task threshold. Each schedule references a list of task templates that get copied into every job it creates.

Schedules: Get

Retrieve schedule.

Required permissions
maintenance_view

POST /{id}/maintenance/schedules/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "total": 5,
  "page": 1,
  "page_size": 25,
  "page_amount": 1,
  "page_count": 1,
  "data": [
    {
      "id": 87,
      "name": "Monthly maintenance",
      "description": "Thorough monthly servicing including lubrication, fan cleaning, belt tensioning, and calibration. Keeps printers in peak condition.",
      "enabled": true,
      "trigger_type": "interval_days",
      "trigger_value": 30,
      "trigger_config": null,
      "task_assignment_mode": "manual",
      "auto_task_template_ids": null,
      "min_usage_threshold": null,
      "advance_notice_days": 5,
      "snooze_days": 7,
      "stagger_max_concurrent": null,
      "stagger_period": null,
      "auto_assign_user_ids": null,
      "job_title_template": "{printer_name} - {plan_name}",
      "job_priority": "normal",
      "scope_type": "company",
      "scope_ids": null,
      "task_template_ids": [
        239,
        240,
        241,
        242,
        243,
        245,
        246
      ],
      "last_evaluated_at": null,
      "created_at": "2026-03-31T12:50:31+00:00"
    },
    {
      "id": 92,
      "name": "Every 500 print hours service",
      "description": "Usage-based maintenance triggered after 500 hours of printing",
      "enabled": true,
      "trigger_type": "print_hours",
      "trigger_value": 500,
      "trigger_config": null,
      "task_assignment_mode": "manual",
      "auto_task_template_ids": null,
      "min_usage_threshold": null,
      "advance_notice_days": 7,
      "snooze_days": 7,
      "stagger_max_concurrent": null,
      "stagger_period": null,
      "auto_assign_user_ids": null,
      "job_title_template": "{printer_name} - 500hr service",
      "job_priority": "normal",
      "scope_type": "company",
      "scope_ids": null,
      "task_template_ids": [
        253
      ],
      "last_evaluated_at": null,
      "created_at": "2026-04-01T10:19:07+00:00"
    }
  ]
}

Request

Parameter Type Required Description
enabled boolean no -
trigger_type string no max 64 characters
search string no max 255 characters
page integer no min 1
page_size integer no between 1 and 100
sort_id string no One of: name, trigger_type, enabled, created_at
sort_dir string no One of: asc, desc

Schedules: Get defaults

Retrieve the default schedule.

Required permissions
maintenance_manage

GET /{id}/maintenance/schedules/GetDefaults

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/GetDefaults \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "key": "weekly_quick_check",
      "name": "Weekly quick check",
      "description": "A fast weekly inspection to catch issues early. Covers bed cleaning, nozzle inspection, and a visual check of belts and moving parts.",
      "trigger_type": "interval_days",
      "trigger_value": 7,
      "job_priority": "low",
      "advance_notice_days": 2,
      "snooze_days": 3,
      "task_assignment_mode": "manual",
      "template_keys": [
        "generic_clean_bed",
        "generic_inspect_nozzle"
      ]
    },
    {
      "key": "monthly_maintenance",
      "name": "Monthly maintenance",
      "description": "Thorough monthly servicing including lubrication, fan cleaning, belt tensioning, and calibration.",
      "trigger_type": "interval_days",
      "trigger_value": 30,
      "job_priority": "normal",
      "advance_notice_days": 5,
      "snooze_days": 7,
      "task_assignment_mode": "manual",
      "template_keys": [
        "generic_clean_bed",
        "generic_inspect_nozzle"
      ]
    },
    {
      "key": "usage_500h_deep_service",
      "name": "Every 500 print hours",
      "description": "Extended usage-based plan for major servicing after 500 print hours. Full calibration, thorough lubrication, component inspection, and preventive part replacement.",
      "trigger_type": "print_hours",
      "trigger_value": 500,
      "job_priority": "high",
      "advance_notice_days": 7,
      "snooze_days": 7,
      "task_assignment_mode": "manual",
      "template_keys": [
        "generic_clean_bed",
        "generic_inspect_nozzle"
      ]
    }
  ]
}

Schedules: Preview

Preview the jobs a schedule would create across the account, without actually creating them. Useful for verifying scope filters and trigger settings before saving. Does not modify any data.

Required permissions
maintenance_manage

POST /{id}/maintenance/schedules/Preview

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/Preview \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
lightweight boolean no -

Schedules: Create

Create a new schedule.

Required permissions
maintenance_manage

POST /{id}/maintenance/schedules/Create

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "name": "string",
      "trigger_type": "string",
      "trigger_value": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
name string yes min 1; max 255 characters
description string no max 5000 characters
trigger_type string yes -
trigger_value integer yes min 1
trigger_config array no -
trigger_config.mode string no One of: count, specific
trigger_config.template_ids array no -
trigger_config.cancel_reason_type integer no -
enabled boolean no -
task_assignment_mode string no -
auto_task_template_ids array no -
min_usage_threshold integer no min 1
advance_notice_days integer no min 1; max 90
snooze_days integer no min 1; max 90
stagger_max_concurrent integer no min 1
stagger_period string no One of: day, week
auto_assign_user_ids array no -
job_title_template string no max 255 characters
job_priority string no -
scope_type string no One of: company, model, group, printer
scope_ids array no -
template_ids array no -

Schedules: Update

Update an existing schedule.

Required permissions
maintenance_manage

POST /{id}/maintenance/schedules/Update

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/Update \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
name string no min 1; max 255 characters
description string no max 5000 characters
trigger_type string no -
trigger_value integer no min 1
trigger_config array no -
trigger_config.mode string no One of: count, specific
trigger_config.template_ids array no -
trigger_config.cancel_reason_type integer no -
enabled boolean no -
task_assignment_mode string no -
auto_task_template_ids array no -
min_usage_threshold integer no min 1
advance_notice_days integer no min 1; max 90
snooze_days integer no min 1; max 90
stagger_max_concurrent integer no min 1
stagger_period string no One of: day, week
auto_assign_user_ids array no -
job_title_template string no max 255 characters
job_priority string no -
scope_type string no One of: company, model, group, printer
scope_ids array no -
template_ids array no -

Schedules: Adopt defaults

Apply the default schedule settings.

Required permissions
maintenance_manage

POST /{id}/maintenance/schedules/AdoptDefaults

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/AdoptDefaults \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "plan_keys": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
plan_keys array yes min 1

Schedules: Trigger now

Trigger a schedule immediately.

Required permissions
maintenance_manage

POST /{id}/maintenance/schedules/TriggerNow

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/TriggerNow \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
printer_ids array no -
schedule_in_days integer no min 1; max 365

Schedules: Delete

Delete a schedule.

Required permissions
maintenance_manage

POST /{id}/maintenance/schedules/Delete

Example request

curl https://api.simplyprint.io/{id}/maintenance/schedules/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer no -
ids array no min 1

Problems are issues reported on a printer (poor quality, layer shift, clogged nozzle, etc.). They can be linked to a maintenance job that resolves them, or resolved standalone. Problem types are the catalog of categories users pick from when reporting.

Problems: Get

Retrieve problem.

Required permissions
maintenance_view

POST /{id}/maintenance/problems/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "total": 6,
  "page": 1,
  "page_size": 25,
  "page_amount": 1,
  "page_count": 1,
  "data": [
    {
      "id": 68,
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "problem_type": null,
      "reported_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "print_job_id": null,
      "description": "Bed adhesion issues during the last 3 prints.",
      "status": "resolved",
      "resolved_at": "2026-04-14T18:56:28+00:00",
      "resolved_by_job_id": null,
      "linked_jobs": [],
      "custom_field_values": [],
      "created_at": "2026-04-14T18:56:25+00:00",
      "printer_group": {
        "id": 99,
        "name": "Workshop A"
      },
      "printer_model_image": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini/product_photo_md.png",
      "printer_model_brand": "Bambu Lab"
    },
    {
      "id": 66,
      "printer_id": 385,
      "printer_name": "Workshop Printer",
      "problem_type": null,
      "reported_by": {
        "id": 1234,
        "name": "John Doe"
      },
      "print_job_id": null,
      "description": null,
      "status": "resolved",
      "resolved_at": "2026-04-14T18:52:11+00:00",
      "resolved_by_job_id": null,
      "linked_jobs": [
        {
          "id": 492,
          "title": "Routine maintenance",
          "status": "in_progress"
        }
      ],
      "custom_field_values": [],
      "created_at": "2026-04-14T18:43:57+00:00",
      "printer_group": {
        "id": 99,
        "name": "Workshop A"
      },
      "printer_model_image": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini/product_photo_md.png",
      "printer_model_brand": "Bambu Lab"
    }
  ]
}

Request

Parameter Type Required Description
printer_id integer no -
problem_type_id integer no -
status string no -
search string no max 255 characters
page integer no min 1
page_size integer no between 1 and 100
sort_id string no One of: created_at, status, printer, problem_type
sort_dir string no One of: asc, desc

Problems: Get types

Retrieve all available problem types.

GET /{id}/maintenance/problems/GetTypes

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/GetTypes \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "data": [
    {
      "id": 1,
      "name": "Clogged nozzle",
      "description": null,
      "icon": "fas fa-circle-xmark",
      "sort_order": 1
    },
    {
      "id": 2,
      "name": "Damaged print bed",
      "description": null,
      "icon": "fas fa-table-cells",
      "sort_order": 2
    },
    {
      "id": 3,
      "name": "Filament jam",
      "description": null,
      "icon": "fas fa-link-slash",
      "sort_order": 3
    },
    {
      "id": 4,
      "name": "Layer shifting",
      "description": null,
      "icon": "fas fa-arrows-left-right",
      "sort_order": 4
    },
    {
      "id": 7,
      "name": "Stringing / oozing",
      "description": null,
      "icon": "fas fa-droplet",
      "sort_order": 7
    },
    {
      "id": 8,
      "name": "Warping",
      "description": null,
      "icon": "fas fa-wave-square",
      "sort_order": 8
    },
    {
      "id": 14,
      "name": "Other",
      "description": null,
      "icon": "fas fa-question",
      "sort_order": 14
    }
  ],
  "auto_ooo_default": true,
  "can_mark_ooo": true,
  "ooo_feature_enabled": true
}

Problems: Create type

Create a new problem type.

Required permissions
maintenance_manage

POST /{id}/maintenance/problems/CreateType

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/CreateType \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "name": "string"
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
name string yes min 1; max 255 characters
description string no max 2000 characters
icon string no max 64 characters

Problems: Report

Report a new problem on a printer. Optionally link the problem to a print job that exhibited it (print_job_id). Reporting a problem does not start a maintenance job; use Create from problem to spin one up that includes recommended remediation tasks.

Required permissions
maintenance_report_problem

POST /{id}/maintenance/problems/Report

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/Report \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "printer_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
printer_id integer yes -
problem_type_id integer no -
description string no max 5000 characters
print_job_id integer no -
mark_out_of_order boolean no -
custom_fields array no -

Problems: Update type

Update an existing problem type.

Required permissions
maintenance_manage

POST /{id}/maintenance/problems/UpdateType

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/UpdateType \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
name string no min 1; max 255 characters
description string no max 2000 characters
icon string no max 64 characters

Problems: Resolve

Resolve a problem.

Required permissions
maintenance_manage

POST /{id}/maintenance/problems/Resolve

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/Resolve \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
resolved_by_job_id integer no -

Problems: Delete

Delete a problem.

Required permissions
maintenance_manage

POST /{id}/maintenance/problems/Delete

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer no -
ids array no min 1

Problems: Delete type

Delete a problem type.

Required permissions
maintenance_manage

POST /{id}/maintenance/problems/DeleteType

Example request

curl https://api.simplyprint.io/{id}/maintenance/problems/DeleteType \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -

Inventory tracks spare parts (nozzles, PTFE tubes, build plates, etc.) including stock levels and low-stock thresholds. Tasks can declare a spare_part they consume, and completing the task auto-decrements the inventory.

Inventory: Get

Retrieve inventory.

Required permissions
maintenance_view

POST /{id}/maintenance/inventory/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "total": 10,
  "page": 1,
  "page_size": 25,
  "page_amount": 1,
  "page_count": 1,
  "data": [
    {
      "id": 155,
      "name": "0.4mm Brass Nozzle",
      "description": "Standard brass nozzle for general-purpose FDM printing",
      "sku": null,
      "quantity": 23,
      "low_stock_threshold": 5,
      "unit": "pcs",
      "cost_per_unit": null,
      "currency": null,
      "buy_url": "https://store.example.com/nozzle-04mm",
      "category": "nozzle",
      "image_url": null,
      "brands": null,
      "printer_models": [],
      "printer_model_ids": [],
      "is_low_stock": false,
      "is_out_of_stock": false,
      "custom_field_values": [],
      "created_at": "2026-04-01T10:18:28+00:00"
    },
    {
      "id": 152,
      "name": "Nozzle 0.4mm (brass)",
      "description": "Standard 0.4mm brass nozzle. Most common size for general-purpose printing.",
      "sku": null,
      "quantity": 0,
      "low_stock_threshold": 2,
      "unit": "pcs",
      "cost_per_unit": null,
      "currency": "USD",
      "buy_url": null,
      "category": "Nozzle",
      "image_url": null,
      "brands": null,
      "printer_models": [],
      "printer_model_ids": [],
      "is_low_stock": true,
      "is_out_of_stock": true,
      "custom_field_values": [],
      "created_at": "2026-03-31T12:50:42+00:00"
    }
  ]
}

Request

Parameter Type Required Description
category string no max 128 characters
low_stock boolean no -
stock_status string no One of: in_stock, low_stock, out_of_stock
search string no max 255 characters
page integer no min 1
page_size integer no between 1 and 100
sort_id string no One of: name, quantity, category, sku, cost_per_unit
sort_dir string no One of: asc, desc
printer_brand string no max 128 characters
printer_model_ids array no -

Inventory: Get defaults

Retrieve the default inventory.

Required permissions
maintenance_inventory_manage

GET /{id}/maintenance/inventory/GetDefaults

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/GetDefaults \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "data": {
    "generic": [
      {
        "key": "generic_nozzle_04",
        "name": "Nozzle 0.4mm (brass)",
        "description": "Standard 0.4mm brass nozzle. Most common size for general-purpose printing.",
        "category": "Nozzle",
        "sku": null,
        "unit": "pcs",
        "low_stock_threshold": 2
      },
      {
        "key": "generic_ptfe_tube",
        "name": "PTFE Bowden tube (1m)",
        "description": "Capricorn-style PTFE tube for Bowden extruder setups. Cut to length.",
        "category": "PTFE tube",
        "sku": null,
        "unit": "m",
        "low_stock_threshold": 1
      }
    ],
    "bambu_lab": [
      {
        "key": "bambu_pei_plate",
        "name": "Bambu Lab textured PEI plate",
        "description": "Replacement textured PEI build plate for X1/P1/A1 series.",
        "category": "Bed plate",
        "sku": null,
        "unit": "pcs",
        "low_stock_threshold": 1,
        "bambu_lab_scoped": true
      }
    ]
  },
  "brand_meta": {
    "generic": {
      "label": "Generic FDM",
      "brand_name": null
    },
    "bambu_lab": {
      "label": "Bambu Lab",
      "brand_name": "Bambu Lab"
    }
  },
  "user_models_by_brand": {
    "Bambu Lab": [
      "A1 Mini",
      "P1P",
      "X1-Carbon"
    ],
    "Prusa": [
      "i3 MK4S",
      "CORE One"
    ]
  },
  "adopted_keys": []
}

Inventory: Create

Create a new inventory.

Required permissions
maintenance_inventory_manage

POST /{id}/maintenance/inventory/Create

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/Create \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "name": "string"
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
name string yes min 1; max 255 characters
description string no max 5000 characters
sku string no max 128 characters
quantity integer no min 0
low_stock_threshold integer no min 0
unit string no max 32 characters
cost_per_unit integer no min 0
currency string no max 3 characters
buy_url string no max 512 characters
category string no max 128 characters
image_id integer no -
brands array no -
printer_model_ids array no -
custom_fields array no -

Inventory: Update

Update an existing inventory.

Required permissions
maintenance_inventory_manage

POST /{id}/maintenance/inventory/Update

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/Update \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
name string no min 1; max 255 characters
description string no max 5000 characters
sku string no max 128 characters
low_stock_threshold integer no min 0
unit string no max 32 characters
cost_per_unit integer no min 0
currency string no max 3 characters
buy_url string no max 512 characters
category string no max 128 characters
image_id integer no -
brands array no -
printer_model_ids array no -
custom_fields array no -

Inventory: Adopt defaults

Apply the default inventory settings.

Required permissions
maintenance_inventory_manage

POST /{id}/maintenance/inventory/AdoptDefaults

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/AdoptDefaults \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "part_keys": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
part_keys array yes min 1

Inventory: Adjust stock

Adjust the stock level of a inventory.

Required permissions
maintenance_inventory_manage

POST /{id}/maintenance/inventory/AdjustStock

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/AdjustStock \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "id": 1,
      "adjustment": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer yes -
adjustment integer yes -
mode string no One of: adjust, set
reason string no max 500 characters

Inventory: Delete

Delete a inventory.

Required permissions
maintenance_inventory_manage

POST /{id}/maintenance/inventory/Delete

Example request

curl https://api.simplyprint.io/{id}/maintenance/inventory/Delete \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
id integer no -
ids array no min 1

Printer: Get profile

Retrieve the maintenance profile of a printer.

Required permissions
maintenance_view

POST /{id}/maintenance/printer/GetProfile

Example request

curl https://api.simplyprint.io/{id}/maintenance/printer/GetProfile \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "printer_id": 1
    }'

Example response

{
  "status": true,
  "message": null,
  "data": {
    "printer_info": {
      "id": 385,
      "name": "Workshop Printer",
      "group": {
        "id": 99,
        "name": "Workshop A"
      },
      "model": {
        "id": 573,
        "name": "A1 Mini",
        "brand": "Bambu Lab",
        "images": {
          "md": {
            "silhouette": null,
            "product": "https://cdn.simplyprint.io/i/printer_types/bambu_lab/a1_mini/product_photo_md.png",
            "custom": null
          }
        }
      },
      "out_of_order": false
    },
    "health": {
      "last_maintenance_at": "2026-04-14T18:09:40+00:00",
      "days_since_maintenance": 4,
      "total_maintenance_count": 13,
      "total_downtime_seconds": 1138472,
      "active_job": {
        "id": 492,
        "title": "Routine maintenance",
        "started_at": "2026-04-14T18:51:41+00:00",
        "priority": "normal",
        "status": "in_progress",
        "completed_tasks": 0,
        "total_tasks": 4
      },
      "next_scheduled_job": {
        "id": 406,
        "title": "Scheduled maintenance - Workshop Printer",
        "scheduled_date": null,
        "priority": "normal",
        "status": "scheduled"
      },
      "open_problems_count": 0,
      "current_status": "in_maintenance"
    },
    "stats": {
      "total_runtime_seconds": 44161,
      "print_count": 41,
      "completed_print_count": 26,
      "success_rate": 63.4
    },
    "active_job_detail": null,
    "job_history": [
      {
        "id": 491,
        "printer_id": 385,
        "printer_name": "Workshop Printer",
        "schedule_id": null,
        "created_by": {
          "id": 1234,
          "name": "John Doe"
        },
        "title": "Nozzle replacement",
        "description": null,
        "status": "completed",
        "priority": "normal",
        "started_at": "2026-04-14T15:23:19+00:00",
        "completed_at": "2026-04-14T15:38:46+00:00",
        "progress": 100,
        "completed_tasks": 2,
        "total_tasks": 2,
        "duration_seconds": 927,
        "parts_used_count": 0
      }
    ],
    "task_completion_history": [
      {
        "name": "Inspect nozzle",
        "category": "inspection",
        "times_completed": 2,
        "last_completed_at": "2026-04-14T15:38:44+00:00",
        "last_completed_by": "John Doe",
        "last_job_id": 491,
        "spare_part_name": null,
        "spare_part_sku": null,
        "spare_part_category": null,
        "spare_part_image_url": null,
        "spare_part_quantity_total": 0
      }
    ],
    "parts_consumed": [
      {
        "id": 155,
        "name": "0.4mm Brass Nozzle",
        "sku": null,
        "category": "nozzle",
        "unit": "pcs",
        "image_url": null,
        "total_quantity": 3,
        "last_used_at": "2026-04-14T14:11:46+00:00"
      }
    ],
    "open_problems": []
  }
}

Request

Parameter Type Required Description
printer_id integer yes -
include_active_job_detail boolean no -

Printer: Get status map

Retrieve the printer status map.

Required permissions
maintenance_view

GET /{id}/maintenance/printer/GetStatusMap

Example request

curl https://api.simplyprint.io/{id}/maintenance/printer/GetStatusMap \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "data": {
    "13": {
      "status": "scheduled",
      "next_scheduled_date": null
    },
    "385": {
      "status": "in_maintenance",
      "next_scheduled_date": null
    },
    "39426": {
      "status": "due",
      "next_scheduled_date": "2026-04-11T19:08:55+00:00"
    },
    "40624": {
      "status": "scheduled",
      "next_scheduled_date": null
    }
  }
}

Timeline: Get

Retrieve timeline.

Required permissions
maintenance_view

POST /{id}/maintenance/timeline/Get

Example request

curl https://api.simplyprint.io/{id}/maintenance/timeline/Get \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "entity_type": "maintenance_job",
      "entity_id": 1
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
entity_type string yes One of: maintenance_job, printer
entity_id integer yes -
page integer no min 1
per_page integer no min 1; max 100
filter string no -
search string no -

Partner: Dashboard

Retrieve the dashboard view for partner.

GET /{id}/maintenance/partner/Dashboard

Example request

curl https://api.simplyprint.io/{id}/maintenance/partner/Dashboard \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}'

Example response

{
  "status": true,
  "message": null,
  "companies": [
    {
      "company_id": 5152,
      "company_name": "Acme Print Lab",
      "in_maintenance": 0,
      "scheduled": 0,
      "overdue": 0,
      "open_problems": 3
    },
    {
      "company_id": 455,
      "company_name": "Acme Print Lab",
      "in_maintenance": 0,
      "scheduled": 0,
      "overdue": 0,
      "open_problems": 0
    }
  ],
  "totals": {
    "in_maintenance": 0,
    "overdue": 2,
    "open_problems": 3,
    "scheduled": 2
  },
  "recent_problems": [
    {
      "id": 61,
      "printer_id": 4182,
      "printer_name": "Printer 4",
      "problem_type": {
        "id": 5,
        "name": "Under-extrusion",
        "description": null,
        "icon": "fas fa-arrow-down",
        "sort_order": 5
      },
      "reported_by": {
        "id": 76716,
        "name": "John Doe"
      },
      "print_job_id": null,
      "description": null,
      "status": "open",
      "resolved_at": null,
      "resolved_by_job_id": null,
      "linked_jobs": [],
      "custom_field_values": [],
      "created_at": "2026-04-09T15:11:26+00:00",
      "company_id": 5152,
      "company_name": "Acme Print Lab"
    }
  ]
}

Partner: Calendar

Retrieve the calendar view for partner.

POST /{id}/maintenance/partner/Calendar

Example request

curl https://api.simplyprint.io/{id}/maintenance/partner/Calendar \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "start": "string",
      "end": "string"
    }'

Example response

{
  "status": true,
  "message": null,
  "events": [
    {
      "id": 224,
      "title": "Acme Print Lab - Printer 2 - {schedule_name}",
      "start": "2026-04-09T16:03:15+00:00",
      "end": null,
      "color": "#DB4437",
      "extendedProps": {
        "status": "overdue",
        "priority": "normal",
        "printer_name": "Printer 2",
        "printer_id": 24423,
        "company_id": 23418,
        "company_name": "Acme Print Lab",
        "progress": 0
      }
    },
    {
      "id": 225,
      "title": "Acme Print Lab - Printer 1 - {schedule_name}",
      "start": "2026-04-09T16:30:43+00:00",
      "end": "2026-04-09T16:32:03+00:00",
      "color": "#4285F4",
      "extendedProps": {
        "status": "completed",
        "priority": "normal",
        "printer_name": "Printer 1",
        "printer_id": 24422,
        "company_id": 23418,
        "company_name": "Acme Print Lab",
        "progress": 100
      }
    },
    {
      "id": 227,
      "title": "Acme Print Lab - Deep clean",
      "start": "2026-04-09T22:00:00+00:00",
      "end": null,
      "color": "#DB4437",
      "extendedProps": {
        "status": "overdue",
        "priority": "normal",
        "printer_name": "Printer 8",
        "printer_id": 24429,
        "company_id": 23418,
        "company_name": "Acme Print Lab",
        "progress": 0
      }
    }
  ]
}

Request

Parameter Type Required Description
start string yes -
end string yes -

Partner: Propagate schedules

Propagate schedules to managed partner.

POST /{id}/maintenance/partner/PropagateSchedules

Example request

curl https://api.simplyprint.io/{id}/maintenance/partner/PropagateSchedules \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "schedule_ids": [],
      "company_ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
schedule_ids array yes min 1; max 100
company_ids array yes min 1; max 100
overwrite_existing boolean no -

Partner: Propagate templates

Propagate templates to managed partner.

POST /{id}/maintenance/partner/PropagateTemplates

Example request

curl https://api.simplyprint.io/{id}/maintenance/partner/PropagateTemplates \
  -X POST \
  -H 'accept: application/json' \
  -H 'X-API-KEY: {API_KEY}' \
  -d '{
      "template_ids": [],
      "company_ids": []
    }'

Example response

{
  "status": true,
  "message": null
}

Request

Parameter Type Required Description
template_ids array yes min 1; max 100
company_ids array yes min 1; max 100
overwrite_existing boolean no -

Permissions and scopes

Permissions

Last updated: April 20, 2026

These permissions are used to control access within a company. The permissions are tied to the user groups within the company.

The owner of a company has all permissions.

Permission Description
access_all_printers Access all printers
ai_printer_settings Manage AI settings
ai_printer_toggle Toggle AI Failure Detection
all_slicer_modes Access all slicer modes
approve_quota_requests Approve quota requests
archive_print_jobs Archive print jobs
assign_peer_rank Assign peer rank
autoprint_manage Manage AutoPrint
baby_stepping Baby stepping
bed_leveling Bed leveling tool
can_export Export data
cancel Can cancel
cancel_decide_queue_return Decide queue return on cancel
cancel_others Cancel others' prints
change_filament Change filament
change_print_speed Change print speed
change_temps Change temperatures
change_user_rank Can change user rank
change_user_school_class Change user's school class
clear_bed Clear bed
courses_manage Manage courses
courses_view View courses
create_filament Add new filament
create_org_folder Create organisation folders
custom_fields_edit_all_print Edit all print custom fields
custom_fields_edit_own_print Edit own print custom fields
custom_fields_manage Manage custom fields
custom_slicer_profiles Allow custom slicer profiles
delete_user Can delete users
display_screen_settings Display Screens management
download_others_print_jobs Download other user's print jobs
edit_tags Edit tags
emergency_stop Emergency stop
feature_unlocks_manage Manage Feature Unlocks
filament_adjust_weight Adjust filament weight
filament_barcode_scanner Barcode & QR code scanner access
filament_dry Dry filament
filament_generate_labels Generate filament labels
filament_label_pick_default_presets Use default filament label presets
filament_label_presets_manage Manage filament label presets
filament_label_settings Access filament label settings
filament_label_use_any_user_preset Use any user's label presets
filament_locations_manage Manage filament locations
filament_nfc_assign_flash Assign & flash filament NFC tags
filament_nfc_scanner NFC scanner access
filament_settings Filament settings
filament_view_all_print_jobs View all filament print job history
filament_view_spool_details View spool details
files_assign_custom_tags Custom tags (files)
files_material_tag Material tags (files)
files_nozzle_tag Tag nozzle (files)
gcode_profiles G-code profiles
goto_local Go to local
invite_users Can invite users
maintenance_complete Complete maintenance tasks
maintenance_inventory_manage Manage spare parts inventory
maintenance_manage Manage maintenance
maintenance_report_problem Report maintenance problems
maintenance_view View maintenance
manage_quotas Manage quotas & limits
manage_subscription Manage subscription
manage_user_balance Manage user balance
manual_user_email_confirm Can confirm user email
one_click_print 1-click print
org_admin Edit organisation settings
org_api Organisation API key access
org_hub_settings Edit Hub settings
org_rank_management Manage user groups
org_school_settings_manage School settings management
org_user_registration_settings Edit registration settings
org_view_statistics View organization-wide statistics
panel_printing Allow panel printing
pause Can pause
print Can print
print_queue Access print queue
printer_add Add printers
printer_delete Delete printers
printer_edit Edit printers
printer_group_manage Manage printer groups
printer_info See printer info
printer_restart Restart printers
printer_settings Printer settings
printer_status_warnings See printer status warnings
printer_update Update printers
queue_approve Approve/deny queue items
queue_approve_view_all View all pending items
queue_assign_custom_tags Custom tags (queue item)
queue_assign_printers Assign printers & printer groups to queue item
queue_delete_others_comments Delete others' comments
queue_download_others Download other users' jobs
queue_edit_others Edit other users' items
queue_groups Queue groups
queue_material_tag Material tags (queue item)
queue_move_items Move queue items between queue groups
queue_nozzle_tag Tag nozzle (queue item)
queue_print_slice Start & slice via print queue
queue_read_notes Read others' notes
queue_remove_all Remove all queue items / other users' items
queue_revive_done_items Move done jobs back to the queue
queue_see_done_items See done items
queue_see_others See other users' job items
queue_skip_approval Skip approval requirement
queue_whole_folder Queue whole folders from 'Your files'
refer_a_friend_settings 'Refer a friend' feature & settings access
refund_user_quota Refund user quota
reorder_queue Re-order print queue
reprint_file Reprint files
reprint_others Reprint other people's files
school_dashboard_view View school dashboard
see_archived_jobs See archived print jobs
see_cam See camera
see_filament_tab View filament system
see_integrations Can see integrations page
see_livechat See & use livechat widget
see_print_history Can see print history page
see_print_job_page Can see individual print job pages
see_printers_no_access Can see printers they don't have access to
see_slicer_default_profiles Access official slicer profiles
see_statistics Can see statistics page
see_who_printed See who printed
send_raw_gcode Send G-code
set_user_teacher Set user as teacher
skip_objects Can skip objects
slice Can slice
slicer_add_plate Add plate
slicer_auto_arrange Auto arrange models
slicer_auto_rotate Auto rotate
slicer_change_bed_type Change bed type
slicer_change_engine Change slicer engine
slicer_change_filament_profile Change filament profile
slicer_change_machine_profile Change machine profile
slicer_change_nozzle_size Change nozzle size
slicer_change_nozzle_volume_type Change nozzle volume type
slicer_change_print_profile Change print profile
slicer_change_profile_settings Change slicer print profile settings
slicer_flush_volumes Flush volumes
slicer_grid_snap Grid snap
slicer_history Slicer history
slicer_lay_on_face Lay on face
slicer_measure Measure tool
slicer_org_profiles Make organisation slicer profiles
slicer_org_settings Access & change account slicer settings
slicer_paint_color Paint color
slicer_paint_fuzzy_skin Paint fuzzy skin
slicer_paint_seam Paint seam
slicer_paint_support Paint support
slicer_personal_ui_settings Change personal UI settings
slicer_simplify_model Simplify model
slicer_text Add and edit text
staggered_start_manage Manage staggered start groups
unarchive_print_jobs Unarchive print jobs
use_out_of_order_printers Allow using out-of-order printers
view_all_print_history View everyone's print history
view_news See news
view_print_job_user View print job user
view_users Can see "Users" tab in panel
webhooks_manage Webhook management
widget_control "Control" widget
widget_device_health See device health
widget_print_history Printer print history widget
z_offset_calibration Z-Offset Calibration

OAuth2 scopes

These scopes are used to control access to the API. The scopes are tied to the OAuth2 access token.

Scope Description
balance.read View your balance history
balance.write Manage your balance
display_screens.read View your display screens
display_screens.write Manage your display screens
files.read View your files and folders
files.temp_upload Upload temporary files
files.write Manage your files and folders
print_history.read View your print history
printers.actions Operate your printers
printers.read View your printers' details
printers.write Manage your printers' details
queue.read View your print queue
queue.write Manage your print queue
quota.read View your quota
quota.write Manage your quota
slicer.read View your slicer profiles
slicer.write Manage your slicer profiles
spools.read View filament spools
spools.write Manage filament spools
statistics.read View your print statistics
tags.read View your custom tags
tags.write Manage your custom tags
user.read View your user details
webhooks.read View your webhooks
webhooks.write Manage your webhooks

Errors

The SimplyPrint API uses the following HTTP error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API key is wrong.
403 Forbidden -- Request not allowed.
404 Not Found -- Endpoint not found.
405 Method Not Allowed -- You tried to access an endpoint with an invalid method.
406 Not Acceptable -- You requested a format that isn't json.
410 Gone -- The endpoint requested has been removed from our servers.
429 Too Many Requests -- You're requesting too much - slow down
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.

Error Response

Error response example:

{
  "status": false,
  "message": "No API key provided, or not logged in"
}

When an error occurs, the API will return a JSON object with the following fields:

Field Description Type
status The status of the request Boolean
message A message describing the error String/null