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)
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:
- Using an API key (recommended)
- This is the recommended method for most users. This method requires a SimplyPrint account and an API key.
- Using OAuth2
- This method is only available for approved integrations. You can use OAuth2 to access SimplyPrint API endpoints on behalf of a user.
Using an API key (recommended)
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:
- Your API key may be invalid or missing. Make sure that you have a valid API key and that you are including it in the request header as shown in the example.
- You may not have access to the organization specified in the
idparameter. Make sure that you are using the correctidfor the organization that you have access to. - There may be a problem with the base API URL or endpoint. Double check that you are using the correct base API URL and endpoint in your request.
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:
- Set the position of one or more printer groups - Use the
grouparray to change the sort order of groups - Move printers between groups - Use
printer[].groupto transfer printers from one group to another - Reorder printers within a group - Use
printer[].positionto set new positions (omitprinter[].groupto 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. |
Create Invitation Link
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. |
Validate printer (partner-wide printer search)
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. |
Validate filament (partner-wide filament search)
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). |
Jobs: Link problems
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
}
Tasks: Get recommended
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 |