Skip to main content

PrintNode API Client Python Library

[!NOTE] This repository is a community-maintained fork of the PrintNode Python API client. It is not an official PrintNode release unless PrintNode explicitly confirms maintainership or transfer. The maintained project name is printnode_community.

This is a Python library to interact with PrintNode's remote printing API. This client allows you to access the API's functions for quick use in Python scripts.

Requirements

  • Python 3.10+
  • requests
  • future

Installation

After the first maintained release is published, install the package with:

uv add printnode_community

or:

python -m pip install printnode_community

Install from source with uv:

uv sync

For editable development installs, use:

uv pip install -e .

Until the first maintained release is published, prefer installing from a reviewed Git tag or branch rather than relying on an unpublished local build.

Development

Install development dependencies and run tests with:

uv sync
uv run pytest

Build and validate package artifacts with:

uv build
uv run twine check dist/*

Releases

Release publishing is not enabled for general use yet. See RELEASE.md for the release process and TestPyPI/PyPI workflow requirements.

Getting Started

The default constructor for the Library is a Gateway, which is constructed with at minimum of one key-word argument, that being an api-key.

from printnode_community import Gateway
my_account_gateway = Gateway(apikey='my_api_key')

After creating a Gateway, you can access any requests as such:

my_account_id = my_account_gateway.account.id
new_tag = my_account_gateway.ModifyTag("Likes","PrintNode")

Initial Gateway Configuration

You can authenticate in 2 ways other than using an api-key:

Gateway(email='email',password='password')
Gateway(clientkey='ckey')

The three below will authenticate with access to child accounts of a specific user:

Gateway(apikey='api-key',child_email='c_email')
Gateway(apikey='api-key',child_ref='c_creator_ref')
Gateway(apikey='api-key',child_id='c_id')

Gateway Methods

All of these will have the associated API doc next to them. Any of the argument types will be exactly the same as the attributes used in a normal request. Any "Objects" under type are represented as a dict, which will have the same representation as the JSON objects.

Computers Library

This handles anything that is associated with a computer, such as Printers, PrintJobs, States (of PrintJobs) and Scales.

Account lookup

https://www.printnode.com/docs/api/curl/#whoami

account(self)

Returns an Account object of the currently authenticated account.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
print(gateway.account.firstname)

'''
Results:
Mr
'''

Computer lookup

https://www.printnode.com/docs/api/curl/#computers

computers(self, computer)

Given a set of computers, returns these computers. Given only one id, returns that computer.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
print(gateway.computers(computer=10027).name)

'''
Results:
5.2015-07-10 15:04:40.253763.TEST-COMPUTER
'''

Printer lookup

https://www.printnode.com/docs/api/curl/#printers

printers(self, computer=None, printer=None)

There are four ways this can be run:

  • printer & computer argument both None: Gives all printers attached to the account.
  • printer str/int, computer None: Gives a printer found from either an id or the name of a printer, taken from all possible printers.
  • printer None, computer int: Gives all printers attached to the computer given by an id.
  • printer str/int, computer int: Gives a printer found from either an id or the name of a printer, taken only from printers attached to the computer specified by the computer's id.
from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
print(gateway.printers(printer=50120).name)
for printer in gateway.printers(computer=10027):
    print(printer.name)

'''
Results:
10027.3.TEST-PRINTER
10027.1.TEST-PRINTER
10027.2.TEST-PRINTER
10027.3.TEST-PRINTER
10027.4.TEST-PRINTER
10027.5.TEST-PRINTER
'''

PrintJob lookup

https://www.printnode.com/docs/api/curl/#printjob-viewing

printjobs(self, computer=None, printer=None, printjob=None

There are five ways this can be run:

  • No arguments : Returns all printjobs associated with the account.
  • computer int : Returns all printjobs relative to printers associated with the computer specified by the argument computer.
  • printer int : Returns all printjobs relative to the printer specificed by the argument printer.
  • computer int, printer int : Returns all printjobs relative to the printer specified by the argument printer from printers with access to computer.
  • printjob int : Returns specific printjob.
from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
printjob_id = gateway.printjobs(computer=10027)[0].id
print(gateway.printjobs(printer=50120)[0].id)
print(gateway.printjobs(printjob=printjob_id))

'''
Results:
251137
PrintJob(id=251127, printer=Printer(id=50118, computer=Computer(id=10027, name='5.2015-07-10 15:04:40.253763.TEST-COMPUTER', inet=None, inet6=None, hostname=None, version=None, create_timestamp='2015-07-10T15:04:40.253Z', state='created'), name='10027.1.TEST-PRINTER', description='description', capabilities={'capability_1': 'one', 'capability_2': 'two'}, default=True, create_timestamp='2015-07-10T15:04:40.253Z', state=None), title='50118.1.TEST-PRINTJOB', content_type='pdf_uri', source='API test endpoint', expire_at=None, create_timestamp='2015-07-10T15:04:40.253Z', state='new')
'''

PrintJob creation

https://www.printnode.com/docs/api/curl/#printjob-creating

PrintJob(self, computer=None, printer=None, job_type='pdf', title='PrintJob',options=None,authentication=None,uri=None,base64=None,binary=None)

Only one of uri, base64 and binary can be chosen.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
print(gateway.PrintJob(printer=50120,options={"copies":2},uri="a.pdf"))

'''
Results:
PrintJob(id=251153, printer=Printer(id=50120, computer=Computer(id=10027, name='5.2015-07-10 15:04:40.253763.TEST-COMPUTER', inet=None, inet6=None, hostname=None, version=None, create_timestamp='2015-07-10T15:04:40.253Z', state='created'), name='10027.3.TEST-PRINTER', description='description', capabilities={'capability_1': 'one', 'capability_2': 'two'}, default=False, create_timestamp='2015-07-10T15:04:40.253Z', state=None), title='PrintJob', content_type='pdf_uri', source='PythonApiClient', expire_at=None, create_timestamp='2015-07-10T15:05:27.087Z', state='new')
'''

State lookup

https://www.printnode.com/docs/api/curl/#printjob-states

states(self, printjob_set)

Given a set of printjobs as a string (check https://www.printnode.com/docs/api/curl/#parameters for examples), returns a list of object type State. As each PrintJob can have many states, states() is a list of PrintJobs that each have a list of States.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
printjob_id = gateway.printjobs(computer=10027)[0].id
print(gateway.states(printjob_id)[0][0].state)

'''
Results:
new
'''

Accounts Library

This handles anything to do with accounts, such as Account creation, deletion and modificaiton, api-key handling, tag handling and Client handling.

Tag lookup

https://www.printnode.com/docs/api/curl/#account-tagging

tag(self, tagname)

Given a tagname, returns the value of that tag.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
print(gateway.tag("Likes"))

'''
Results:
Everything!
'''

Tag modification

ModifyTag(self, tagname, tagvalue)

Given a tagname and tagvalue, either creates a tag with specifed value if tagname doesn't exist, otherwise changes the value.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
gateway.ModifyTag("Likes","PrintNode")
print(gateway.tag("Likes"))

'''
Results:
PrintNode
'''

Tag deletion

DeleteTag(self, tagname)

Given a tagname, deletes that tag. Returns True on successful deletion.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
gateway.ModifyTag("Likes","PrintNode")
gateway.DeleteTag("Likes")
print(gateway.account.tags)

'''
Results:
[]
'''

Account creation

https://www.printnode.com/docs/api/curl/#account-creation

CreateAccount(self, firstname, lastname, email, password, creator_ref=None, api_keys=None, tags=None)

Creates an account with the specified values. The last three are optional.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"}
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
print(new_account_gateway.account.firstname)
new_account_gateway.DeleteAccount()

'''
Results:
A
'''

Account deletion

https://www.printnode.com/docs/api/curl/#account-deletion

DeleteAccount(self)

Deletes the child account that is currently authenticated. Accounts can only be deleted if authenticated by a parent account's api-key and a reference to the child account being deleted (e.g the child account's id)

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"}
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
new_account_gateway.DeleteAccount()
print(new_account["Account"]["id"] in gateway.account.child_accounts)

'''
Results:
False
'''

Account modification

https://www.printnode.com/docs/api/curl/#account-modification

ModifyAccount(self, firstname=None, lastname=None, password=None, email=None, creator_ref=None)

Given one or more arguments, changes the account details specified by the arguments.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"}
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
new_account_gateway.ModifyAccount(firstname="B")
print(new_account_gateway.account.firstname)
new_account_gateway.DeleteAccount()

'''
Results:
B
'''

Api-key lookup

https://www.printnode.com/docs/api/curl/#account-apikeys

apikey(self, api_key)

Returns value of api-key specified by the argument.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"},
    api_keys=["Production"]
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
print(new_account_gateway.api_key("Production"))
new_account_gateway.DeleteAccount()

'''
Results:
5a272ed7406d351be86f25be388810dc83b8f52d
'''

API Key Creation

CreateApikey(self, api_key)

Creates an api-key with the api-key's reference given by the argument.

from printnode_community import Gateway

gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"},
    api_keys=["Production"]
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
new_account_gateway.CreateApiKey("Development")
print(new_account_gateway.account.api_keys)
new_account_gateway.DeleteAccount()

'''
Results:
{'Development': '123SecretAPIKey', 'Production': '456SecretAPIKey'}
'''

API Key Deletion

DeleteApikey(self, api_key)

Deletes api-key specified by the argument.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"},
    api_keys=["Production"]
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
new_account_gateway.DeleteApiKey("Production")
print(new_account_gateway.account.api_keys)
new_account_gateway.DeleteAccount()

'''
Results:
[]
'''

Client Key creation

https://www.printnode.com/docs/api/curl/#account-delegated-auth

clientkey(self, uuid, edition, version)

Generates a clientkey for the account.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
new_account = gateway.CreateAccount(
    firstname="A",
    lastname="Person",
    password="password",
    email="aperson@emailprovider.com",
    tags={"Likes":"Something"},
    api_keys=["Production"]
    )
new_account_gateway = Gateway(url='https://api.printnode.com',apikey='secretAPIKey',child_id=new_account["Account"]["id"])
new_clientkey = new_account_gateway.clientkey(
    uuid="0a756864-602e-428f-a90b-842dee47f57e",
    edition="printnode",
    version="4.7.2")
print(new_clientkey)
new_account_gateway.DeleteAccount()

'''
Results:
ck-nwa2SSvSGl1YR5zrHDVVgfdpJ8JLfVCvwaCWj8dQXmZW
'''

Download client lookup

https://www.printnode.com/docs/api/curl/#account-download-management

clients(self, client_ids = None, os = None)

This has three different outcomes:

  • os and client_ids both None: Returns all clients available for the current account.
  • os str and client_ids None: Returns the most recent version for given OS ("windows" or "osx" only)
  • os None and client_ids str: Given a set of ids (e.g "11-15"), return all clients in that set.

Having both set will default to showing the most recent version for the os argument.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
for client in gateway.clients(client_ids="11-12"):
    print(client.id)
print(gateway.clients(os="windows").os)

'''
Results:
12
11
windows
'''

Download client controlling

ModifyClientDownloads(self, client_id, enabled)

Given a set of ids and either True or False, sets whether the clients are enabled or not. Returns a list of modified clients.

from printnode_community import Gateway

gateway=Gateway(url='https://api.printnode.com',apikey='secretAPIKey')
gateway.ModifyClientDownloads(11,False)
print(gateway.clients(client_ids=11)[0].enabled)

'''
Results:
False
'''

Metadata

Release files for printnode-community 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for printnode-community 0.3.0
File Size Uploaded
printnode_community-0.3.0.tar.gz 60.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for printnode-community 0.3.0
File Interpreter ABI Platform
printnode_community-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 75.8 kB

Release files / printnode_community-0.3.0.tar.gz

Download URL printnode_community-0.3.0.tar.gz
Size 60.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c9ded7f163f0f68a6a13bbb0dfdba20f01e8c0a6ddd824f5bccbeb0de2e0243a
BLAKE2b-256 checksum
How to use checksums
0f43d6440f2af512815f617e81d6c1d42bf62d6608d5fd3b0151fa8c04bde941
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 26, 2026.

Transparency log

Release files / printnode_community-0.3.0-py3-none-any.whl

Download URL printnode_community-0.3.0-py3-none-any.whl
Size 15.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f2b7c952d4722920785e2a024332e07023ee1e8faa1aa9382a887db68a94cdcc
BLAKE2b-256 checksum
How to use checksums
6c016334b95a6761ef96fb0172fcfc7fd043c5ce5fa4e761a606dcdc8ed81bb2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 26, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page