# 3D Printer API: drive your fleet from code with the SimplyPrint REST API

**Minimum Plan:** Pro

REST API for 3D printers - over 100 endpoints to queue jobs, start prints, manage files and filament, watch printer state. JSON over HTTPS, X-API-KEY or OAuth2 auth.

**Categories:** core

*A REST API for your 3D printer fleet. JSON over HTTPS. Auth in one header.*

##  The SimplyPrint 3D printer API

Drive SimplyPrint from your own software. Queue jobs from your ERP, build a custom dashboard, plug into an existing workflow, or wire SimplyPrint into Zapier, n8n or Make. Every action you can take in the panel is reachable as a JSON endpoint - documented, versioned, and stable. Works the same whether your fleet is Prusa, Bambu Lab, Creality, Anycubic, Elegoo, or anything that speaks OctoPrint or Klipper.

## Same fleet. Same data. From your own code.

The API exposes the same operations the panel uses: add to the queue, fetch printer state, upload files, inspect filament, read job history, drive bulk actions. One API key, one base URL per account, and you are building.

## Start a print in one API call

The fastest path from your code to a moving extruder: POST a file ID to */queue/AddItem*, target one or more printers, and SimplyPrint takes it from there. Behind the scenes the queue runs the same matching, approval and routing logic that the panel uses - so the print starts on the same printer it would have if a human pressed Print.
curl -X POST "https://api.simplyprint.io/{companyId}/queue/AddItem" \
 -H "X-API-KEY: your_api_key_here" \
 -H "Content-Type: application/json" \
 -d '{
"fileId": "abc123",
"amount": 1,
"for_printers": "42,43",
"position": "top"
}'
Response on success:
{
"status": true,
"message": null,
"approval_status": "not_required",
"id": 90817,
"queue_position": 1
}
The *{companyId}* in the URL is your account ID, not a version - find it in the panel URL after sign-in. Set *for_printers* to target specific printers, or omit it to let SimplyPrint pick a compatible one. Set *position: "top"* to jump the queue.

## Drive every part of your fleet from code

Over 100 REST endpoints covering every part of your fleet - printers, queue, files, filament, jobs, statistics, webhooks, custom fields and more. Not a slimmed-down subset: if it has a page in the panel, it has an endpoint in the API. Users, schools, maintenance, tags, slicer profiles and G-code macros are all wired in too.

- **Queue** - add items via */queue/AddItem*, list pending approvals, set printer assignments, change order, approve or deny

- **Printers** - inspect state, send G-code, jog axes, control fans and motors, home, pause, resume, cancel

- **Files & jobs** - upload, move, fetch history, archive, retrieve cost estimates

- **Filament** - read inventory, assign to printers, adjust weight, mark dried, manage brands and colors

- **Org & users** - manage members, permissions, custom fields, tags, school classes

## Read state. Send commands. Same auth header.

List every printer with one call. The response is the same printer object the panel renders - status, current job, temperatures, filament loaded, the lot.
curl "https://api.simplyprint.io/{companyId}/printers/Get" \
 -H "X-API-KEY: your_api_key_here"
Pause a running print, send a one-off G-code line, jog an axis - all live endpoints, all the same JSON-in, JSON-out shape.
curl -X POST "https://api.simplyprint.io/{companyId}/printers/actions/Pause" \
 -H "X-API-KEY: your_api_key_here" \
 -H "Content-Type: application/json" \
 -d '{ "pid": 42 }'
curl -X POST "https://api.simplyprint.io/{companyId}/printers/actions/SendGcode" \
 -H "X-API-KEY: your_api_key_here" \
 -H "Content-Type: application/json" \
 -d '{ "pid": 42, "gcode": "G28 X Y" }'

## REST, JSON, one header - that's it

Every endpoint is HTTPS, JSON in, JSON out. Auth is one header: *X-API-KEY: your_key_here*. Responses always come back with a *status* boolean and an optional *message*, so error handling is the same shape across every call.

The base URL is *https://api.simplyprint.io/{companyId}/{endpoint}* - the *{companyId}* is your account ID, not an API version. No SDK is required; cURL works, Postman works, every HTTP client you already have works.

## Two tiers: Basic API and Enhanced API

API access comes in two tiers, gated by plan. Basic gives you read access plus light writes; Enhanced unlocks the heavy hitters - file uploads, queue mutations, starting prints and sending G-code.

### Basic API

Read printer state, queue, jobs, history, filament and tags.

### Enhanced API

Full read and write: upload, start prints, send G-code, bulk actions.

## OAuth2 for partner integrations

Building a third-party app that other SimplyPrint customers will use? Use OAuth2 so each customer can connect their own account with a consent screen - no shared API keys, no copy-paste secrets. This is the same flow our official Cura integration uses, and the same flow we provision for partner integrations on platforms like Zapier, n8n, Make and Activepieces.

- **Authorization URL:** *https://simplyprint.io/panel/oauth2/authorize*

- **Token exchange:** *https://simplyprint.io/api/0/oauth2/Token* (the *0* is intentional - the exchange is account-scopeless)

- **Discover the bound account:** after exchange, call */account/GetUser* with the bearer token to learn which company the user picked

- **Subsequent calls:** use the standard */api/{companyId}/{endpoint}* path with the bearer token

# 1) Send the user to the consent screen
https://simplyprint.io/panel/oauth2/authorize
?response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=https://your-app.example.com/callback
&scope=printers.read+queue.write+files.read
&state=

# 2) Exchange the returned code for an access token
curl -X POST "https://simplyprint.io/api/0/oauth2/Token" \
 -d "grant_type=authorization_code" \
 -d "code=AUTH_CODE_FROM_CALLBACK" \
 -d "client_id=YOUR_CLIENT_ID" \
 -d "client_secret=YOUR_CLIENT_SECRET" \
 -d "redirect_uri=https://your-app.example.com/callback"

