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.

Get started for free More info & how-to
Feature image

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.

Browse all endpoints

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

Browse all endpoints

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.

Building for a specific printer brand?

SimplyPrint is hardware-agnostic, but our brand-specific API pages cover the endpoints, code samples and quirks that matter for each ecosystem. If you're writing integration code that targets Prusa, Bambu Lab or OctoPrint hosts specifically, start here.

Drive Prusa MK4, MK4S, MK3.9, MK3.5, Mini+, XL and CORE One from code. PrusaLink-compatible.

Drive Bambu Lab X1C, P1S, P1P, A1, A1 Mini, H2D from code. AMS-aware.

Migrating off an OctoPrint REST integration? Same shape, hosted in our cloud, no new servers to stand up.

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.

frame frame

Live API documentation with cURL for every endpoint

Every endpoint has a dedicated docs page with the request signature, parameter table, copy-paste cURL example and a real success response on the right. No more guessing at payload shapes - the docs are the spec.

Print jobs

POST /{id}/jobs/GetPaginatedPrintJobs - paginated ongoing or finished jobs, filterable by printer, user, status and date.

Printer info

POST /{id}/printers/Get - one or many printers with state, filament, hardware specs and maintenance flags.

File upload (Enhanced)

POST files.simplyprint.io/{id}/files/Upload - single-request up to 100 MB, multi-part for larger.

API key auth

One header (X-API-KEY), one base URL. Get a key from your account settings.

OAuth2 flow

For partner apps - each customer connects their own account via the standard authorize / token exchange.

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=<random>

# 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.

Request OAuth2 client access

API rate limits and capability by plan

Free, Basic, Cloud Slicer and Filament Manager plans do not expose an API. Pro and above unlock Basic; Print Farm and above unlock Enhanced (file uploads and write mutations).

Feature / Limit Free Basic Pro Print Farm Enterprise School Cloud Slicer Filament Manager
API requests per minute
Rolling per-minute limiter. Bursts inside the window are fine; hitting the limit returns a short timeout, the limiter resets after the minute rolls over.
- - 60 180 600 180 - -
Basic API access
Read printer state, queue, jobs, history, filament, tags. Pro and above.
Enhanced API (full read & write)
Unlocks file uploads, queue mutations that start prints, direct G-code send, and bulk write operations. Print Farm and above.
Zapier, n8n, Make & Activepieces
Connect via the official OAuth2-based pieces. Write capability inherits the account's API tier.
AI agents via MCP
Connect Claude, Claude Code and other MCP-compatible AI clients to drive your fleet in natural language.

Want to learn more about our plans?

View full pricing & feature comparison

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.

See the Webhooks feature
Feature image
Feature image

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.

Open your API settings

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.

Open the API reference

Frequently asked questions

API keys are created from account 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.
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 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.
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, Bambu Lab API, OctoPrint replacement.
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.
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.
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, a SimplyPrint MCP server 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 [email protected].
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.
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.

Table of Contents