# 3) Discover the bound company, then call API as that company
curl "https://simplyprint.io/api/0/account/GetUser" \
 -H "Authorization: Bearer ACCESS_TOKEN"
Approved OAuth2 clients are provisioned via the OAuth2 Client Request Form - send us your redirect URIs, requested scopes, and a one-paragraph description of what your app does.

## Pair the API with webhooks for push events

The REST API is the *pull* side - you ask, SimplyPrint answers. Pair it with webhooks for the *push* side: a print starts, a job finishes, a filament runs out, a queue item is approved - SimplyPrint POSTs the event to your endpoint so you don't have to poll. Together they cover every integration pattern.

Webhooks are part of Print Farm and above, and ride the same event model the panel uses internally.

## Get an API key in 30 seconds

Sign in to the panel, open *account settings → API*, name your key, copy it. Done. Keys are per-user and respect that user's permissions in the account - so an integration runs with exactly the access its owner has, no more.

## The full reference lives at apidocs.simplyprint.io

Every endpoint, request and response shape, error codes, OAuth2 flow, scope list. The docs are AI-friendly too - there is an *llms.txt* for one-shot AI ingestion and a structured *api/index.json* if you want to build tooling on top of the catalogue.

## Bonus: the open Open Filament Database API

Beyond the SimplyPrint API, we also steward the **Open Filament Database** - an open-source, MIT-licensed catalog of 3D printing filament: brands, materials, colors, sizes and stores. It has its own **fully open JSON API** - no key, no auth, no rate tier - so you can pull brand, material and color data straight into your own app, slicer, store or spool tracker. It is the same data that powers SimplyPrint's own filament presets.

Endpoint: [api.openfilamentdatabase.org](https://api.openfilamentdatabase.org/api/v1/index.json) - full docs at [openfilamentdatabase.org/docs](https://openfilamentdatabase.org/docs).

## Frequently asked questions

### How do I get an API key?

API keys are created from [account settings → API](https://simplyprint.io/panel/user_settings/api). Each key is bound to your user and inherits your permissions in the account. Pro and above unlocks API access; Free and Basic plans do not expose an API.

### What are the rate limits?

60 requests per minute on Pro, 180 per minute on Print Farm and School, 600 per minute on Enterprise. Free, Basic, Cloud Slicer and Filament Manager plans do not expose an API at all. Hitting the limit returns a short timeout; the limiter resets after the minute window rolls over. Bursting a few extra calls in a single second is fine.

### API key or OAuth2 - which should I use?

**API key** for your own integrations against your own account - simplest path, one header. **OAuth2** if you are building a product that other SimplyPrint customers will connect to their own account, so each customer authorizes via a consent screen and you never see their credentials. Approved OAuth2 clients are provisioned by SimplyPrint via the [OAuth2 Client Request Form](https://forms.gle/rC9AzWwNtwMmWXE68).

### Does it work with my Prusa / Bambu Lab / OctoPrint printer?

Yes. SimplyPrint connects to Prusa printers (MK4, MK4S, XL, Mini+, MK3.5, MK3.9, CORE One) via firmware-side integration, Bambu Lab printers (X1C, P1S, P1P, A1, A1 Mini, H2D) via direct connection, and anything OctoPrint-compatible via our plugin. From the API's perspective they're all the same printer object - so your code works the same regardless of brand. See the brand-specific pages for ecosystem detail: [Prusa API](/features/api/prusa-api), [Bambu Lab API](/features/api/bambu-lab-api), [OctoPrint replacement](/features/api/octoprint-replacement).

### Are there webhooks for push events?

Yes. Webhooks send push notifications for queue, file, printer, job and filament events so you do not have to poll. They are part of Print Farm and above and live on a sibling page: [webhooks feature page](/features/webhooks).

### Is there an MCP server for AI agents?

Yes - the SimplyPrint MCP server exposes the same fleet operations as a native tool surface for Claude, Claude Code and other MCP-compatible AI clients. OAuth2-based, scope-gated, Pro and above. See the [MCP feature page](/features/mcp).

### Are there official SDKs?

Not yet - the API is plain JSON over HTTPS, so every modern HTTP client gives you a usable surface in a few lines. We ship an [official Cura integration](https://help.simplyprint.io/en/article/uploading-from-cura-1nqrt6h/), a [SimplyPrint MCP server](/features/mcp) for AI agents, and we provision OAuth2 clients for partner integrations on platforms like Zapier, n8n, Make and Activepieces on request. If you need a language-specific SDK, talk to us via [contact@simplyprint.io](mailto:contact@simplyprint.io).

### Is there a sandbox or test environment?

There is no public sandbox - integrations are built against your real account. You can create a separate (free or Pro) test account for development, generate its own API key, and point your integration at it before swapping to production keys. We are happy to provision a dev-friendly setup on request for serious integration partners.

### What is the URL format - is there a v1 or v2?

The base is *https://api.simplyprint.io/{companyId}/{endpoint}*. The number after the host is your **account ID**, not a version - so */api/123/account/Test* hits the *account/Test* endpoint for account 123. The API itself does not version in the URL today; we add to it but do not break the existing surface.

If we ever ship a major-major change - breaking response shapes, a different auth model, or a URL restructure - it will land behind a */v2* (or similar) prefix and the existing API will keep working alongside it. Nothing like that is on the roadmap right now, just flagging how we would handle it.


---

**Learn more:** [Help Article](https://help.simplyprint.io/en/article/the-simplyprint-api-a-quick-intro-for-developers-17fpo7l/)
