API Reference

Introduction

PrintNode exposes its functionality through an HTTPS API. This API is used for printing, querying data (including scale data) and account management.

Before using the PrintNode API, you will need to sign up for a PrintNode account. Signing up is free and carries no obligations.

All API requests must be authenticated. The easiest way to get started is to generate an API Key and use it to authenticate your API requests.

If you have any questions or concerns, want some help or see anything unexpected, please contact us.

API Endpoint

The base URL for the API is:

https://api.printnode.com

Where relative URLs appear in this documentation, they are relative to this base URL.

Overview

Authentication

All requests must be authenticated using HTTP basic authentication. API Keys are links to a single account and are used for both authentication and identification. Any API Key attached to your account will work. You can have as many API Keys as you wish.

Submitting the API Key as the username and leaving the password empty will authenticate you.

You can view and create API Keys here.

An example cURL request might look like this:

curl -u 44784dd8d88be9631046ff83e9044419ff824b10: \ https://api.printnode.com/whoami

cURL uses the -u flag to transmit basic auth credentials. Note the colon at the end of the username string. This is not part of your API Key – it just indicates the end of the username part of cURL's credentials argument.

Successful authentication

Requests which successfully authenticate have the header X-Account set.

Unsuccessful authentication

Requests which are unsuccessful will return HTTP 401 Unauthorized.

Content Types

You can POST data using either: Content-Type: application/json or Content-Type: application/x-www-form-urlencoded.

The key-value structure for both types is the same. If you don't specify a Content-Type then Content-Type: application/json will be assumed. In either case the PrintNode API will always respond with Content-Type: application/json.

Parameters

PrintNode assigns a unique identifier to computers, printers and other assets it is aware of. A unique identifier is always a positive integer. A set is a string representation of an unordered collection of positive integers. You can use these to specify multiple assets in a single API call.

Wherever you see COMPUTER SET, PRINTER SET or PRINT JOB SET you can substitute a set.

A set is written as a comma separated list of positive integers. Repeated integers are only counted once.

Examples

11
1,3,51, 3 and 5
5,1,31, 3 and 5
1,2,2,3,3,31, 2 and 3

Resource URLs

GET/whoami

GET/computers
DELETE/computers

GET/computers/COMPUTER SET
DELETE/computers/COMPUTER SET

GET/printers

GET/printers/PRINTER SET

GET/computers/COMPUTER SET/printers

GET/computers/COMPUTER SET/printers/PRINTER SET

GET/printjobs
DELETE/printjobs
POST/printjobs

GET/printjobs/PRINT JOB SET
DELETE/printjobs/PRINT JOB SET

GET/printers/PRINTER SET/printjobs
DELETE/printers/PRINTER SET/printjobs

GET/printers/PRINTER SET/printjobs/PRINT JOB SET
DELETE/printers/PRINTER SET/printjobs/PRINT JOB SET

GET/printjobs/states

GET/printjobs/PRINT JOB SET/states

GET/computer/COMPUTER ID/scales

GET/computer/COMPUTER ID/scales/DEVICE NAME

GET/computer/COMPUTER ID/scale/DEVICE NAME/DEVICE NUMBER

PUT/scale

DELETE/account
POST/account
PATCH/account

GET/account/state
PUT/account/state

GET/account/tag/NAME
DELETE/account/tag/NAME
POST/account/tag/NAME

GET/account/apikey/DESCRIPTION
DELETE/account/apikey/DESCRIPTION
POST/account/apikey/DESCRIPTION

GET/account/controllable

GET/download/client/OPERATING SYSTEM

GET/download/clients

GET/download/clients/DOWNLOAD IDS
PATCH/download/clients/DOWNLOAD IDS

GET/ping

GET/noop

Pagination

By default, endpoints which return a set of records (such as GET/computers or GET/printjobs) will return up to 100 records, in descending id order, which is equivalent to the most recent 100 records.

You can control the range of records returned using the URL query parameters limit, after and dir. They work as follows:

  • limit is the maximum number of rows that will be returned by the endpoint. Default is 100.
  • dir controls the ordering - asc for ascending, desc for descending. Default is desc .
  • after controls the point at which records start. You would usually set this to the last id in the previous set of records retrieved, in order to look at the next "page" of records. Default is blank, which causes records to be retrieved at one end of the result set (the start if dir is asc and the end if dir is desc).

For example:

  • Leaving all parameters unspecified returns (up to) 100 records, starting from the highest available (i.e. most recent) id, in descending order.
  • dir=asc returns (up to) 100 records, this time starting from the lowest id, in ascending order.
  • after=123&limit=50 returns (up to) 50 records, starting from the record below id 123, in descending order.
  • after=123456&dir=asc&limit=20 returns (up to) 20 records, starting from the record after id 123456, in ascending order.

Example Request cURL

curl https://api.printnode.com/printjobs?after=123456&dir=asc&limit=20 \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

This returns (up to) 20 print jobs, starting from the record after id 123456, in ascending order.

Response Headers

The server responds with standard HTTP response headers and some or all of the following extra headers depending on the endpoint you are querying:

Request-Id A unique identifier for your request. This is useful if you want to report an API issue to us; it allows us to find the request in our server logs.
Elapsed The time the server took to handle the request, in seconds.
Access-Control-Allow-Origin
Access-Control-Allow-Headers
Access-Control-Allow-Methods
Access-Control-Expose-Headers
HTTP access control headers.

Rate Limiting

The API allows 10 requests per second per account. Short bursts of requests which exceed this limit are also permitted. Exceeding the limit for a sustained period will result in some requests returning HTTP 429 Too Many Requests.

Example Response

< HTTP/1.1 429 Too Many Requests < Date: Thu, 20 Mar 2014 16:20:07 GMT < Content-Type: application/json < Content-Length: 95 < Connection: keep-alive < { "code": "TooManyRequests", "message": "You have exceeded your request rate of 10 r/s." }

Errors

The API returns self documenting, human-readable errors.

When an error occurs, the response body is a JSON object containing three keys: uid, code and message. uid has the same value as the Request-Id response header, code is a brief textual description of the error and message is a detailed human-readable description of the error.

These error messages are very useful! If your API request is not functioning as expected, the response body is the first place you should look.

Example Errors

< HTTP/1.1 401 Unauthorized < Date: Thu, 20 Mar 2014 16:54:06 GMT < Content-Type: application/json < Content-Length: 87 < Connection: keep-alive < WWW-Authenticate: Basic realm="Api" < { "code": "InvalidCredentials", "message": "Expects HTTP Basic authentication." }
< HTTP/1.1 400 Bad Request < Date: Thu, 20 Mar 2014 16:55:43 GMT < Content-Type: application/json < Content-Length: 86 < Connection: keep-alive < { "code": "InvalidContent", "message": "Invalid JSON: Unexpected end of input" }

Account Information

Who Am I?

GET/whoami

Example Request cURL

curl https://api.printnode.com/whoami \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

{ "id": 433, "firstname": "Peter", "lastname": "Tuthill", "email": "peter@omlet.co.uk", "canCreateSubAccounts": false, "creatorEmail": null, "creatorRef": null, "childAccounts": [], "credits": 10134, "numComputers": 3, "totalPrints": 110, "versions": [], "connected": [], "Tags": [], "state": "active", "permissions": [ "Unrestricted" ] }
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 378 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 2d2fef09-68a3-423e-b613-4d39d972e0bf Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: QRtxHEMwFLC5QaCiT9sLew== Response-Time: 23

Computers

Viewing Computers

GET/computers
GET/computers/COMPUTER SET

Computers are devices which have the PrintNode Client software installed on them and which have successfully connected to PrintNode. A computer is uniquely identified by its id property. When the PrintNode Client runs on a computer it automatically reports the existence of the computer to the server. From then on the computer is recognized by the API.

Example Request cURL

curl https://api.printnode.com/computers \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" } ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 728 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 3e5a80f3-b530-48b6-b92e-85e3139466f2 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Records-Returned: 3 Records-Returned-Offset: 0 Records-Returned-Limit: 100 Records-Total: 3 Content-MD5: Z8peWHU5iqDZPhLrlo3E9Q== Response-Time: 9

Removing Computers

DELETE/computers
DELETE/computers/COMPUTER SET

You can remove computers with a call to the above endpoints. You can restrict the set of computers you wish to delete by specifying a computer set. The server will respond HTTP 200 OK and the response body will be a JSON array of the ids of the computers which have been affected.

Example Request cURL

curl -u 44784dd8d88be9631046ff83e9044419ff824b10: https://api.printnode.com/computers/1,2,3 -XDELETE

Response

[ 1, 2, 3 ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 40 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 72bfa624-d920-4ac2-b316-4b62a8ffb751 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: MjCogz2vE4Paw4YX652t4A== Response-Time: 3

Printers

Viewing Printers

GET/printers
GET/printers/PRINTER SET
GET/computers/COMPUTER SET/printers
GET/computers/COMPUTER SET/printers/PRINTER SET

Example Request cURL

curl https://api.printnode.com/printers \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, { "id": 39, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "Microsoft XPS Document Writer", "description": "Microsoft XPS Document Writer", "capabilities": { "bins": [ "Automatically Select" ], "collate": false, "color": true, "copies": 1, "dpis": [ "600x600" ], "duplex": false, "extent": [ [ 900, 900 ], [ 8636, 11176 ] ], "medias": [], "nup": [], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Letter Small": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A4 Small": [ 2100, 2970 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "Folio": [ 2159, 3302 ], "Quarto": [ 2150, 2750 ], "10x14": [ 2540, 3556 ], "11x17": [ 2794, 4318 ], "Note": [ 2159, 2794 ], "Envelope #9": [ 984, 2254 ], "Envelope #10": [ 1047, 2413 ], "Envelope #11": [ 1143, 2635 ], "Envelope #12": [ 1206, 2794 ], "Envelope #14": [ 1270, 2921 ], "C size sheet": [ 4318, 5588 ], "D size sheet": [ 5588, 8636 ], "E size sheet": [ 8636, 11176 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope C3": [ 3240, 4580 ], "Envelope C4": [ 2290, 3240 ], "Envelope C6": [ 1140, 1620 ], "Envelope C65": [ 1140, 2290 ], "Envelope B4": [ 2500, 3530 ], "Envelope B5": [ 1760, 2500 ], "Envelope B6": [ 1760, 1250 ], "Envelope": [ 1100, 2300 ], "Envelope Monarch": [ 984, 1905 ], "6 3/4 Envelope": [ 920, 1651 ], "US Std Fanfold": [ 3778, 2794 ], "German Std Fanfold": [ 2159, 3048 ], "German Legal Fanfold": [ 2159, 3302 ], "B4 (ISO)": [ 2500, 3530 ], "Japanese Postcard": [ 1000, 1480 ], "9x11": [ 2286, 2794 ], "10x11": [ 2540, 2794 ], "15x11": [ 3810, 2794 ], "Envelope Invite": [ 2200, 2200 ], "Letter Extra": [ 2413, 3048 ], "Legal Extra": [ 2413, 3810 ], "A4 Extra": [ 2354, 3223 ], "Letter Transverse": [ 2159, 2794 ], "A4 Transverse": [ 2100, 2970 ], "Letter Extra Transverse": [ 2413, 3048 ], "Super A": [ 2270, 3560 ], "Super B": [ 3050, 4870 ], "Letter Plus": [ 2159, 3223 ], "A4 Plus": [ 2100, 3300 ], "A5 Transverse": [ 1480, 2100 ], "B5 (JIS) Transverse": [ 1820, 2570 ], "A3 Extra": [ 3220, 4450 ], "A5 Extra": [ 1740, 2350 ], "B5 (ISO) Extra": [ 2010, 2760 ], "A2": [ 4200, 5940 ], "A3 Transverse": [ 2970, 4200 ], "A3 Extra Transverse": [ 3220, 4450 ], "Japanese Double Postcard": [ 2000, 1480 ], "A6": [ 1050, 1480 ], "Japanese Envelope Kaku #2": [ 2400, 3320 ], "Japanese Envelope Kaku #3": [ 2160, 2770 ], "Japanese Envelope Chou #3": [ 1200, 2350 ], "Japanese Envelope Chou #4": [ 900, 2050 ], "Letter Rotated": [ 2794, 2159 ], "A3 Rotated": [ 4200, 2970 ], "A4 Rotated": [ 2970, 2100 ], "A5 Rotated": [ 2100, 1480 ], "B4 (JIS) Rotated": [ 3640, 2570 ], "B5 (JIS) Rotated": [ 2570, 1820 ], "Japanese Postcard Rotated": [ 1480, 1000 ], "Double Japan Postcard Rotated": [ 1480, 2000 ], "A6 Rotated": [ 1480, 1050 ], "Japan Envelope Kaku #2 Rotated": [ 3320, 2400 ], "Japan Envelope Kaku #3 Rotated": [ 2770, 2160 ], "Japan Envelope Chou #3 Rotated": [ 2350, 1200 ], "Japan Envelope Chou #4 Rotated": [ 2050, 900 ], "B6 (JIS)": [ 1280, 1820 ], "B6 (JIS) Rotated": [ 1820, 1280 ], "12x11": [ 3049, 2795 ], "Japan Envelope You #4": [ 1050, 2350 ], "Japan Envelope You #4 Rotated": [ 2350, 1050 ], "PRC Envelope #1": [ 1020, 1650 ], "PRC Envelope #3": [ 1250, 1760 ], "PRC Envelope #4": [ 1100, 2080 ], "PRC Envelope #5": [ 1100, 2200 ], "PRC Envelope #6": [ 1200, 2300 ], "PRC Envelope #7": [ 1600, 2300 ], "PRC Envelope #8": [ 1200, 3090 ], "PRC Envelope #9": [ 2290, 3240 ], "PRC Envelope #10": [ 3240, 4580 ], "PRC Envelope #1 Rotated": [ 1650, 1020 ], "PRC Envelope #3 Rotated": [ 1760, 1250 ], "PRC Envelope #4 Rotated": [ 2080, 1100 ], "PRC Envelope #5 Rotated": [ 2200, 1100 ], "PRC Envelope #6 Rotated": [ 2300, 1200 ], "PRC Envelope #7 Rotated": [ 2300, 1600 ], "PRC Envelope #8 Rotated": [ 3090, 1200 ], "PRC Envelope #9 Rotated": [ 3240, 2290 ], "ANSI F": [ 7112, 10160 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 40, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "ZDesigner LP 2844", "description": "ZDesigner LP 2844", "capabilities": { "bins": [ "Manual feed" ], "collate": false, "color": false, "copies": 9999, "dpis": [ "203x203" ], "duplex": false, "extent": [ [ 10, 10 ], [ 1240, 28100 ] ], "medias": [], "nup": [], "papers": { "User defined": [ 1016, 1524 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "offline" }, { "id": 41, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "OKI-C822-16DB6E", "description": "OKI C822(PCL)", "capabilities": { "bins": [ "Auto", "Multipurpose Tray", "Tray 1" ], "collate": true, "color": true, "copies": 999, "dpis": [ "300x300", "600x600" ], "duplex": true, "extent": [ [ 640, 900 ], [ 2970, 13208 ] ], "medias": [], "nup": [], "papers": { "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1842, 2667 ], "A3": [ 2970, 4200 ], "A4": [ 2100, 2970 ], "A5": [ 1480, 2100 ], "B4": [ 2570, 3640 ], "B5": [ 1820, 2570 ], "Legal13": [ 2159, 3302 ], "Com-10": [ 1047, 2413 ], "DL": [ 1100, 2200 ], "C5": [ 1620, 2290 ], "C4": [ 2290, 3240 ], "Hagaki": [ 1000, 1480 ], "A6": [ 1050, 1480 ], "Kakugata #2": [ 2400, 3320 ], "Kakugata #3": [ 2160, 2770 ], "Nagagata #3": [ 1200, 2350 ], "Nagagata #4": [ 900, 2050 ], "Oufuku Hagaki": [ 2000, 1480 ], "Yougata #4": [ 1050, 2350 ], "User Defined Size": [ 2100, 2970 ], "B6": [ 1280, 1820 ], "B6 Half": [ 640, 1820 ], "Yougata #0": [ 1200, 2350 ], "Legal 13.5": [ 2159, 3429 ], "Index Card": [ 762, 1270 ], "16K": [ 1840, 2600 ], "16K 195 x 270mm": [ 1950, 2700 ], "16K 197 x 273mm": [ 1970, 2730 ], "8K": [ 2600, 3680 ], "8K 270 x 390mm": [ 2700, 3900 ], "8K 273 x 394mm": [ 2730, 3940 ], "Nagagata #40": [ 900, 2250 ], "Banner": [ 2100, 9000 ], "Banner 215.0 x 900.0mm": [ 2150, 9000 ], "Banner 215.0 x 1200.0mm": [ 2150, 12000 ], "Banner 297.0 x 900.0mm": [ 2970, 9000 ], "Banner 297.0 x 1200.0mm": [ 2970, 12000 ] }, "printrate": { "unit": "ppm", "rate": 23 }, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 42, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "Brother HL-5450DN series Printer", "description": "Brother HL-5450DN series", "capabilities": { "bins": [ "Auto Select", "Tray1", "MP Tray", "Manual" ], "collate": true, "color": false, "copies": 999, "dpis": [ "300x300", "600x600", "1200x1200" ], "duplex": true, "extent": [ [ 762, 1270 ], [ 2159, 3556 ] ], "medias": [], "nup": [], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Ledger": [ 2794, 4318 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "JIS B4": [ 2570, 3640 ], "Folio": [ 2159, 3302 ], "Com-10": [ 1047, 2413 ], "DL": [ 1100, 2200 ], "C5": [ 1620, 2290 ], "B5": [ 1760, 2500 ], "Monarch": [ 984, 1905 ], "A5 Long Edge": [ 1480, 2100 ], "A6": [ 1050, 1480 ], "User Defined": [ 762, 1270 ], "3 x 5": [ 762, 1270 ], "B6": [ 1250, 1760 ] }, "printrate": { "unit": "ppm", "rate": 38 }, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 43, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "PDF24", "description": "PDF24", "capabilities": { "bins": [], "collate": true, "color": true, "copies": 9999, "dpis": [ "72x72", "96x96", "144x144", "150x150", "300x300", "600x600", "720x720", "1200x1200", "2400x2400", "3600x3600", "4000x4000" ], "duplex": false, "extent": [ [ 254, 254 ], [ 32767, 32767 ] ], "medias": [], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "11x17": [ 2794, 4318 ], "Envelope #10": [ 1047, 2413 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope Monarch": [ 984, 1905 ], "B4 (ISO)": [ 2500, 3530 ], "Tabloid Extra": [ 3048, 4572 ], "Super A": [ 2270, 3560 ], "A2": [ 4200, 5940 ], "B1 (JIS)": [ 7281, 10301 ], "B2 (JIS)": [ 5150, 7281 ], "A0": [ 8410, 11888 ], "A1": [ 5940, 8410 ], "ARCH A": [ 2286, 3048 ], "ARCH B": [ 3048, 4572 ], "ARCH C": [ 4572, 6096 ], "ARCH D": [ 6096, 9144 ], "ARCH E": [ 9144, 12192 ], "C0": [ 9168, 12971 ], "C1": [ 6480, 9168 ], "C2": [ 4579, 6480 ], "C3": [ 3238, 4579 ], "C4": [ 2289, 3238 ], "C5": [ 1619, 2289 ], "RA3": [ 3051, 4300 ], "ANSI F": [ 7112, 10160 ], "11x14": [ 2794, 3556 ], "13x19": [ 3302, 4826 ], "16x20": [ 4064, 5080 ], "16x24": [ 4064, 6096 ], "2A": [ 11888, 16820 ], "4A": [ 16820, 23808 ], "8x10": [ 2032, 2540 ], "8x12": [ 2032, 3048 ], "ANSI A": [ 2159, 2794 ], "ANSI B": [ 2794, 4318 ], "ANSI C": [ 4318, 5588 ], "ANSI D": [ 5588, 8636 ], "ANSI E": [ 8636, 11176 ], "B0 (ISO)": [ 9997, 14139 ], "B1 (ISO)": [ 7069, 9997 ], "B2 (ISO)": [ 4998, 7069 ], "B3 (ISO)": [ 3527, 4998 ], "B5 (ISO)": [ 1756, 2497 ], "B0 (JIS)": [ 10297, 14559 ], "US Legal": [ 2159, 3556 ], "US Letter": [ 2159, 2794 ], "RA0": [ 8597, 12199 ], "RA1": [ 6099, 8597 ], "RA2": [ 4296, 6099 ], "RA4": [ 2148, 3048 ], "SRA0": [ 8999, 12798 ], "SRA1": [ 6399, 8999 ], "SRA2": [ 4497, 6399 ], "SRA3": [ 3199, 4497 ], "SRA4": [ 2247, 3199 ], "PostScript Custom Page Size": [ 2100, 2970 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 44, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "HP Officejet J4680 Series", "description": "HP Officejet J4680 Series", "capabilities": { "bins": [ " Automatically Select", " Tray 1" ], "collate": false, "color": true, "copies": 1, "dpis": [ "300x300", "600x600", "1200x1200" ], "duplex": true, "extent": [ [ 762, 1016 ], [ 2159, 7620 ] ], "medias": [ "Plain paper", "HP Bright White Paper", "HP Premium Presentation Paper, Matte", "Other inkjet papers", "HP Premium Plus Photo Papers", "HP Premium Photo Papers", "HP Advanced Photo Paper", "HP Everyday Photo Paper, Semi-gloss", "HP Everyday Photo Paper, Matte", "Other photo papers", "HP Premium Inkjet Transparency Film", "Other transparency films", "HP Iron-on Transfer", "HP Photo Cards", "Other specialty papers", "Glossy Greeting Card", "Matte Greeting Card", "HP Brochure & Flyer Paper, Glossy", "HP Brochure & Flyer Paper, Matte", "Other Glossy Brochure", "Other Matte Brochure", "Plain hagaki", "Inkjet hagaki", "Photo hagaki" ], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A5": [ 1480, 2100 ], "B5 (JIS)": [ 1820, 2570 ], "Envelope #10": [ 1047, 2413 ], "Envelope DL": [ 1100, 2200 ], "Envelope C6": [ 1140, 1620 ], "Envelope Monarch": [ 984, 1905 ], "A6": [ 1050, 1480 ], "B7 (ISO)": [ 878, 1249 ], "B7 (JIS)": [ 909, 1280 ], "HV": [ 1010, 1800 ], "10x15cm": [ 1016, 1524 ], "10x15cm (tab)": [ 1016, 1524 ], "4x6in. (tab)": [ 1016, 1524 ], "4x6in.": [ 1016, 1524 ], "L": [ 889, 1270 ], "2L": [ 1270, 1780 ], "13x18cm": [ 1270, 1778 ], "5x7in.": [ 1270, 1778 ], "8x10in.": [ 2032, 2540 ], "Photo card 10x20cm (tab)": [ 1016, 2032 ], "Photo card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 3.5x5in.": [ 889, 1270 ], "Borderless": [ 1270, 1778 ], "Borderless card 10x20cm (tab)": [ 1016, 2032 ], "Borderless HV": [ 1010, 1800 ], "Borderless 4x6in.": [ 1016, 1524 ], "Borderless 4x6in. (tab)": [ 1016, 1524 ], "Borderless 10x15cm (tab)": [ 1016, 1524 ], "Borderless 10x15cm": [ 1016, 1524 ], "Borderless 8x10in.": [ 2032, 2540 ], "Borderless L": [ 889, 1270 ], "Borderless card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 5x7in.": [ 1270, 1778 ], "Borderless 8.5x11in.": [ 2159, 2794 ], "Borderless A4,": [ 2100, 2969 ], "Borderless cabinet": [ 1198, 1651 ], "Borderless hagaki": [ 1000, 1480 ], "Borderless A5,": [ 1480, 2100 ], "Borderless A6": [ 1049, 1480 ], "Borderless B7 (ISO)": [ 878, 1249 ], "Borderless B7 (JIS)": [ 909, 1280 ], "Borderless B5,": [ 1821, 2570 ], "Borderless 10x30cm": [ 1016, 3048 ], "Borderless 4x12in.": [ 1016, 3048 ], "Borderless 2L": [ 1270, 1780 ], "Cabinet size": [ 1198, 1651 ], "Card envelope 4.4x6in.": [ 1112, 1524 ], "Envelope A2": [ 1109, 1460 ], "Hagaki": [ 1000, 1480 ], "Index card 3x5in.": [ 762, 1270 ], "Index card 4x6in.": [ 1016, 1524 ], "Index card 5x8in.": [ 1270, 2032 ], "JIS Chou #3": [ 1199, 2349 ], "JIS Chou #4": [ 899, 2049 ], "Ofuku Hagaki": [ 1998, 1480 ], "10x30cm": [ 1016, 3048 ], "4x12in.": [ 1016, 3048 ], "3.5x5in.": [ 889, 1270 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 45, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "Fax", "description": "Microsoft Shared Fax Driver", "capabilities": { "bins": [ "Default" ], "collate": false, "color": false, "copies": 1, "dpis": [ "200x100", "200x200" ], "duplex": false, "extent": [ [ 0, 0 ], [ 2160, 3556 ] ], "medias": [], "nup": [], "papers": { "Letter": [ 2159, 2794 ], "Letter Small": [ 2159, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A4": [ 2100, 2970 ], "A4 Small": [ 2100, 2970 ], "A5": [ 1480, 2100 ], "B5 (JIS)": [ 1820, 2570 ], "Folio": [ 2159, 3302 ], "Quarto": [ 2150, 2750 ], "Note": [ 2159, 2794 ], "Envelope #9": [ 984, 2254 ], "Envelope #10": [ 1047, 2413 ], "Envelope #11": [ 1143, 2635 ], "Envelope #12": [ 1206, 2794 ], "Envelope #14": [ 1270, 2921 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope C6": [ 1140, 1620 ], "Envelope C65": [ 1140, 2290 ], "Envelope B5": [ 1760, 2500 ], "Envelope B6": [ 1760, 1250 ], "Envelope": [ 1100, 2300 ], "Envelope Monarch": [ 984, 1905 ], "6 3/4 Envelope": [ 920, 1651 ], "German Std Fanfold": [ 2159, 3048 ], "German Legal Fanfold": [ 2159, 3302 ], "Japanese Postcard": [ 1000, 1480 ], "Reserved48": [ 0, 0 ], "Reserved49": [ 0, 0 ], "Letter Transverse": [ 2159, 2794 ], "A4 Transverse": [ 2100, 2970 ], "Letter Plus": [ 2159, 3223 ], "A4 Plus": [ 2100, 3300 ], "A5 Transverse": [ 1480, 2100 ], "B5 (JIS) Transverse": [ 1820, 2570 ], "A5 Extra": [ 1740, 2350 ], "B5 (ISO) Extra": [ 2010, 2760 ], "Japanese Double Postcard": [ 2000, 1480 ], "A6": [ 1050, 1480 ], "Japanese Envelope Kaku #3": [ 2160, 2770 ], "Japanese Envelope Chou #3": [ 1200, 2350 ], "Japanese Envelope Chou #4": [ 900, 2050 ], "A5 Rotated": [ 2100, 1480 ], "Japanese Postcard Rotated": [ 1480, 1000 ], "Double Japan Postcard Rotated": [ 1480, 2000 ], "A6 Rotated": [ 1480, 1050 ], "Japan Envelope Chou #4 Rotated": [ 2050, 900 ], "B6 (JIS)": [ 1280, 1820 ], "B6 (JIS) Rotated": [ 1820, 1280 ], "Japan Envelope You #4": [ 1050, 2350 ], "PRC 16K": [ 1880, 2600 ], "PRC 32K": [ 1300, 1840 ], "PRC 32K(Big)": [ 1400, 2030 ], "PRC Envelope #1": [ 1020, 1650 ], "PRC Envelope #2": [ 1020, 1760 ], "PRC Envelope #3": [ 1250, 1760 ], "PRC Envelope #4": [ 1100, 2080 ], "PRC Envelope #5": [ 1100, 2200 ], "PRC Envelope #6": [ 1200, 2300 ], "PRC Envelope #7": [ 1600, 2300 ], "PRC Envelope #8": [ 1200, 3090 ], "PRC 32K Rotated": [ 1840, 1300 ], "PRC 32K(Big) Rotated": [ 2030, 1400 ], "PRC Envelope #1 Rotated": [ 1650, 1020 ], "PRC Envelope #2 Rotated": [ 1760, 1020 ], "PRC Envelope #3 Rotated": [ 1760, 1250 ], "PRC Envelope #4 Rotated": [ 2080, 1100 ], "Screen": [ 1651, 1315 ], "LetterSmall": [ 2159, 2794 ], "A4Small": [ 2099, 2970 ], "B5 (JIS)[182 x 257 mm]": [ 1820, 2571 ], "A7": [ 740, 1047 ], "No. 10 Envelope": [ 1047, 2413 ], "A8": [ 522, 740 ], "C5 Envelope": [ 1619, 2289 ], "A9": [ 370, 522 ], "DL Envelope": [ 1100, 2201 ], "A10": [ 257, 370 ], "Monarch Envelope": [ 984, 1905 ], "ISO B5": [ 1760, 2501 ], "ISO B6": [ 1248, 1760 ], "Folio[8.5 x 13 in]": [ 2159, 3302 ], "Statement[5.5 x 8.5 in]": [ 1397, 2159 ], "Note[7.5 x 10 in]": [ 1905, 2540 ], "8.5 x 10 in": [ 2159, 2540 ], "JIS B5": [ 1820, 2571 ], "JIS B6": [ 1280, 1820 ], "C5": [ 1619, 2289 ], "C6": [ 1139, 1619 ], "A5Transverse": [ 1480, 2100 ], "B5": [ 1760, 2500 ], "FLSA": [ 2159, 3302 ], "B6": [ 1250, 1760 ], "FLSE": [ 2159, 3302 ], "Com10": [ 1047, 2413 ], "HalfLetter": [ 1397, 2159 ], "DL": [ 1100, 2200 ], "PA4": [ 2099, 2794 ], "Monarch": [ 984, 1905 ], "3x5": [ 762, 1270 ], "Oficio": [ 2159, 3302 ], "16K": [ 1968, 2730 ], "Executive (JIS)": [ 2159, 3298 ], "8.5x13": [ 2159, 3302 ], "8x10": [ 2032, 2540 ], "8x12": [ 2032, 3048 ], "ANSI A": [ 2159, 2794 ], "B5 (ISO)": [ 1756, 2497 ], "US Legal": [ 2159, 3556 ], "US Letter": [ 2159, 2794 ], "RA4": [ 2148, 3048 ], "B7 (ISO)": [ 878, 1249 ], "B7 (JIS)": [ 909, 1280 ], "HV": [ 1010, 1800 ], "10x15cm": [ 1016, 1524 ], "10x15cm (tab)": [ 1016, 1524 ], "4x6in. (tab)": [ 1016, 1524 ], "4x6in.": [ 1016, 1524 ], "L": [ 889, 1270 ], "2L": [ 1270, 1780 ], "13x18cm": [ 1270, 1778 ], "5x7in.": [ 1270, 1778 ], "8x10in.": [ 2032, 2540 ], "Photo card 10x20cm (tab)": [ 1016, 2032 ], "Photo card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 3.5x5in.": [ 889, 1270 ], "Borderless": [ 1270, 1778 ], "Borderless card 10x20cm (tab)": [ 1016, 2032 ], "Borderless HV": [ 1010, 1800 ], "Borderless 4x6in.": [ 1016, 1524 ], "Borderless 4x6in. (tab)": [ 1016, 1524 ], "Borderless 10x15cm (tab)": [ 1016, 1524 ], "Borderless 10x15cm": [ 1016, 1524 ], "Borderless 8x10in.": [ 2032, 2540 ], "Borderless L": [ 889, 1270 ], "Borderless card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 5x7in.": [ 1270, 1778 ], "Borderless 8.5x11in.": [ 2159, 2794 ], "Borderless A4,": [ 2100, 2969 ], "Borderless cabinet": [ 1198, 1651 ], "Borderless hagaki": [ 1000, 1480 ], "Borderless A5,": [ 1480, 2100 ], "Borderless A6": [ 1049, 1480 ], "Borderless B7 (ISO)": [ 878, 1249 ], "Borderless B7 (JIS)": [ 909, 1280 ], "Borderless B5,": [ 1821, 2570 ], "Borderless 10x30cm": [ 1016, 3048 ], "Borderless 4x12in.": [ 1016, 3048 ], "Borderless 2L": [ 1270, 1780 ], "Cabinet size": [ 1198, 1651 ], "Card envelope 4.4x6in.": [ 1112, 1524 ], "Envelope A2": [ 1109, 1460 ], "Hagaki": [ 1000, 1480 ], "Index card 3x5in.": [ 762, 1270 ], "Index card 4x6in.": [ 1016, 1524 ], "Index card 5x8in.": [ 1270, 2032 ], "JIS Chou #3": [ 1199, 2349 ], "JIS Chou #4": [ 899, 2049 ], "Ofuku Hagaki": [ 1998, 1480 ], "10x30cm": [ 1016, 3048 ], "4x12in.": [ 1016, 3048 ], "3.5x5in.": [ 889, 1270 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 46, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "CutePDF WriterIñtërnâtiônàlizætiøn", "description": "CutePDF Writer", "capabilities": { "bins": [ "Automatically Select", "OnlyOne" ], "collate": true, "color": true, "copies": 9999, "dpis": [ "72x72", "144x144", "300x300", "600x600", "1200x1200", "2400x2400", "3600x3600", "4000x4000" ], "duplex": false, "extent": [ [ 254, 254 ], [ 32767, 32767 ] ], "medias": [], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "A2": [ 4200, 5940 ], "A6": [ 1050, 1480 ], "11 x 17": [ 2794, 4318 ], "Screen": [ 1651, 1315 ], "ISO A0": [ 8410, 11888 ], "ISO A1": [ 5940, 8410 ], "ISO A2": [ 4201, 5940 ], "B1 (JIS)": [ 7281, 10301 ], "B2 (JIS)": [ 5150, 7281 ], "B3 (JIS)": [ 3640, 5150 ], "B4 (JIS)": [ 2571, 3640 ], "B5 (JIS)": [ 1820, 2571 ], "No. 10 Envelope": [ 1047, 2413 ], "C5 Envelope": [ 1619, 2289 ], "DL Envelope": [ 1100, 2201 ], "Monarch Envelope": [ 984, 1905 ], "ARCH A": [ 2286, 3048 ], "ARCH B": [ 3048, 4572 ], "ARCH C": [ 4572, 6096 ], "ARCH D": [ 6096, 9144 ], "ARCH E": [ 9144, 12192 ], "ARCH E1": [ 7620, 10668 ], "Folio": [ 2159, 3302 ], "Statement[5.5 x 8.5 in]": [ 1397, 2159 ], "Note": [ 1905, 2540 ], "ISO-B1": [ 7069, 10004 ], "8.5 x 10 in": [ 2159, 2540 ], "22 x 36 in": [ 5588, 9144 ], "24 x 48 in": [ 6096, 12192 ], "24 x 60 in": [ 6096, 15240 ], "24 x 72 in": [ 6096, 18288 ], "24 x 84 in": [ 6096, 21336 ], "24 x 96 in": [ 6096, 24384 ], "24 x 108 in": [ 6096, 27432 ], "36 x 42 in": [ 9144, 10668 ], "36 x 60 in": [ 9144, 15240 ], "36 x 72 in": [ 9144, 18288 ], "36 x 84 in": [ 9144, 21336 ], "36 x 96 in": [ 9144, 24384 ], "36 x 108 in": [ 9144, 27432 ], "ANSI F": [ 7112, 10160 ], "PostScript Custom Page Size": [ 2100, 2970 ] }, "printrate": { "unit": "ppm", "rate": 400 }, "supports_custom_paper_size": false }, "default": true, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 47, "computer": { "id": 13, "name": "TUNSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.1", "jre": null, "createTimestamp": "2015-11-17T13:02:36.589Z", "state": "disconnected" }, "name": "Der RPC-Server ist nicht verfügbar", "description": "PDF24", "capabilities": { "bins": [], "collate": true, "color": true, "copies": 9999, "dpis": [ "72x72", "96x96", "144x144", "150x150", "300x300", "600x600", "720x720", "1200x1200", "2400x2400", "3600x3600", "4000x4000" ], "duplex": false, "extent": [ [ 254, 254 ], [ 32767, 32767 ] ], "medias": [], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "11x17": [ 2794, 4318 ], "Envelope #10": [ 1047, 2413 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope Monarch": [ 984, 1905 ], "B4 (ISO)": [ 2500, 3530 ], "Tabloid Extra": [ 3048, 4572 ], "Super A": [ 2270, 3560 ], "A2": [ 4200, 5940 ], "B1 (JIS)": [ 7281, 10301 ], "B2 (JIS)": [ 5150, 7281 ], "A0": [ 8410, 11888 ], "A1": [ 5940, 8410 ], "ARCH A": [ 2286, 3048 ], "ARCH B": [ 3048, 4572 ], "ARCH C": [ 4572, 6096 ], "ARCH D": [ 6096, 9144 ], "ARCH E": [ 9144, 12192 ], "C0": [ 9168, 12971 ], "C1": [ 6480, 9168 ], "C2": [ 4579, 6480 ], "C3": [ 3238, 4579 ], "C4": [ 2289, 3238 ], "C5": [ 1619, 2289 ], "RA3": [ 3051, 4300 ], "ANSI F": [ 7112, 10160 ], "11x14": [ 2794, 3556 ], "13x19": [ 3302, 4826 ], "16x20": [ 4064, 5080 ], "16x24": [ 4064, 6096 ], "2A": [ 11888, 16820 ], "4A": [ 16820, 23808 ], "8x10": [ 2032, 2540 ], "8x12": [ 2032, 3048 ], "ANSI A": [ 2159, 2794 ], "ANSI B": [ 2794, 4318 ], "ANSI C": [ 4318, 5588 ], "ANSI D": [ 5588, 8636 ], "ANSI E": [ 8636, 11176 ], "B0 (ISO)": [ 9997, 14139 ], "B1 (ISO)": [ 7069, 9997 ], "B2 (ISO)": [ 4998, 7069 ], "B3 (ISO)": [ 3527, 4998 ], "B5 (ISO)": [ 1756, 2497 ], "B0 (JIS)": [ 10297, 14559 ], "US Legal": [ 2159, 3556 ], "US Letter": [ 2159, 2794 ], "RA0": [ 8597, 12199 ], "RA1": [ 6099, 8597 ], "RA2": [ 4296, 6099 ], "RA4": [ 2148, 3048 ], "SRA0": [ 8999, 12798 ], "SRA1": [ 6399, 8999 ], "SRA2": [ 4497, 6399 ], "SRA3": [ 3199, 4497 ], "SRA4": [ 2247, 3199 ], "PostScript Custom Page Size": [ 2100, 2970 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T13:02:37.224Z", "state": "online" }, { "id": 48, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "PDF24", "description": "PDF24", "capabilities": { "bins": [], "collate": true, "color": true, "copies": 9999, "dpis": [ "72x72", "96x96", "144x144", "150x150", "300x300", "600x600", "720x720", "1200x1200", "2400x2400", "3600x3600", "4000x4000" ], "duplex": false, "extent": [ [ 254, 254 ], [ 32767, 32767 ] ], "medias": [], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "11x17": [ 2794, 4318 ], "Envelope #10": [ 1047, 2413 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope Monarch": [ 984, 1905 ], "B4 (ISO)": [ 2500, 3530 ], "Tabloid Extra": [ 3048, 4572 ], "Super A": [ 2270, 3560 ], "A2": [ 4200, 5940 ], "B1 (JIS)": [ 7281, 10301 ], "B2 (JIS)": [ 5150, 7281 ], "A0": [ 8410, 11888 ], "A1": [ 5940, 8410 ], "ARCH A": [ 2286, 3048 ], "ARCH B": [ 3048, 4572 ], "ARCH C": [ 4572, 6096 ], "ARCH D": [ 6096, 9144 ], "ARCH E": [ 9144, 12192 ], "C0": [ 9168, 12971 ], "C1": [ 6480, 9168 ], "C2": [ 4579, 6480 ], "C3": [ 3238, 4579 ], "C4": [ 2289, 3238 ], "C5": [ 1619, 2289 ], "RA3": [ 3051, 4300 ], "ANSI F": [ 7112, 10160 ], "11x14": [ 2794, 3556 ], "13x19": [ 3302, 4826 ], "16x20": [ 4064, 5080 ], "16x24": [ 4064, 6096 ], "2A": [ 11888, 16820 ], "4A": [ 16820, 23808 ], "8x10": [ 2032, 2540 ], "8x12": [ 2032, 3048 ], "ANSI A": [ 2159, 2794 ], "ANSI B": [ 2794, 4318 ], "ANSI C": [ 4318, 5588 ], "ANSI D": [ 5588, 8636 ], "ANSI E": [ 8636, 11176 ], "B0 (ISO)": [ 9997, 14139 ], "B1 (ISO)": [ 7069, 9997 ], "B2 (ISO)": [ 4998, 7069 ], "B3 (ISO)": [ 3527, 4998 ], "B5 (ISO)": [ 1756, 2497 ], "B0 (JIS)": [ 10297, 14559 ], "US Legal": [ 2159, 3556 ], "US Letter": [ 2159, 2794 ], "RA0": [ 8597, 12199 ], "RA1": [ 6099, 8597 ], "RA2": [ 4296, 6099 ], "RA4": [ 2148, 3048 ], "SRA0": [ 8999, 12798 ], "SRA1": [ 6399, 8999 ], "SRA2": [ 4497, 6399 ], "SRA3": [ 3199, 4497 ], "SRA4": [ 2247, 3199 ], "PostScript Custom Page Size": [ 2100, 2970 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 49, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "Microsoft XPS Document Writer", "description": "Microsoft XPS Document Writer", "capabilities": { "bins": [ "Automatically Select" ], "collate": false, "color": true, "copies": 1, "dpis": [ "600x600" ], "duplex": false, "extent": [ [ 900, 900 ], [ 8636, 11176 ] ], "medias": [], "nup": [], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Letter Small": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A4 Small": [ 2100, 2970 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "Folio": [ 2159, 3302 ], "Quarto": [ 2150, 2750 ], "10x14": [ 2540, 3556 ], "11x17": [ 2794, 4318 ], "Note": [ 2159, 2794 ], "Envelope #9": [ 984, 2254 ], "Envelope #10": [ 1047, 2413 ], "Envelope #11": [ 1143, 2635 ], "Envelope #12": [ 1206, 2794 ], "Envelope #14": [ 1270, 2921 ], "C size sheet": [ 4318, 5588 ], "D size sheet": [ 5588, 8636 ], "E size sheet": [ 8636, 11176 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope C3": [ 3240, 4580 ], "Envelope C4": [ 2290, 3240 ], "Envelope C6": [ 1140, 1620 ], "Envelope C65": [ 1140, 2290 ], "Envelope B4": [ 2500, 3530 ], "Envelope B5": [ 1760, 2500 ], "Envelope B6": [ 1760, 1250 ], "Envelope": [ 1100, 2300 ], "Envelope Monarch": [ 984, 1905 ], "6 3/4 Envelope": [ 920, 1651 ], "US Std Fanfold": [ 3778, 2794 ], "German Std Fanfold": [ 2159, 3048 ], "German Legal Fanfold": [ 2159, 3302 ], "B4 (ISO)": [ 2500, 3530 ], "Japanese Postcard": [ 1000, 1480 ], "9x11": [ 2286, 2794 ], "10x11": [ 2540, 2794 ], "15x11": [ 3810, 2794 ], "Envelope Invite": [ 2200, 2200 ], "Letter Extra": [ 2413, 3048 ], "Legal Extra": [ 2413, 3810 ], "A4 Extra": [ 2354, 3223 ], "Letter Transverse": [ 2159, 2794 ], "A4 Transverse": [ 2100, 2970 ], "Letter Extra Transverse": [ 2413, 3048 ], "Super A": [ 2270, 3560 ], "Super B": [ 3050, 4870 ], "Letter Plus": [ 2159, 3223 ], "A4 Plus": [ 2100, 3300 ], "A5 Transverse": [ 1480, 2100 ], "B5 (JIS) Transverse": [ 1820, 2570 ], "A3 Extra": [ 3220, 4450 ], "A5 Extra": [ 1740, 2350 ], "B5 (ISO) Extra": [ 2010, 2760 ], "A2": [ 4200, 5940 ], "A3 Transverse": [ 2970, 4200 ], "A3 Extra Transverse": [ 3220, 4450 ], "Japanese Double Postcard": [ 2000, 1480 ], "A6": [ 1050, 1480 ], "Japanese Envelope Kaku #2": [ 2400, 3320 ], "Japanese Envelope Kaku #3": [ 2160, 2770 ], "Japanese Envelope Chou #3": [ 1200, 2350 ], "Japanese Envelope Chou #4": [ 900, 2050 ], "Letter Rotated": [ 2794, 2159 ], "A3 Rotated": [ 4200, 2970 ], "A4 Rotated": [ 2970, 2100 ], "A5 Rotated": [ 2100, 1480 ], "B4 (JIS) Rotated": [ 3640, 2570 ], "B5 (JIS) Rotated": [ 2570, 1820 ], "Japanese Postcard Rotated": [ 1480, 1000 ], "Double Japan Postcard Rotated": [ 1480, 2000 ], "A6 Rotated": [ 1480, 1050 ], "Japan Envelope Kaku #2 Rotated": [ 3320, 2400 ], "Japan Envelope Kaku #3 Rotated": [ 2770, 2160 ], "Japan Envelope Chou #3 Rotated": [ 2350, 1200 ], "Japan Envelope Chou #4 Rotated": [ 2050, 900 ], "B6 (JIS)": [ 1280, 1820 ], "B6 (JIS) Rotated": [ 1820, 1280 ], "12x11": [ 3049, 2795 ], "Japan Envelope You #4": [ 1050, 2350 ], "Japan Envelope You #4 Rotated": [ 2350, 1050 ], "PRC Envelope #1": [ 1020, 1650 ], "PRC Envelope #3": [ 1250, 1760 ], "PRC Envelope #4": [ 1100, 2080 ], "PRC Envelope #5": [ 1100, 2200 ], "PRC Envelope #6": [ 1200, 2300 ], "PRC Envelope #7": [ 1600, 2300 ], "PRC Envelope #8": [ 1200, 3090 ], "PRC Envelope #9": [ 2290, 3240 ], "PRC Envelope #10": [ 3240, 4580 ], "PRC Envelope #1 Rotated": [ 1650, 1020 ], "PRC Envelope #3 Rotated": [ 1760, 1250 ], "PRC Envelope #4 Rotated": [ 2080, 1100 ], "PRC Envelope #5 Rotated": [ 2200, 1100 ], "PRC Envelope #6 Rotated": [ 2300, 1200 ], "PRC Envelope #7 Rotated": [ 2300, 1600 ], "PRC Envelope #8 Rotated": [ 3090, 1200 ], "PRC Envelope #9 Rotated": [ 3240, 2290 ], "ANSI F": [ 7112, 10160 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 50, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "ZDesigner LP 2844", "description": "ZDesigner LP 2844", "capabilities": { "bins": [ "Manual feed" ], "collate": false, "color": false, "copies": 9999, "dpis": [ "203x203" ], "duplex": false, "extent": [ [ 10, 10 ], [ 1240, 28100 ] ], "medias": [], "nup": [], "papers": { "User defined": [ 1016, 1524 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "offline" }, { "id": 51, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "HP Officejet J4680 Series", "description": "HP Officejet J4680 Series", "capabilities": { "bins": [ " Automatically Select", " Tray 1" ], "collate": false, "color": true, "copies": 1, "dpis": [ "300x300", "600x600", "1200x1200" ], "duplex": true, "extent": [ [ 762, 1016 ], [ 2159, 7620 ] ], "medias": [ "Plain paper", "HP Bright White Paper", "HP Premium Presentation Paper, Matte", "Other inkjet papers", "HP Premium Plus Photo Papers", "HP Premium Photo Papers", "HP Advanced Photo Paper", "HP Everyday Photo Paper, Semi-gloss", "HP Everyday Photo Paper, Matte", "Other photo papers", "HP Premium Inkjet Transparency Film", "Other transparency films", "HP Iron-on Transfer", "HP Photo Cards", "Other specialty papers", "Glossy Greeting Card", "Matte Greeting Card", "HP Brochure & Flyer Paper, Glossy", "HP Brochure & Flyer Paper, Matte", "Other Glossy Brochure", "Other Matte Brochure", "Plain hagaki", "Inkjet hagaki", "Photo hagaki" ], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A5": [ 1480, 2100 ], "B5 (JIS)": [ 1820, 2570 ], "Envelope #10": [ 1047, 2413 ], "Envelope DL": [ 1100, 2200 ], "Envelope C6": [ 1140, 1620 ], "Envelope Monarch": [ 984, 1905 ], "A6": [ 1050, 1480 ], "B7 (ISO)": [ 878, 1249 ], "B7 (JIS)": [ 909, 1280 ], "HV": [ 1010, 1800 ], "10x15cm": [ 1016, 1524 ], "10x15cm (tab)": [ 1016, 1524 ], "4x6in. (tab)": [ 1016, 1524 ], "4x6in.": [ 1016, 1524 ], "L": [ 889, 1270 ], "2L": [ 1270, 1780 ], "13x18cm": [ 1270, 1778 ], "5x7in.": [ 1270, 1778 ], "8x10in.": [ 2032, 2540 ], "Photo card 10x20cm (tab)": [ 1016, 2032 ], "Photo card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 3.5x5in.": [ 889, 1270 ], "Borderless": [ 1270, 1778 ], "Borderless card 10x20cm (tab)": [ 1016, 2032 ], "Borderless HV": [ 1010, 1800 ], "Borderless 4x6in.": [ 1016, 1524 ], "Borderless 4x6in. (tab)": [ 1016, 1524 ], "Borderless 10x15cm (tab)": [ 1016, 1524 ], "Borderless 10x15cm": [ 1016, 1524 ], "Borderless 8x10in.": [ 2032, 2540 ], "Borderless L": [ 889, 1270 ], "Borderless card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 5x7in.": [ 1270, 1778 ], "Borderless 8.5x11in.": [ 2159, 2794 ], "Borderless A4,": [ 2100, 2969 ], "Borderless cabinet": [ 1198, 1651 ], "Borderless hagaki": [ 1000, 1480 ], "Borderless A5,": [ 1480, 2100 ], "Borderless A6": [ 1049, 1480 ], "Borderless B7 (ISO)": [ 878, 1249 ], "Borderless B7 (JIS)": [ 909, 1280 ], "Borderless B5,": [ 1821, 2570 ], "Borderless 10x30cm": [ 1016, 3048 ], "Borderless 4x12in.": [ 1016, 3048 ], "Borderless 2L": [ 1270, 1780 ], "Cabinet size": [ 1198, 1651 ], "Card envelope 4.4x6in.": [ 1112, 1524 ], "Envelope A2": [ 1109, 1460 ], "Hagaki": [ 1000, 1480 ], "Index card 3x5in.": [ 762, 1270 ], "Index card 4x6in.": [ 1016, 1524 ], "Index card 5x8in.": [ 1270, 2032 ], "JIS Chou #3": [ 1199, 2349 ], "JIS Chou #4": [ 899, 2049 ], "Ofuku Hagaki": [ 1998, 1480 ], "10x30cm": [ 1016, 3048 ], "4x12in.": [ 1016, 3048 ], "3.5x5in.": [ 889, 1270 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 52, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "Fax", "description": "Microsoft Shared Fax Driver", "capabilities": { "bins": [ "Default" ], "collate": false, "color": false, "copies": 1, "dpis": [ "200x100", "200x200" ], "duplex": false, "extent": [ [ 0, 0 ], [ 2160, 3556 ] ], "medias": [], "nup": [], "papers": { "Letter": [ 2159, 2794 ], "Letter Small": [ 2159, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A4": [ 2100, 2970 ], "A4 Small": [ 2100, 2970 ], "A5": [ 1480, 2100 ], "B5 (JIS)": [ 1820, 2570 ], "Folio": [ 2159, 3302 ], "Quarto": [ 2150, 2750 ], "Note": [ 2159, 2794 ], "Envelope #9": [ 984, 2254 ], "Envelope #10": [ 1047, 2413 ], "Envelope #11": [ 1143, 2635 ], "Envelope #12": [ 1206, 2794 ], "Envelope #14": [ 1270, 2921 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope C6": [ 1140, 1620 ], "Envelope C65": [ 1140, 2290 ], "Envelope B5": [ 1760, 2500 ], "Envelope B6": [ 1760, 1250 ], "Envelope": [ 1100, 2300 ], "Envelope Monarch": [ 984, 1905 ], "6 3/4 Envelope": [ 920, 1651 ], "German Std Fanfold": [ 2159, 3048 ], "German Legal Fanfold": [ 2159, 3302 ], "Japanese Postcard": [ 1000, 1480 ], "Reserved48": [ 0, 0 ], "Reserved49": [ 0, 0 ], "Letter Transverse": [ 2159, 2794 ], "A4 Transverse": [ 2100, 2970 ], "Letter Plus": [ 2159, 3223 ], "A4 Plus": [ 2100, 3300 ], "A5 Transverse": [ 1480, 2100 ], "B5 (JIS) Transverse": [ 1820, 2570 ], "A5 Extra": [ 1740, 2350 ], "B5 (ISO) Extra": [ 2010, 2760 ], "Japanese Double Postcard": [ 2000, 1480 ], "A6": [ 1050, 1480 ], "Japanese Envelope Kaku #3": [ 2160, 2770 ], "Japanese Envelope Chou #3": [ 1200, 2350 ], "Japanese Envelope Chou #4": [ 900, 2050 ], "A5 Rotated": [ 2100, 1480 ], "Japanese Postcard Rotated": [ 1480, 1000 ], "Double Japan Postcard Rotated": [ 1480, 2000 ], "A6 Rotated": [ 1480, 1050 ], "Japan Envelope Chou #4 Rotated": [ 2050, 900 ], "B6 (JIS)": [ 1280, 1820 ], "B6 (JIS) Rotated": [ 1820, 1280 ], "Japan Envelope You #4": [ 1050, 2350 ], "PRC 16K": [ 1880, 2600 ], "PRC 32K": [ 1300, 1840 ], "PRC 32K(Big)": [ 1400, 2030 ], "PRC Envelope #1": [ 1020, 1650 ], "PRC Envelope #2": [ 1020, 1760 ], "PRC Envelope #3": [ 1250, 1760 ], "PRC Envelope #4": [ 1100, 2080 ], "PRC Envelope #5": [ 1100, 2200 ], "PRC Envelope #6": [ 1200, 2300 ], "PRC Envelope #7": [ 1600, 2300 ], "PRC Envelope #8": [ 1200, 3090 ], "PRC 32K Rotated": [ 1840, 1300 ], "PRC 32K(Big) Rotated": [ 2030, 1400 ], "PRC Envelope #1 Rotated": [ 1650, 1020 ], "PRC Envelope #2 Rotated": [ 1760, 1020 ], "PRC Envelope #3 Rotated": [ 1760, 1250 ], "PRC Envelope #4 Rotated": [ 2080, 1100 ], "Screen": [ 1651, 1315 ], "LetterSmall": [ 2159, 2794 ], "A4Small": [ 2099, 2970 ], "B5 (JIS)[182 x 257 mm]": [ 1820, 2571 ], "A7": [ 740, 1047 ], "No. 10 Envelope": [ 1047, 2413 ], "A8": [ 522, 740 ], "C5 Envelope": [ 1619, 2289 ], "A9": [ 370, 522 ], "DL Envelope": [ 1100, 2201 ], "A10": [ 257, 370 ], "Monarch Envelope": [ 984, 1905 ], "ISO B5": [ 1760, 2501 ], "ISO B6": [ 1248, 1760 ], "Folio[8.5 x 13 in]": [ 2159, 3302 ], "Statement[5.5 x 8.5 in]": [ 1397, 2159 ], "Note[7.5 x 10 in]": [ 1905, 2540 ], "8.5 x 10 in": [ 2159, 2540 ], "JIS B5": [ 1820, 2571 ], "JIS B6": [ 1280, 1820 ], "C5": [ 1619, 2289 ], "C6": [ 1139, 1619 ], "A5Transverse": [ 1480, 2100 ], "B5": [ 1760, 2500 ], "FLSA": [ 2159, 3302 ], "B6": [ 1250, 1760 ], "FLSE": [ 2159, 3302 ], "Com10": [ 1047, 2413 ], "HalfLetter": [ 1397, 2159 ], "DL": [ 1100, 2200 ], "PA4": [ 2099, 2794 ], "Monarch": [ 984, 1905 ], "3x5": [ 762, 1270 ], "Oficio": [ 2159, 3302 ], "16K": [ 1968, 2730 ], "Executive (JIS)": [ 2159, 3298 ], "8.5x13": [ 2159, 3302 ], "8x10": [ 2032, 2540 ], "8x12": [ 2032, 3048 ], "ANSI A": [ 2159, 2794 ], "B5 (ISO)": [ 1756, 2497 ], "US Legal": [ 2159, 3556 ], "US Letter": [ 2159, 2794 ], "RA4": [ 2148, 3048 ], "B7 (ISO)": [ 878, 1249 ], "B7 (JIS)": [ 909, 1280 ], "HV": [ 1010, 1800 ], "10x15cm": [ 1016, 1524 ], "10x15cm (tab)": [ 1016, 1524 ], "4x6in. (tab)": [ 1016, 1524 ], "4x6in.": [ 1016, 1524 ], "L": [ 889, 1270 ], "2L": [ 1270, 1780 ], "13x18cm": [ 1270, 1778 ], "5x7in.": [ 1270, 1778 ], "8x10in.": [ 2032, 2540 ], "Photo card 10x20cm (tab)": [ 1016, 2032 ], "Photo card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 3.5x5in.": [ 889, 1270 ], "Borderless": [ 1270, 1778 ], "Borderless card 10x20cm (tab)": [ 1016, 2032 ], "Borderless HV": [ 1010, 1800 ], "Borderless 4x6in.": [ 1016, 1524 ], "Borderless 4x6in. (tab)": [ 1016, 1524 ], "Borderless 10x15cm (tab)": [ 1016, 1524 ], "Borderless 10x15cm": [ 1016, 1524 ], "Borderless 8x10in.": [ 2032, 2540 ], "Borderless L": [ 889, 1270 ], "Borderless card 4x8in. (tab)": [ 1016, 2032 ], "Borderless 5x7in.": [ 1270, 1778 ], "Borderless 8.5x11in.": [ 2159, 2794 ], "Borderless A4,": [ 2100, 2969 ], "Borderless cabinet": [ 1198, 1651 ], "Borderless hagaki": [ 1000, 1480 ], "Borderless A5,": [ 1480, 2100 ], "Borderless A6": [ 1049, 1480 ], "Borderless B7 (ISO)": [ 878, 1249 ], "Borderless B7 (JIS)": [ 909, 1280 ], "Borderless B5,": [ 1821, 2570 ], "Borderless 10x30cm": [ 1016, 3048 ], "Borderless 4x12in.": [ 1016, 3048 ], "Borderless 2L": [ 1270, 1780 ], "Cabinet size": [ 1198, 1651 ], "Card envelope 4.4x6in.": [ 1112, 1524 ], "Envelope A2": [ 1109, 1460 ], "Hagaki": [ 1000, 1480 ], "Index card 3x5in.": [ 762, 1270 ], "Index card 4x6in.": [ 1016, 1524 ], "Index card 5x8in.": [ 1270, 2032 ], "JIS Chou #3": [ 1199, 2349 ], "JIS Chou #4": [ 899, 2049 ], "Ofuku Hagaki": [ 1998, 1480 ], "10x30cm": [ 1016, 3048 ], "4x12in.": [ 1016, 3048 ], "3.5x5in.": [ 889, 1270 ], "16K 7.75x10.75in.": [ 1968, 2730 ], "16K 195x270mm": [ 1950, 2700 ], "16K 184x260mm": [ 1840, 2599 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 53, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "OKI-C822-16DB6E", "description": "OKI C822(PCL)", "capabilities": { "bins": [ "Auto", "Multipurpose Tray", "Tray 1" ], "collate": true, "color": true, "copies": 999, "dpis": [ "300x300", "600x600" ], "duplex": true, "extent": [ [ 640, 900 ], [ 2970, 13208 ] ], "medias": [], "nup": [], "papers": { "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1842, 2667 ], "A3": [ 2970, 4200 ], "A4": [ 2100, 2970 ], "A5": [ 1480, 2100 ], "B4": [ 2570, 3640 ], "B5": [ 1820, 2570 ], "Legal13": [ 2159, 3302 ], "Com-10": [ 1047, 2413 ], "DL": [ 1100, 2200 ], "C5": [ 1620, 2290 ], "C4": [ 2290, 3240 ], "Hagaki": [ 1000, 1480 ], "A6": [ 1050, 1480 ], "Kakugata #2": [ 2400, 3320 ], "Kakugata #3": [ 2160, 2770 ], "Nagagata #3": [ 1200, 2350 ], "Nagagata #4": [ 900, 2050 ], "Oufuku Hagaki": [ 2000, 1480 ], "Yougata #4": [ 1050, 2350 ], "User Defined Size": [ 2100, 2970 ], "B6": [ 1280, 1820 ], "B6 Half": [ 640, 1820 ], "Yougata #0": [ 1200, 2350 ], "Legal 13.5": [ 2159, 3429 ], "Index Card": [ 762, 1270 ], "16K": [ 1840, 2600 ], "16K 195 x 270mm": [ 1950, 2700 ], "16K 197 x 273mm": [ 1970, 2730 ], "8K": [ 2600, 3680 ], "8K 270 x 390mm": [ 2700, 3900 ], "8K 273 x 394mm": [ 2730, 3940 ], "Nagagata #40": [ 900, 2250 ], "Banner": [ 2100, 9000 ], "Banner 215.0 x 900.0mm": [ 2150, 9000 ], "Banner 215.0 x 1200.0mm": [ 2150, 12000 ], "Banner 297.0 x 900.0mm": [ 2970, 9000 ], "Banner 297.0 x 1200.0mm": [ 2970, 12000 ] }, "printrate": { "unit": "ppm", "rate": 23 }, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 54, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "CutePDF WriterIñtërnâtiônàlizætiøn", "description": "CutePDF Writer", "capabilities": { "bins": [ "Automatically Select", "OnlyOne" ], "collate": true, "color": true, "copies": 9999, "dpis": [ "72x72", "144x144", "300x300", "600x600", "1200x1200", "2400x2400", "3600x3600", "4000x4000" ], "duplex": false, "extent": [ [ 254, 254 ], [ 32767, 32767 ] ], "medias": [], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "A2": [ 4200, 5940 ], "A6": [ 1050, 1480 ], "11 x 17": [ 2794, 4318 ], "Screen": [ 1651, 1315 ], "ISO A0": [ 8410, 11888 ], "ISO A1": [ 5940, 8410 ], "ISO A2": [ 4201, 5940 ], "B1 (JIS)": [ 7281, 10301 ], "B2 (JIS)": [ 5150, 7281 ], "B3 (JIS)": [ 3640, 5150 ], "B4 (JIS)": [ 2571, 3640 ], "B5 (JIS)": [ 1820, 2571 ], "No. 10 Envelope": [ 1047, 2413 ], "C5 Envelope": [ 1619, 2289 ], "DL Envelope": [ 1100, 2201 ], "Monarch Envelope": [ 984, 1905 ], "ARCH A": [ 2286, 3048 ], "ARCH B": [ 3048, 4572 ], "ARCH C": [ 4572, 6096 ], "ARCH D": [ 6096, 9144 ], "ARCH E": [ 9144, 12192 ], "ARCH E1": [ 7620, 10668 ], "Folio": [ 2159, 3302 ], "Statement[5.5 x 8.5 in]": [ 1397, 2159 ], "Note": [ 1905, 2540 ], "ISO-B1": [ 7069, 10004 ], "8.5 x 10 in": [ 2159, 2540 ], "22 x 36 in": [ 5588, 9144 ], "24 x 48 in": [ 6096, 12192 ], "24 x 60 in": [ 6096, 15240 ], "24 x 72 in": [ 6096, 18288 ], "24 x 84 in": [ 6096, 21336 ], "24 x 96 in": [ 6096, 24384 ], "24 x 108 in": [ 6096, 27432 ], "36 x 42 in": [ 9144, 10668 ], "36 x 60 in": [ 9144, 15240 ], "36 x 72 in": [ 9144, 18288 ], "36 x 84 in": [ 9144, 21336 ], "36 x 96 in": [ 9144, 24384 ], "36 x 108 in": [ 9144, 27432 ], "ANSI F": [ 7112, 10160 ], "PostScript Custom Page Size": [ 2100, 2970 ] }, "printrate": { "unit": "ppm", "rate": 400 }, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 55, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "Brother HL-5450DN series Printer", "description": "Brother HL-5450DN series", "capabilities": { "bins": [ "Auto Select", "Tray1", "MP Tray", "Manual" ], "collate": true, "color": false, "copies": 999, "dpis": [ "300x300", "600x600", "1200x1200" ], "duplex": true, "extent": [ [ 762, 1270 ], [ 2159, 3556 ] ], "medias": [], "nup": [], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Ledger": [ 2794, 4318 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "JIS B4": [ 2570, 3640 ], "Folio": [ 2159, 3302 ], "Com-10": [ 1047, 2413 ], "DL": [ 1100, 2200 ], "C5": [ 1620, 2290 ], "B5": [ 1760, 2500 ], "Monarch": [ 984, 1905 ], "A5 Long Edge": [ 1480, 2100 ], "A6": [ 1050, 1480 ], "User Defined": [ 762, 1270 ], "3 x 5": [ 762, 1270 ], "B6": [ 1250, 1760 ] }, "printrate": { "unit": "ppm", "rate": 38 }, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 56, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "Der RPC-Server ist nicht verfügbar", "description": "PDF24", "capabilities": { "bins": [], "collate": true, "color": true, "copies": 9999, "dpis": [ "72x72", "96x96", "144x144", "150x150", "300x300", "600x600", "720x720", "1200x1200", "2400x2400", "3600x3600", "4000x4000" ], "duplex": false, "extent": [ [ 254, 254 ], [ 32767, 32767 ] ], "medias": [], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Tabloid": [ 2794, 4318 ], "Ledger": [ 4318, 2794 ], "Legal": [ 2159, 3556 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "11x17": [ 2794, 4318 ], "Envelope #10": [ 1047, 2413 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope Monarch": [ 984, 1905 ], "B4 (ISO)": [ 2500, 3530 ], "Tabloid Extra": [ 3048, 4572 ], "Super A": [ 2270, 3560 ], "A2": [ 4200, 5940 ], "B1 (JIS)": [ 7281, 10301 ], "B2 (JIS)": [ 5150, 7281 ], "A0": [ 8410, 11888 ], "A1": [ 5940, 8410 ], "ARCH A": [ 2286, 3048 ], "ARCH B": [ 3048, 4572 ], "ARCH C": [ 4572, 6096 ], "ARCH D": [ 6096, 9144 ], "ARCH E": [ 9144, 12192 ], "C0": [ 9168, 12971 ], "C1": [ 6480, 9168 ], "C2": [ 4579, 6480 ], "C3": [ 3238, 4579 ], "C4": [ 2289, 3238 ], "C5": [ 1619, 2289 ], "RA3": [ 3051, 4300 ], "ANSI F": [ 7112, 10160 ], "11x14": [ 2794, 3556 ], "13x19": [ 3302, 4826 ], "16x20": [ 4064, 5080 ], "16x24": [ 4064, 6096 ], "2A": [ 11888, 16820 ], "4A": [ 16820, 23808 ], "8x10": [ 2032, 2540 ], "8x12": [ 2032, 3048 ], "ANSI A": [ 2159, 2794 ], "ANSI B": [ 2794, 4318 ], "ANSI C": [ 4318, 5588 ], "ANSI D": [ 5588, 8636 ], "ANSI E": [ 8636, 11176 ], "B0 (ISO)": [ 9997, 14139 ], "B1 (ISO)": [ 7069, 9997 ], "B2 (ISO)": [ 4998, 7069 ], "B3 (ISO)": [ 3527, 4998 ], "B5 (ISO)": [ 1756, 2497 ], "B0 (JIS)": [ 10297, 14559 ], "US Legal": [ 2159, 3556 ], "US Letter": [ 2159, 2794 ], "RA0": [ 8597, 12199 ], "RA1": [ 6099, 8597 ], "RA2": [ 4296, 6099 ], "RA4": [ 2148, 3048 ], "SRA0": [ 8999, 12798 ], "SRA1": [ 6399, 8999 ], "SRA2": [ 4497, 6399 ], "SRA3": [ 3199, 4497 ], "SRA4": [ 2247, 3199 ], "PostScript Custom Page Size": [ 2100, 2970 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-17T16:06:24.868Z", "state": "online" }, { "id": 57, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "HP LaserJet 5200L Series PCL 5-redirected", "description": "HP LaserJet 5200L Series PCL 5", "capabilities": { "bins": [ "Automatically Select", "Printer Auto Select", "Manual Feed in Tray 1", "Tray 1", "Tray 2", "Tray 3" ], "collate": true, "color": false, "copies": 9999, "dpis": [ "300x300", "600x600" ], "duplex": false, "extent": [ [ 984, 1480 ], [ 4318, 5940 ] ], "medias": [ "Unspecified", "Plain", "Preprinted", "Letterhead", "Transparency", "Prepunched", "Labels", "Bond", "Recycled", "Color", "Light 60-75 g/m2", "Cardstock 164-200 g/m2", "Rough", "Tough", "Vellum", "Envelope", " ", " ", " ", " ", " " ], "nup": [ 1, 2, 4, 6, 9, 16 ], "papers": { "A4": [ 2100, 2970 ], "Letter": [ 2159, 2794 ], "Legal": [ 2159, 3556 ], "Statement": [ 1397, 2159 ], "Executive": [ 1841, 2667 ], "A3": [ 2970, 4200 ], "A5": [ 1480, 2100 ], "B4 (JIS)": [ 2570, 3640 ], "B5 (JIS)": [ 1820, 2570 ], "11x17": [ 2794, 4318 ], "Envelope #10": [ 1047, 2413 ], "C size sheet": [ 4318, 5588 ], "Envelope DL": [ 1100, 2200 ], "Envelope C5": [ 1620, 2290 ], "Envelope B5": [ 1760, 2500 ], "Envelope Monarch": [ 984, 1905 ], "Japanese Postcard": [ 1000, 1480 ], "A2": [ 4200, 5940 ], "A6": [ 1050, 1480 ], "Double Japan Postcard Rotated": [ 1480, 2000 ], "B6 (JIS)": [ 1280, 1820 ], "Executive (JIS)": [ 2159, 3298 ], "8.5x13": [ 2159, 3302 ], "12x18": [ 3048, 4572 ], "RA3": [ 3051, 4300 ], "16K 7.75x10.75in.": [ 1968, 2730 ], "16K": [ 1950, 2700 ], "16K 184x260mm": [ 1840, 2599 ], "8K 10.75x15.50in.": [ 2730, 3937 ], "8K": [ 2599, 3680 ], "8K 270x390mm": [ 2700, 3899 ] }, "printrate": { "unit": "ppm", "rate": 35 }, "supports_custom_paper_size": false }, "default": false, "createTimestamp": "2015-11-18T15:47:43.260Z", "state": "online" }, { "id": 58, "computer": { "id": 14, "name": "TUNGSTEN", "inet": "192.168.56.1", "inet6": null, "hostname": "Pete@TUNGSTEN", "version": "4.8.3", "jre": null, "createTimestamp": "2015-11-17T16:06:24.644Z", "state": "disconnected" }, "name": "ZDesigner LP 2844-redirected", "description": "ZDesigner LP 2844", "capabilities": { "bins": [ "Manual feed" ], "collate": false, "color": false, "copies": 9999, "dpis": [ "203x203" ], "duplex": false, "extent": [ [ 10, 10 ], [ 1240, 28100 ] ], "medias": [], "nup": [], "papers": { "User defined": [ 1016, 1524 ] }, "printrate": null, "supports_custom_paper_size": false }, "default": true, "createTimestamp": "2015-11-18T15:51:27.585Z", "state": "online" } ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 104448 Connection: keep-alive Vary: Accept-Encoding Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 3cd0c9e2-24f0-4c52-9101-c3b641e91122 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Records-Returned: 24 Records-Returned-Offset: 0 Records-Returned-Limit: 100 Records-Total: 24 Content-MD5: 3cFUNEVtpo0yrygrWCGoEQ== Response-Time: 43

Printer Capabilities

Most printers support various options to customise printing, such as choosing a paper tray, choosing a media size, setting number of copies, duplex printing, etc.

The capabilities property of the printer object tells you what printing options you can use when creating a print job.

Attribute Type Description
binsArray of stringsA array of paper tray names the printer driver supports. May be zero length.
collateBooleantrue if the printer supports collation; false otherwise.
copiesIntegerThe maximum number of copies this printer supports. If the printer does not support multiple copies this value will be 1.
colorBooleantrue if the printer is a colour printer; false otherwise.
dpisArray of stringsAn array of strings, each of which describes a dpi setting supported by the printer. May be zero length.
extentArray of arraysIf the printer driver reports its maximum and minimum supported paper sizes, this is a two-dimensional array of integers, where [0][0] and [0][1] are respectively the minimum supported width and height and [1][0] and [1][1] are respectively the maximum supported width and height. The units are tenths of a millimetre.

If the printer driver does not report this information, this is a zero-length array.
mediasArray of stringsAn array of media names the printer driver supports. May be zero length.
nupArray of integersThe set of values of N for which N-up printing is supported, or a zero-length array if N-up printing is not supported.
papersObjectObject of supported paper sizes where each key represents a paper name and the corresponding value is the dimension of the paper expressed in a two-value array. The array is expressed as [width, height] with width and height expressed in tenths of a millimetre. In some circumstances these values are not reported by the printer driver, in which case the array is [null, null].
printrateObject or nullObject describing the printer's reported print rate. This object has two keys – unit and rate. unit can be one of "ppm", "ipm", "lmp" or "cpm". rate is a float.

If this is not specified by the driver, its value is null.
supports_custom_paper_sizeBooleantrue if the printer supports custom paper sizes; false otherwise.

A sample printer capabilities object is shown below.

{ "bins": [ "Auto", "Multipurpose Tray", "Tray 1", "Tray 2" ], "collate": true, "color": true, "copies": 999, "dpis": [ "300x300", "600x600" ], "duplex": true, "extent": [ [640, 900], [2970, 13208] ], "medias": [], "nup": [], "papers": { "Letter": [2159, 2794], "Tabloid": [2794, 4318], "Legal": [2159, 3556], "Statement": [1397, 2159], "Executive": [1842, 2667], "A3": [2970, 4200], "A4": [2100, 2970], "A5": [1480, 2100], "B4": [2570, 3640], "B5": [1820, 2570], "Legal13": [2159, 3302], "Com-10": [1047, 2413], "DL": [1100, 2200], "C5": [1620, 2290], "C4": [2290, 3240], "Hagaki": [1000, 1480], "A6": [1050, 1480], "Kakugata #2": [2400, 3320], "Kakugata #3": [2160, 2770], "Nagagata #3": [1200, 2350], "Nagagata #4": [900, 2050], "Oufuku Hagaki": [2000, 1480], "Yougata #4": [1050, 2350], "User Defined Size": [2100, 2970], "B6": [1280, 1820], "B6 Half": [640, 1820], "Yougata #0": [1200, 2350], "Legal 13.5": [2159, 3429], "Index Card": [762, 1270], "16K": [1840, 2600], "16K 195 x 270mm": 1950, 2700], "16K 197 x 273mm": [1970, 2730], "8K": [2600, 3680], "8K 270 x 390mm": [2700, 3900], "8K 273 x 394mm": [2730, 3940], "Nagagata #40": [900, 2250], "Banner": [2100, 9000], "Banner 215.0 x 900.0mm": [2150, 9000], "Banner 215.0 x 1200.0mm": [2150, 12000], "Banner 297.0 x 900.0mm": [2970, 9000], "Banner 297.0 x 1200.0mm": [2970, 12000] }, "printrate": { "unit": "ppm", "rate": 23 }, "supports_custom_paper_size": false }

Print Jobs

Creating Print Jobs

POST/printjobs

A print job is a request to print a document. You can create a print job using this endpoint.

Attribute Type Is Required? Specification
printerId Integer Yes The id of the printer you wish to print to.
contentType String Yes Either pdf_uri, pdf_base64, raw_uri or raw_base64. See content.
content String Yes If contentType is pdf_uri or raw_uri, this should be the URI from which the document you wish to print can be downloaded.

If contentType is pdf_base64 or raw_base64, this should be the base64-encoding of the document you wish to print.
title String No A title to give the print job. This is the name which will appear in the operating system's print queue.
source String No A text description of how the print job was created or where the print job originated.
options Object No An object describing various options which can be set for this print job. See options. Printing options have no effect when RAW printing.
expireAfter Integer No The maximum number of seconds PrintNode should retain this print job in the event that the print job cannot be printed immediately. The current default is 14 days or 1,209,600 seconds.
qty Integer No A positive integer specifying the number of times this print job should be delivered to the print queue. This differs from the copies option in that this will send the document to the printer multiple times and does not rely on printer driver support. This is the only way to produce multiple copies when RAW printing. This also allows you to print multiple copies even when not natively supported by the printer driver.

The default value is 1.
authentication Object No If a contentType of pdf_uri or raw_uri is used, the PrintNode Client must download the document from a location which you specify in the content attribute before it can print it. If access to this location requires HTTP Basic or Digest Authentication you can specify the username and password information here.

For Basic authentication:

{ "type": "BasicAuth", "credentials": { "user": "username", "pass": "password" } }


For Digest authentication:

{ "type": "DigestAuth", "credentials": { "user": "username", "pass": "password" } }

Replace username and password with the appropriate credentials.

Example Request cURL

curl -X POST https://api.printnode.com/printjobs \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -H "Content-Type: application/json" \ -d '{ "printerId": 34, "title": "My Test PrintJob", "contentType": "pdf_uri", "content": "http:\/\/sometest.com\/pdfhere", "source": "api documentation!" }'
curl -X POST https://api.printnode.com/printjobs \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d 'printerId=34' \ -d 'title=My%20Test%20PrintJob' \ -d 'contentType=pdf_uri' \ -d 'content=http%3A%2F%2Fsometest.com%2Fpdfhere' \ -d 'source=api%20documentation%21'

Response

623
HTTP/1.1 201 Created Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 5 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 32184ae1-c3e8-4561-8d8a-089a9cfc9eeb Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: U2VkMgF/getjIr7ZvDhNWw== Response-Time: 27

Example Request cURL

curl -X POST https://api.printnode.com/printjobs \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -H "Content-Type: application/json" \ -d '{ "printerId": 34, "title": "My Test PrintJob", "contentType": "pdf_uri", "content": "http:\/\/sometest.com\/pdfhere", "source": "api documentation!", "expireAfter": 600, "options": {"copies":2,"pages":"1,3,5","duplex":"long-edge","paper":"A4","bin":"Tray 1"}, "authentication": {"type":"BasicAuth","credentials":{"user":"username","pass":"password"}} }'

Response

624
HTTP/1.1 201 Created Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 5 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: dcb655b3-facc-4b4b-93a0-196f3cd47e07 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: 3kgxbrHryLdlL4TphTjdaQ== Response-Time: 21

Print job options

These additional options can be specified in the options attribute when you create a print job. Note that very old versions of the PrintNode Client may not support these options. We recommend keeping your PrintNode Client version up-to-date.

All properties are optional. You can use null or {} to represent no printing options.

Property Type Required Description
bin String No The name of one of the paper trays or output bins reported by the printer capability property bins.
collate Boolean No Enables print copy collation when printing multiple copies. If this option is not specified the printer default is used.
color Boolean No Set this to false for grayscale printing. This option only takes effect on Windows, with the default printing backend of the PrintNode Client set to Engine6 (you can change the default printing backend using the drop-down list in the "Printers" tab of the PrintNode Client's GUI). If this option is not specified the printer default is used.
copies Integer No Positive integer. Default 1. The number of copies to be printed. Maximum value as reported by the printer capability property copies.
dpi String No The dpi setting to use for this print job. Allowed values are those reported by the printer capability property dpis.
duplex String No One of long-edge or short-edge for two-sided printing along the long-edge (portrait) or the short edge (landscape) respectively, or one-sided for single-side printing. If this option is not specified the printer default is used.
fit_to_page Boolean No Set this to true to automatically fit the document to the page. In Windows, this option is only supported when using the Engine6 printing backend.
media String No The name of the medium to use for this print job. This must be one of the values reported by the printer capability property medias. Some printers on macOS / OS X ignore this setting unless the bin (paper tray) option is also set.
nup Integer No macOS / OS X only. Allows support for printing muliple pages per physical sheet of paper. Default 1. This must be one of the values reported by the printer capability property nup.
pages String No A set of pages to print from a PDF. The format is the same as the one commonly used in print dialogs in applications. A few examples:

1,3 prints pages 1 and 3.
-5 prints pages 1 through 5 inclusive.
- prints all pages.
1,3- prints all pages except page 2.
paper String No The name of the paper size to use. This must be one of the keys in the object returned by the printer capability property papers.
rotate Integer No One of 0, 90, 180 or 270. This sets the rotation angle of each page in the print – 0 for portrait, 90 for landscape, 180 for inverted portrait and 270 for inverted landscape. This setting is absolute and not relative. For example, if your PDF document is in landscape format, setting this option to 90 will leave it unchanged.

We have found that not all printers and printer drivers support this feature to the same degree. For instance, in Windows the 180 and 270 settings are often respectively treated like 0 and 90, i.e. they switch between portrait and landscape but do not invert the print.

Which Content Type is Right for You?

The content attribute of the print job may be either a URI to the document or the base64-encoded content of the document. We take security seriously at PrintNode but we understand that some organisations are not comfortable sending document contents to a third party. In this case, we recommend working with pdf_uri or raw_uri as your contentType and hosting the document yourself so that its contents are never sent to PrintNode.

Using pdf_base64 or raw_base64 to send a print job means that your data will need to be base64-encoded. This is very easy to do and you don't have to worry about hosting and managing your own print jobs. If you are sending small PDFs or doing RAW printing, e.g. courier labels, barcodes or reciepts, then this is a good option to choose. Note that base64 encoding increases the size of the content by approximately 33%.

If your PrintNode Client can download the content from a local network or web server, it may be faster to use the pdf_uri or raw_uri. This means that your print job content is never sent to the PrintNode server. This is usually faster if content is accessible locally and it can reduce bandwidth requirements for everyone.

In either case, the request body may not be larger than 50MB. If you attempt to POST a request that is larger than 50MB you will receive HTTP 413 Request Body Too Large. You can work around this size limit by using pdf_uri printing.

  URI Base64
Security Print jobs can be hosted on your own servers. Print jobs are sent through PrintNode servers which may be located outside your country. Note: we don't store your documents after they have been printed and we never read them or analyse their contents.
Speed Slightly faster without the slightly increased overhead of base64. If you can serve the printjob contents to your customers locally this will be faster still. Slower because of the 33% base64 overhead. This will make the biggest difference over a slow internet connection.
Developer Work You have to host the documents that you will be printing through PrintNode. You don't need to worry about hosting your own documents.
Maximum supported document size Unlimited. The request body, which includes the base64-encoded document, must not exceed 50MB. This means the maximum document size is just under 37.5MB.

Responses

When the print job is received, the PrintNode API will add it to the print queue and respond immediately, i.e. the PrintNode API does not wait for the print job to be sent to the specified printer before responding.

If the computer that controls that printer is not connected, the job will be queued and sent to the computer when it reconnects.

The response body to a successfully created print job is the id of the newly created print job.

Sample PDFs

Below are links to some sample PDF files that you can use for testing your printing.

Filename Size Pages Dimensions (inches)
4x6_2_up_ol145.pdf 293.8KB 1 8.5 x 11
4x6_2_up_on_8x11_avery_5126_or_ol400.pdf 297.91KB 1 8.5 x 11
4x6_2_up_on_8x11_with_packing_slip_avery_5127.pdf 217.21KB 1 8.5 x 11
4x6_combo_vertical_ol829.pdf 128.54KB 1 8.5 x 11
4x6_label_on_8x11_centered_on_letter_paper.pdf 148.92KB 1 8.5 x 11
a4_10_pages.pdf 17.74KB 10 3.9 x 6
a4_500_pages.pdf 406.73KB 500 8.3 x 11.7
a4_portrait.pdf 30.78KB 1 8.3 x 11.7
a5_portrait.pdf 30.54KB 1 5.8 x 8.3
fedex_label.pdf 30.72KB 1 4 x 6
label_3in_x_1in_barcode.pdf 6.86KB 1 3 x 1
label_4in_x_6in_ups_with_packing.pdf 216.08KB 2 6 x 4
label_4in_x_6in_ups.pdf 149.51KB 1 4 x 6
label_4in_x_6in.pdf 30.53KB 1 4 x 6
label_6in_x_4in.pdf 30.19KB 1 6 x 4
letter_portrait.pdf 30.74KB 1 8.5 x 11
test.pdf 23.86KB 2 3 x 1
ups_label.pdf 32.33KB 1 4 x 6
multipage.pdf 17.74KB 10 3.9 x 6

Idempotency

PrintNode allows you to specify an idempotency key when creating a print job. This allows you to submit a print job multiple times whilst assuring that PrintNode will only print it once.

A common scenario where this is useful is in case of an unreliable network connection. Suppose you submit a print job but do not receive a response – how do you know if PrintNode received your request or not? If you do not re-send the request, your print may not happen. If you do, you risk performing it twice.

The solution is to specify an idempotency key with each print job. This is simply a string which you specify using the X-Idempotency-Key HTTP header. When PrintNode receives a print job with an idempotency key, it makes a note of the key. Subsequent jobs with the same key are rejected with HTTP status code 409 (conflict). This way, you can resubmit a print job with confidence that it will not be printed again if PrintNode received it the first time.

Idempotency keys are not retained forever – they can be reused after 24 hours.

Example Request cURL

curl -X POST https://api.printnode.com/printjobs \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -H "Content-Type: application/json" \ -H "X-Idempotency-Key: abcde12345" \ -d '{ "printerId": 34, "title": "My Test PrintJob", "contentType": "pdf_uri", "content": "http:\/\/sometest.com\/pdfhere", "source": "api documentation!", "expireAfter": 600, "options": {"copies":2,"pages":"1,3,5","duplex":"long-edge","paper":"A4","bin":"Tray 1"}, "authentication": {"type":"BasicAuth","credentials":{"user":"username","pass":"password"}} }'

Response

{ "code": "Conflict", "message": "Idempotency key collision: abcde12345", "uid": "dcb655b3-facc-4b4b-93a0-196f3cd47e07" }
HTTP/1.1 409 Conflict Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 135 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: dcb655b3-facc-4b4b-93a0-196f3cd47e07 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: 3kgxbrHryLdlL4TphTjdaQ== Response-Time: 21

Viewing Print Jobs

You can view your print job history via GET/printjobs. You can also filter returned print jobs by printer or print job id. Just substitute the appropriate parameter into one of the URLs below.

GET/printjobs
GET/printjobs/PRINT JOB SET
GET/printers/PRINTER SET/printjobs
GET/printers/PRINTER SET/printjobs/PRINT JOB SET

Example Request cURL

curl https://api.printnode.com/printjobs \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "id": 473, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 1", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 474, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 2", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 475, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 3", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 476, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 4", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 477, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 5", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "error" }, { "id": 478, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 6", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 479, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 7", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 480, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 8", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 481, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 9", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "done" }, { "id": 482, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 10", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 483, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 11", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 484, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 12", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 485, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 13", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 486, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 14", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 487, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 15", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 488, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 16", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 489, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 17", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 490, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 18", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 491, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 19", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "error" }, { "id": 492, "printer": { "id": 33, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 1", "description": "Test Printer 1", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 20", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 493, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 1", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "error" }, { "id": 494, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 2", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 495, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 3", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 496, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 4", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 497, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 5", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 498, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 6", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 499, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 7", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 500, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 8", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 501, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 9", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 502, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 10", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 503, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 11", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "done" }, { "id": 504, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 12", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 505, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 1", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 506, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 2", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 507, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 3", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 508, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 4", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 509, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 5", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 510, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 6", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 511, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 7", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 512, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 8", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 513, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 9", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 514, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 10", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 515, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 11", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 516, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 12", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 517, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 13", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "done" }, { "id": 518, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 14", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 519, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 15", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 520, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 16", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 521, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 17", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 522, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 18", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 523, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 19", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 524, "printer": { "id": 35, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 3", "description": "Test Printer 3", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, "title": "Print Job 20", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 525, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 1", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 526, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 2", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 527, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 3", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 528, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 4", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 529, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 5", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "error" }, { "id": 530, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 6", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 531, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 7", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "error" }, { "id": 532, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 8", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 533, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 9", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 534, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 10", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 535, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 11", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 536, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 12", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 537, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 13", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 538, "printer": { "id": 36, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 4", "description": "Test Printer 4", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 14", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 539, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 1", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 540, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 2", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 541, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 3", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 542, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 4", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 543, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 5", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 544, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 6", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "done" }, { "id": 545, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 7", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 546, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 8", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 547, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 9", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 548, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 10", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 549, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 11", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 550, "printer": { "id": 37, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 5", "description": "Test Printer 5", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "Print Job 12", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 551, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 1", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 552, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 2", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 553, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 3", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 554, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 4", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 555, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 5", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 556, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 6", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 557, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 7", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 558, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 8", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 559, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 9", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 560, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 10", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 561, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 11", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 562, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 12", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "deleted" }, { "id": 563, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 13", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "expired" }, { "id": 564, "printer": { "id": 38, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 6", "description": "Test Printer 6", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "offline" }, "title": "Print Job 13", "contentType": "pdf_uri", "source": "Google", "expireAt": null, "createTimestamp": "2015-11-16T23:14:19.261Z", "state": "done" }, { "id": 565, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": null, "createTimestamp": "2015-11-16T23:21:56.227Z", "state": "deleted" }, { "id": 566, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": "2015-11-16T23:31:56.000Z", "createTimestamp": "2015-11-16T23:21:56.293Z", "state": "deleted" }, { "id": 567, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": null, "createTimestamp": "2015-11-16T23:22:02.141Z", "state": "deleted" }, { "id": 568, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": "2015-11-16T23:32:02.000Z", "createTimestamp": "2015-11-16T23:22:02.204Z", "state": "deleted" }, { "id": 569, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": null, "createTimestamp": "2015-11-16T23:23:02.602Z", "state": "deleted" }, { "id": 570, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": "2015-11-16T23:33:02.000Z", "createTimestamp": "2015-11-16T23:23:02.787Z", "state": "deleted" }, { "id": 571, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": null, "createTimestamp": "2015-11-16T23:23:39.122Z", "state": "deleted" }, { "id": 572, "printer": { "id": 34, "computer": { "id": 12, "name": "AnalyticalEngine", "inet": null, "inet6": null, "hostname": null, "version": null, "jre": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "disconnected" }, "name": "Printer 2", "description": "Test Printer 2", "capabilities": null, "default": null, "createTimestamp": "2015-11-16T23:14:12.354Z", "state": "online" }, "title": "pdfhere", "contentType": "pdf_uri", "source": "api documentation!", "expireAt": "2015-11-16T23:33:39.000Z", "createTimestamp": "2015-11-16T23:23:39.170Z", "state": "deleted" } ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 72605 Connection: keep-alive Vary: Accept-Encoding Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 1d1303ba-6e2e-42c7-a9b9-3e2144661e25 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Records-Returned: 100 Records-Returned-Offset: 0 Records-Returned-Limit: 100 Content-MD5: WQuhcY9Tp2J4KOlVzk1jrQ== Response-Time: 36

Cancelling Print Jobs

DELETE/printjobs
DELETE/printjobs/PRINT JOB SET
DELETE/printers/PRINTER SET/printjobs
DELETE/printers/PRINTER SET/printjobs/PRINT JOB SET

If a print job has not yet been delivered to the PrintNode Client, you can cancel it using these API endpoints. It is possible to filter print jobs by printer and/or print job id. Just substitute the appropriate parameters into one of the URLs above. The server will respond with HTTP 200 OK and the response body will be a JSON array of the ids of the print jobs which have been cancelled.

Print jobs which have been completed or have been delivered to the PrintNode Client cannot be cancelled.

Example Request cURL

curl -X DELETE https://api.printnode.com/printjobs/623 \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ 623 ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 11 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 7c00bb67-53f0-4b47-93da-660b1a3d7413 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: 2XEfi7QtBoX5R+Qn6iV1MA== Response-Time: 11

Print Job States

GET/printjobs/states
GET/printjobs/PRINT JOB SET/states

As a print job is handled it progresses through a number of states – for example, when a print job is created its state is always new. The states a print job passes through as it is processed are not fixed and can vary from print job to print job (for example, most print jobs finish in the done state but a print job can finish in the error state if something goes wrong).

Because a print job is created through the API and eventually handed over to a PrintNode Client, print job states can be generated on the PrintNode Server (e.g. new) or the Client (e.g. done). This means that the population of states generated by the Client and Server may change over time as new versions of the Client and Server are released. However, it is important that some states are not subject to change, because integrations and end users need to rely on them for diagnosis, reporting and automation.

For this reason, certain states are defined to be stable. This means they are part of PrintNode's stable API and have the same backwards compatibility guarantees as the rest of the API. It is safe for your integration to rely on these states and their semantics. A print job state will only be published in a webhook message if it is a stable state.

The stable print job states are as follows:

State Description
new The print job has been registered in the system.
sent_to_client The print job has been sent to the PrintNode Client.
done The print job has been delivered by the PrintNode Client to the operating system's print queue. This means the print is now outside PrintNode's control – it is still possible for the print to fail at this point, e.g. if the printer malfunctions.
error An error was encountered whilst attempting to execute the print. Possible causes include hardware failure, driver issues, incorrect printer setup and connectivity problems.
expired The print job could not be delivered to the PrintNode Client before its expiry time.

The object which describes a print job state has the following keys:

Attribute Type Description
printJobId Integer The id of the print job this state relates to.
state String May be one of the "stable" states described above, i.e. new, sent_to_client, done, error or expired, or some other value.
message String Additional information about the state.
data Object Reserved for future use.
clientVersion String If the state was generated by the PrintNode Client, this is the Client's version; otherwise null.
createTimestamp String If the state was generated by the PrintNode Client, this is the timestamp at which the state was reported to the PrintNode Server. Otherwise, it is the timestamp at which the PrintNode Server generated the state.
age Integer The time elapsed, in milliseconds, between this state's createTimestamp and the createTimestamp of the print job's new state.

Example Request cURL

curl https://api.printnode.com/printjobs/states?limit=1 \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ [ { "printJobId": 624, "state": "new", "message": null, "data": null, "clientVersion": null, "createTimestamp": "2015-11-26T16:55:05.757Z", "age": 0 } ] ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 212 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 6013917b-fbbf-4061-90d4-d98293360910 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Records-Returned: 1 Records-Returned-Offset: 0 Records-Returned-Limit: 1 Content-MD5: BaWoIgcvF11cg0+fQYRzmA== Response-Time: 12

Scales

HTTP REST

GET/computer/COMPUTER ID/scales
GET/computer/COMPUTER ID/scales/DEVICE NAME
GET/computer/COMPUTER ID/scale/DEVICE NAME/DEVICE NUMBER

These endpoints allow you to query the weighing scales attached to a computer. Note the plural "scales" in the first two endpoints and singular "scale" in the third endpoint. This is because the first two endpoints can return data for multiple scales and the third endpoint always queries a specific scale. Because of this, the first two endpoints always return a list (which may be empty) and the third endpoint returns a scale data object or HTTP 404 Not Found.

DEVICE NAME is a string which identifies a make and model of scale. By default this is of the form "manufacturer - model" but can be altered in the PrintNode Client to a more descriptive and convenient identifier. Operating systems don't always allow unique identification of USB devices and in the event multiple scales of the same make and model are connected to a computer, they can be distinguished by the integer DEVICE NUMBER.

Scale Data Object

  • massArray - length 2

    The first element represents the mass returned by the scale in micrograms. If the scale has been unable to calucate a weight, this element isnull. This most commonly happens when scales display a negative weight. Although many scales can display negative weights on their built-in displays, they are often unable to return negative weight readings over their USB interfaces.

    The second element represents the resolution of the scale in micrograms, where this is known, or null otherwise.

    For example, a reading of 125g with a resolution of 5g would be represented as [125000000, 5000000].

  • computerIdInteger

    The computer id.

  • vendorText

    String description of the vendor or manufacturer of the scales device.

  • vendorIdInteger

    The USB device vendor id. See here for a detailed description and see here for an up-to-date list of vendor and product ids.

  • productIdInteger

    The USB device product id. See here for a detailed description and see here for an up-to-date list of vendor and product ids.

  • portText

    A string representing the port to which the scale is connected, e.g. "USB1" or "COM0".

  • deviceNameText

    A string identifier for the scale. This is usually the scale's manufacturer and description, unless it has been renamed in the PrintNode Client.

  • deviceNumInteger

    If more than one scale with the same deviceName is connected to a computer, they will be assigned different deviceNum properties. This makes it possible to distinguish between them.

    deviceNum values start at 0 and when a scale is connected to a computer it is assigned the smallest unused deviceNum value for scales with the same deviceName. For example, if two scales with different deviceNames are connected they will both have deviceNum 0. If two scales with the same deviceName are connected they will be assigned deviceNums of 0 and 1. The scale which was connected first gets deviceNum 0.

  • countInteger

    Reserved for future use. Currently null.

  • measurementObject

    Scales can usually display their readings in imperial or metric units. The keys in this object represent the units shown on the scale's built-in display at the time of measurement. Supported units are: g, kg, lb and oz. The value for each key is the reading in billionths of the corresponding unit. This information makes it easy to determine the reading being displayed on the scale itself. In terms of measurement, it provides the same information as the mass property. Use whichever one you find more convenient.

    For example, display values of "1.2 kg", "1200g" or "2lb 10.32oz" would result in measurement values of {"kg":1200000000}, {"g": 1200000000000} and {"lb": 2000000000, "oz": 10320000000} respectively, but in all three cases the first element of the mass array would be 1200000000.

  • clientReportedCreateTimestampDateTime

    The time as reported by the computer the scale is attached to at the time of generation of the scale data.

  • ntpOffsetInteger

    Reserved for future use. Currently null.

  • ageOfDataInteger

    The length of time for which the scale data has been stored at PrintNode in milliseconds. When receiving data over a websocket, it is delivered as soon as it is available, so this will be low – expect values from 3ms to 10ms. For the standard HTTP endpoints this will normally be much larger, although scale data is deleted after 45 seconds.

Getting All Scales for a Computer

GET/computer/COMPUTER ID/scales

Example Request cURL

curl https://api.printnode.com/computer/0/scales \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "mass": [ 779000000, null ], "deviceName": "PrintNode Test Scale", "deviceNum": 0, "port": "\\\\?\\hid#vid_0922&pid_8004#7&1f8c62d&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "count": null, "measurement": { "g": 779000000000 }, "clientReportedCreateTimestamp": "2015-11-26T16:55:05.840Z", "ntpOffset": null, "ageOfData": 115, "computerId": 0, "vendor": "PrintNode", "product": "Test Scale", "vendorId": 0, "productId": 0 } ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 520 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: de1c1a56-008d-4e30-8110-c06cb956161f Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: braFGWUStxY6+w+CYS9yLg== Response-Time: 8

The response is an array of the most recent scale data objects produced by this computer. If there are no scales attached to the computer, the response is an empty array. Provided COMPUTER ID is a positive integer this method will always return HTTP 200 OK, even if COMPUTER ID does not correspond to a computer controlled by your account.

Filtering by Device Name

GET/computer/COMPUTER ID/scales/DEVICE NAME

Example Request cURL

curl "https://api.printnode.com/computer/0/scales/PrintNode%20Test%20Scale" \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "mass": [ 779000000, null ], "deviceName": "PrintNode Test Scale", "deviceNum": 0, "port": "\\\\?\\hid#vid_0922&pid_8004#7&1f8c62d&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "count": null, "measurement": { "g": 779000000000 }, "clientReportedCreateTimestamp": "2015-11-26T16:55:05.840Z", "ntpOffset": null, "ageOfData": 140, "computerId": 0, "vendor": "PrintNode", "product": "Test Scale", "vendorId": 0, "productId": 0 } ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 520 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 0f2a6017-40fd-42c8-af78-8a87db7ee301 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: XifVbXgfzTzqYeLSvz9cEw== Response-Time: 4

The response is an array of the most recent scale data objects produced by scales with device name DEVICE NAME attached to this computer. If there are no such scales attached to the computer, the response is an empty array.

Filtering by Device Name and Number

GET/computer/COMPUTER ID/scale/DEVICE NAME/DEVICE NUMBER

Note that the /scale/ part of this endpoint is not pluralised.

Example Request cURL

curl "https://api.printnode.com/computer/0/scale/PrintNode%20Test%20Scale/0" \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

{ "mass": [ 779000000, null ], "deviceName": "PrintNode Test Scale", "deviceNum": 0, "port": "\\\\?\\hid#vid_0922&pid_8004#7&1f8c62d&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "count": null, "measurement": { "g": 779000000000 }, "clientReportedCreateTimestamp": "2015-11-26T16:55:05.840Z", "ntpOffset": null, "ageOfData": 164, "computerId": 0, "vendor": "PrintNode", "product": "Test Scale", "vendorId": 0, "productId": 0 }
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 474 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: da3352ce-3f25-420d-acf4-312549f25833 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: fCmRvtULN0yg2v6BXlTYeQ== Response-Time: 4

If there is a scale with device name DEVICE NAME and device number DEVICE NUMBER attached to this computer and it produced a scale data object in the last 45 seconds, this endpoint returns the the most recent such object. Otherwise this endpoint returns HTTP 404 Not Found.

Example Request cURL

curl "https://api.printnode.com/computer/12/scale/not_a_real_scales_device_name/0" \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

{ "code": "ResourceNotFound", "message": "Unable to find any scales with device name 'not_a_real_scales_device_name', device number 0 attached to computer id 12." }
HTTP/1.1 404 Not Found Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 170 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: fc8bc253-376f-48a4-b19c-4d377cf2cc54 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: DSKhM5cRa1lRF+L7BZwqPQ== Response-Time: 3

Websockets

The Best Way to Access a USB Scale From a Browser

There is a comprehensive Websocket API which covers all the scales functionality. This is the best way of accessing scales data in a browser and will provide a really fast user experience.

Everything is RFC 6455-compliant, i.e. it will work with your browser's window.Websocket JavaScript object. You can check browser compatibility here.

You will need to use the PrintNode JavaScript client, which is a tiny, zero-dependency JavaScript library. There are lots of examples and documentation available in the GitHub repository.

Developing and Testing the Scales API

PUT/scale

You may not have access to a physical scale during development, so for convenience our server implements a virtual scale with the device number 0 and device name PrintNode Test Scale, connected to computer 0.

Sending an API call to the above endpoint simulates a single measurement from this scale, which will be available in the API for 45 seconds, just like a real measurement. During this time you can query it using all scale-related endpoints. It will also be published to subscribed websockets.

Webhooks

The following terminology is specific to webhooks:

  • A webhook is a setting which causes the PrintNode Server to attempt to notify an HTTP server when certain events occur.
  • A target is an HTTP server which a webhook has been configured to notify.
  • An event is an instance of a webhook being triggered, for example because a computer connected to PrintNode. An event has a payload, which is the data that will be sent to the webhook's target.
  • A successful request is an HTTP request from PrintNode to a target which results in a response with a 2xx HTTP status code and the X-PrintNode-Webhook-Status response header set to OK.
  • A failed request is an HTTP request from PrintNode to a target which is not a successful request.

A webhook has the following properties:

Property Description
url The URL of the webhook's target.
secret A string which will be sent to the target in each request. This allows you to verify that a message comes from PrintNode.
messages An array of strings which represent the message types that should trigger the webhook.

If this array contains *, the webhook will be triggered by every message type and the array must not contain any other strings. Otherwise, the webhook will be triggered by any message whose type is one of the strings in this array. Supported message types are:
  • computer state
  • print job state

More message types will be added in the future.

Newly created accounts have no webhooks. An account may have at most five webhooks at any point in time.

When an event occurs, it is queued up until it is due to be sent in an HTTP request to its target. The time at which a message is due is determined as follows:

  • If no HTTP request has been made to the target, the message is due immediately.
  • If the last HTTP request to the target was successful, the message is due immediately.
  • If the last HTTP request to the target was not successful, the message is due in five seconds.

Queued events are not affected by changes to the webhooks that generated them. Deleting a webhook with queued events will not delete the events. Changing the URL of a webhook with queued events will not cause those events to be sent to the new URL.

When a failed request occurs, each event associated with that request will be re-added to the queue, unless it has already been retried, in which case it will be dropped.

An HTTP request to a target will deliver all the due events for that target. The request body is in JSON and is an array of objects that follow this pattern:

{ "type": (the message type), "accountId": 123, "controllingAccountId": 456, "createdAt": "2018-08-22T20:21:08.627001Z", "data": (depends on message type) }
Attribute Type
type String Currently supported types are computer state and print job state. More message types will be added in the future.
accountId Integer The id of the account which generated the event.
controllingAccountId Integer The id of the controlling account of the account which generated the event. An account's controlling account is itself if it is a Single Account or an Integrator Account, and its parent if it is a Child Account.
createdAt DateTime The time at which the webhook event was created.

For a computer state message, data looks like this:

{ "connections": [ { "serverUuid": "a1b2c3d4-a1b2-c3d4-e5f6-a1b2c3d4e5f6", "connectionTimestamp": "2018-08-22T20:21:08.627001Z" "version": "1.2.3", "edition": "abc", "hostname": "xyz" } (possibly more similar objects) ], "event": { "serverUuid": "a1b2c3d4-a1b2-c3d4-e5f6-a1b2c3d4e5f6", "connectionTimestamp": "2018-08-22T20:21:08.627001Z" "version": "1.2.3", "edition": "abc", "hostname": "xyz" "disconnectionTimestamp": "2018-08-22T20:21:08.627001Z" (present if and only if the message is being sent due to a disconnection) } }

For a print job state message, data looks like this:

{ "uid": "a1b2c3d4-a1b2-c3d4-e5f6-a1b2c3d4e5f6", "state": "sent_to_client", "message": "downloaded 100.0KiB in 30 seconds", "printJobId": 1234 }

Viewing Webhooks

GET/webhooks

Example Request cURL

curl https://api.printnode.com/webhooks \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "counts": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp1d": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp1h": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp5m": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp7d": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "messages": ["*"], "secret": "password", "url": "http://10.1.1.2:8000", "webhookId": 11 } ]

The response is an array of objects, one per webhook.

url, secret and messages are described above.

webhookId is a system-generated integer id which identifies the webhook. The other fields each show measures of the following qualities:

  • receivedEvents – the number of times the webhook has been triggered.
  • droppedEvents – the number of times the webhook has given up on sending an event's payload because it has been retried too many times.
  • successfulRequests – the number of successful HTTP requests that have been sent.
  • failedRequests – the number of failed HTTP requests that have been sent.

counts shows straight counts. exp7d shows exponential decay counts on a seven-day timescale. exp1d shows exponential decay counts on a one-day timescale. exp1h shows exponential decay counts on a one-hour timescale. exp5m shows exponential decay counts on a five-minute timescale.

Creating Webhooks

POST/webhook
Attribute Type Is Required Specification
url String Yes The URL of the webhook's target.
secret String Yes A string which will be sent to the target in each request. This allows you to verify that a message comes from PrintNode.
messages String Yes An array of strings which represent the message types that should trigger the webhook.

If this array contains *, the webhook will be triggered by every message type and the array must not contain any other strings. Otherwise, the webhook will be triggered by any message whose type is one of the strings in this array. Supported message types are:
  • computer state
  • print job state

More message types will be added in the future.

Example Request cURL

curl -X POST -u 44784dd8d88be9631046ff83e9044419ff824b10: https://api.printnode.com/webhook -d '{ "url": "http://www.myserver.com", "secret": "password", "messages": ["*"] }

Response

[ { "counts": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp1d": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp1h": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp5m": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp7d": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "messages": [ "*" ], "secret": "password", "url": "http://www.myserver.com", "webhookId": 188 } ]
HTTP/1.1 200 OK HTTP/1.1 200 OK Api-Version: 3.0.0 Cache-Control: no-store, must-revalidate Content-Length: 1584 Content-Md5: pY/5tH0aR2JrQlrpUGtmFw== Content-Type: application/json Elapsed: 0.005847962 Request-Id: dea28fa2-1576-43aa-9d64-f90c536be516 Response-Time: 6 Server: PrintNodeApi X-Account: 436 X-Auth-With: ApiKey Date: Mon, 29 Oct 2018 03:15:24 GMT

The response is the same as the response to GET/webhooks after changes have been made.

Modifying Webhooks

PATCH/webhook/WEBHOOK ID

A webhook can be modified using PATCH /webhook/WEBHOOK ID, where WEBHOOK ID is the integer id of the webhook.

All fields in the request body are the same as POST/webhook and are all optional.

The response is the same as the response to GET/webhooks after changes have been made.

The webhook modification and response are not atomic, i.e. the response may reflect other changes made concurrently.

Example Request cURL

curl -X PATCH -u 44784dd8d88be9631046ff83e9044419ff824b10: https://api.printnode.com/webhook/188 -d '{ "url": "http://www.myserver.com", "secret": "password1", "messages": ["computer state"] }

Response

[ { "counts": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp1d": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp1h": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp5m": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "exp7d": { "droppedEvents": 0, "failedRequests": 0, "receivedEvents": 0, "successfulRequests": 0 }, "messages": [ "computer state" ], "secret": "password1", "url": "http://www.myserver.com", "webhookId": 188 } ]
HTTP/1.1 200 OK HTTP/1.1 200 OK Api-Version: 3.0.0 Cache-Control: no-store, must-revalidate Content-Length: 1598 Content-Md5: lZqiDMLiVpfsWYmZBj8acw== Content-Type: application/json Elapsed: 0.001886568 Request-Id: 2a98d52f-b673-4f2d-9c9e-db8de8482d91 Response-Time: 2 Server: PrintNodeApi X-Account: 436 X-Auth-With: ApiKey Date: Mon, 29 Oct 2018 03:35:20 GMT

Deleting Webhooks

DELETE/webhook/WEBHOOK ID

A webhook can be deleted using DELETE /webhook/WEBHOOK ID, where WEBHOOK ID is the integer id of the webhook.

The response is the same as the response to GET/webhooks after changes have been made.

The webhook deletion and response are not atomic, i.e. the response may reflect other changes made concurrently.

Example Request cURL

curl -X DELETE -u 44784dd8d88be9631046ff83e9044419ff824b10: https://api.printnode.com/webhook/188

Response

[]
HTTP/1.1 200 OK Api-Version: 3.0.0 Cache-Control: no-store, must-revalidate Content-Length: 4 Content-Md5: i41JhJxfyir4mnyGyCxM7Q== Content-Type: application/json Elapsed: 0.001393309 Request-Id: 052454a2-9a71-46d1-b29d-26b51028ca74 Response-Time: 1 Server: PrintNodeApi X-Account: 436 X-Auth-With: ApiKey Date: Mon, 29 Oct 2018 03:42:10 GMMT

Account Management

If you are integrating PrintNode into your application, you might want to programmatically create and manage separate PrintNode Accounts for your customers and end-users.

PrintNode provides this functionality through Integrator Accounts. An Integrator Account is a PrintNode Account with the ability to create sub-accounts called Child Accounts. Child Accounts are separate from each other and have their own credentials but are under the control of the Integrator Account which created them.

To enable this feature, upgrade your account to an Integrator Account here.

Creating Child Accounts

POST/account
Attribute Type Is Required? Specification
Account[firstname] string Yes DEPRECATED.

Although this field is required, it will be removed from the API soon. We strongly recommend that you set this field to - (the API will not accept an empty string) and use Account[creatorRef] (described below) to identify the account.
Account[lastname] string Yes DEPRECATED.

Although this field is required, it will be removed from the API soon. We strongly recommend that you set this field to - (the API will not accept an empty string) and use Account[creatorRef] (described below) to identify the account.
Account[email] string Yes A contact email address for your customer. This email is for actions like account password resets, informing customers of new versions of the PrintNode Client, etc.

Other than in the above cases, we will never contact your customers unless agreed in advance with you. In particular, we will never contact your customers regarding marketing or promotions and we never share data of any kind with any third party.
Account[password] string Yes The password must be at least eight bytes long.

In line with current best practices regarding password strength, we do not impose any other complexity requirements, such as inclusion of numbers and symbols.
Account[creatorRef] string No A unique reference which you can use as a method to identify an account.
ApiKeys[] Array[String] No An array of API Key names. When the account is created, an API key will be generated for each name in this array.

Key names must be at most 16 bytes long. At most 10 key names can be supplied.
Tags[] Object No An object, the keys of which are tag names and the values of which are corresponding tag values. These tags will be applied to the newly created account. Tag values must be at most 1024 bytes long.

Example Request cURL

curl -X POST https://api.printnode.com/account \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -H "Content-Type: application/json" \ -d '{ "Account": { "firstname": "Ada", "lastname": "Lovelace", "email": "ada.lovelace@myfirstprogram.com", "password": "password", "creatorRef": "ada.lovelace" }, "ApiKeys": [ "development", "production" ], "Tags": { "likes": "pianos" } }'
curl -X POST https://api.printnode.com/account \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d 'Account[firstname]=Ada' \ -d 'Account[lastname]=Lovelace' \ -d 'Account[email]=ada.lovelace@myfirstprogram.com' \ -d 'Account[password]=password' \ -d 'Account[creatorRef]=ada.lovelace' \ -d 'ApiKeys[]=development' \ -d 'ApiKeys[]=production' \ -d 'Tags[likes]=pianos'

Response

{ "Account": { "id": 477, "creatorRef": "ada.lovelace", "firstname": "Ada", "lastname": "Lovelace", "email": "ada.lovelace@myfirstprogram.com" }, "ApiKeys": { "development": "f4c2b7b9d2d78d039825e986405215c32ca70855", "production": "956bb9a433dc4d9b11ca8f3502b2b87017d28555" }, "Tags": { "likes": "pianos" }, "credits": null }
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 374 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 3a48320d-871f-4b99-b735-0fd8ef192320 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 439 Content-MD5: M4BgCV+vgWE4tPz55YZc1Q== Response-Time: 50

Modifying Child Accounts

To update a Child Account's properties, use PATCH/account. To identify the account you wish to modify, use one of the X-Child-Account-By-* headers.

You can modify the following properties: firstname, lastname, email, password and creatorRef. They are all optional.

This endpoint provides the same response as GET/whoami, showing the updates which have been made.

Example Request cURL

curl -X PATCH https://api.printnode.com/account \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d 'firstname=Charles' \ -d 'lastname=Babbage' \ -d 'password=steampunk' \ -d 'email=charles.babbage@mechanicalmarvels.com' \ -d 'creatorRef=charles.babbage'
curl -X PATCH https://api.printnode.com/account \ -H 'X-Child-Account-By-Id: 477' \ -H "Content-Type: application/json" \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d '{ "firstname": "Charles", "lastname": "Babbage", "password": "steampunk", "email": "charles.babbage@mechanicalmarvels.com", "creatorRef": "charles.babbage" }'

Response

{ "id": 477, "firstname": "Charles", "lastname": "Babbage", "email": "charles.babbage@mechanicalmarvels.com", "canCreateSubAccounts": false, "creatorEmail": "god@printnode.com", "creatorRef": "charles.babbage", "childAccounts": [], "credits": null, "numComputers": 0, "totalPrints": 0, "versions": [], "connected": [], "Tags": { "likes": "pianos" }, "ApiKeys": { "production": "956bb9a433dc4d9b11ca8f3502b2b87017d28555", "development": "f4c2b7b9d2d78d039825e986405215c32ca70855" }, "state": "active" }
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 551 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 774b4743-61cc-4557-bc48-e3a7bf22114a Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: RlaLVU6wV9nV3vja/w7j6w== Response-Time: 22

Suspending and Activating Child Accounts

An Integrator Account may suspend a Child Account by making a request to PUT/account/state with an X-Child-Account-By-* header identifying the Child Account to be suspended. The request body should be set to "suspended".

If the Child Account is suspended, an Integrator Account may activate it by making a request to the same endpoint with the request body set to "active".

An Integrator Account may check a Child Account's current state by making a request to GET/account/state with an X-Child-Account-By-* header identifying the Child Account. The response will be either "active" or "suspended".

Example Request cURL

curl -X PUT https://api.printnode.com/account/state \ -H 'X-Child-Account-By-Email: ada.lovelace@myfirstprogram.com' \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d '"suspended"'
curl -X PUT https://api.printnode.com/account/state \ -H 'X-Child-Account-By-CreatorRef: ada.lovelace' \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d '"suspended"'
curl -X PUT https://api.printnode.com/account/state \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d '"suspended"'

Response

HTTP/1.1 204 No Content Date: Tue, 30 Oct 2018 13:46:06 GMT Connection: keep-alive Api-Version: 3.0.0 Cache-Control: no-store, must-revalidate Content-Md5: 1B2M2Y8AsgTpgAmY7PhCfg== Elapsed: 0.054020766 Request-Id: 44c23de6-c7b1-49a0-b736-701040c2f8d4 Response-Time: 54 Server: PrintNodeApi X-Account: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Child-Account-By-Id: 477

Deleting Child Accounts

An Integrator Account may delete a Child Account by making a request to DELETE/account with an X-Child-Account-By-* header identifying the Child Account to be deleted.

Example Request cURL

curl -X DELETE https://api.printnode.com/account \ -H 'X-Child-Account-By-Email: ada.lovelace@myfirstprogram.com' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:
curl -X DELETE https://api.printnode.com/account \ -H 'X-Child-Account-By-CreatorRef: ada.lovelace' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:
curl -X DELETE https://api.printnode.com/account \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

HTTP/1.1 204 No Content Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 298bd2d4-194a-4655-99ea-2fdd185ca25b Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg== Response-Time: 12

An Integrator Account can make an API request as if it were being performed by one of its Child Accounts by including a header which identifies the Child Account. The Child Account can be uniquely identified by its account id, its email or its creatorRef.

The headers which correspond to these identifiers are as follows.

Only one header is required.

For example, to perform an API request as the Child Account with account id 123, set the X-Child-Account-By-Id header's value to 123.

If an API request using an X-Child-Account-By-* header succeeds, it will respond with two information headers as follows:

The X-Account response header is returned as usual and gives the account id of the Child Account. Submitting an X-Child-Account-By-* header which does not specify a valid Child Account will return HTTP 401 Unauthorized.

Example Request cURL

curl https://api.printnode.com/whoami \ -H 'X-Child-Account-By-Email: ada.lovelace@myfirstprogram.com' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:
curl https://api.printnode.com/whoami \ -H 'X-Child-Account-By-CreatorRef: ada.lovelace' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:
curl https://api.printnode.com/whoami \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

{ "id": 477, "firstname": "Ada", "lastname": "Lovelace", "email": "ada.lovelace@myfirstprogram.com", "canCreateSubAccounts": false, "creatorEmail": "god@printnode.com", "creatorRef": "ada.lovelace", "childAccounts": [], "credits": null, "numComputers": 0, "totalPrints": 0, "versions": [], "connected": [], "Tags": { "likes": "pianos" }, "ApiKeys": { "production": "956bb9a433dc4d9b11ca8f3502b2b87017d28555", "development": "f4c2b7b9d2d78d039825e986405215c32ca70855" }, "state": "active", "permissions": [ "Unrestricted" ] }
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 582 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: f019aac8-a956-405c-b2a2-d53c150f1452 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: 15wATS+PyvfTzvNCVRvpdQ== Response-Time: 13

Tagging

You can attach metadata to a PrintNode Account using tags. A tag has a name and an associated value.

Name String. Max length 64.
Alphanumeric, dot, dash and underscore characters only.
Value String. Max length 1024.

To create or update a tag make a request to POST/account/tag/NAME.

Example Request cURL

curl -X POST https://api.printnode.com/account/tag/enjoys \ -H "Content-Type: application/json" \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d '"long walks in the park"'
curl -X POST https://api.printnode.com/account/tag/enjoys \ -H "Content-Type: text/plain" \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -d 'long walks in the park'

Response

"created"
HTTP/1.1 201 Created Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 11 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: f4f1ee65-abf8-4c63-9231-1a3df1304985 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: JGVRHkmsRdtcb6omc1o/EQ== Response-Time: 8

To get a tag's value make a request to GET/account/tag/NAME.

Example Request cURL

curl https://api.printnode.com/account/tag/enjoys \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

"long walks in the park"
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 26 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 1bfa326d-0bc4-4027-b437-bf925d19ecce Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: ZQBY97Ek9yE+koEjoNd7tQ== Response-Time: 6

To delete a tag make a request to DELETE/account/tag/NAME.

Example Request cURL

curl -X DELETE https://api.printnode.com/account/tag/enjoys \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

true
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 6 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 4aef4f98-2709-4600-b582-6f01643cb88b Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: uZVMo5kdxzrrKZ33JGgovQ== Response-Time: 8

API Keys

You can get, create or delete Child Account API Keys using /account/apikey/DESCRIPTION.

Each API Key is identified by a unique name. Replace DESCRIPTION with the name of the API Key you wish to affect.

To create an API Key make a request to POST/account/apikey/DESCRIPTION.

Example Request cURL

curl -X POST https://api.printnode.com/account/apikey/description \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

"23d5b4259465ca7bfd36caf761f05db5845d1b16"
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 44 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: ce904f49-938f-439a-89b3-8bedd8da5827 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: j1s6cHAcmUGhyAnBBgy1lw== Response-Time: 22

To get an API Key make a request to GET/account/apikey/DESCRIPTION.

Example Request cURL

curl https://api.printnode.com/account/apikey/description \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

"23d5b4259465ca7bfd36caf761f05db5845d1b16"
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 44 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: aac75716-5fdb-444e-8e86-f782a7fccb80 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: j1s6cHAcmUGhyAnBBgy1lw== Response-Time: 8

To delete an API Key make a request to DELETE/account/apikey/DESCRIPTION.

Example Request cURL

curl -X DELETE https://api.printnode.com/account/apikey/description \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

true
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 6 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: ffd989c4-e9be-4bb5-ad9a-266a4235d975 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: uZVMo5kdxzrrKZ33JGgovQ== Response-Time: 14

You can perform these actions for your own Account in our web app.

Delegated Client Authentication

If you have a custom-branded version of the PrintNode Client it can support third-party authentication systems. If you implement support for this, your users can securely authenticate and identify themselves to PrintNode using credentials which are stored and managed in your existing authentication system. For example, if your users normally authenticate to your Active Directory, they can use those same credentials to authenticate to PrintNode. Note that their Active Directory credentials are not sent to PrintNode.

This can be useful in situations where PrintNode is being used as a component in another system which already provides authentication and identification services. This improves your end-user experience (one fewer password to remember and manage) and provides a really seamless way to integrate with PrintNode.

How Does it Work?

The first time you install and run a PrintNode Client it asks for a username and password. The username and password are used to request a Client Key. A Client Key is a 47-character string and is conceptually similar to an API Key. It is used by a client to authenticate and identify all of its communications with PrintNode.

When using Delegated Client Authentication, the client requests a Client Key not from PrintNode but from an API endpoint which you have implemented. Your server checks the username and password provided by the client (for example, against your Active Directory implementation). If the username and password are valid, your server requests a Client Key from the PrintNode API and returns this to the client. If the credentials are invalid, your server returns HTTP 401 Unauthorized to the client.

In either case, the account credentials never leave your network, are never seen by PrintNode and are not retained or recorded by the PrintNode Client.

delegated-authentication

The following are required:

Authentication URL Specification

Request

Your authentication URL must respond to a HTTPS GET request. The username and password will be supplied using HTTP Basic authentication. The URL can be anything you choose as long as we can encode (and you can decode) the following parameters:

  • A client identifier. This is a version 4 UUID.
  • A version number.
  • An edition name.

For example:

GEThttps://api.printnode.com/client/key/a6860624-3838-4efd-b918-f4de765cf192?version=4.7.1&edition=printnode

Response

The requirements for the response are as follows:

  • The Content-Type must be application/json.
  • If the response is HTTP 200 OK, the response body should be the Client Key which your server obtained from PrintNode, JSON-encoded.
  • If the response is HTTP 401 Unauthorized, the response should be a JSON object with two keys: code and message. The value of code should be Unauthorized. The value of message is up to you. Note that message will be displayed to the end-user.

A Useful Tip

When you use Delegated Client Authentication you do not need to manually create PrintNode Accounts for your end-users in advance. You can create accounts on-the-fly when your users attempt to authenticate. In your Delegated Client Authentication endpoint simply add an API request to PrintNode which checks whether a Child Account exists for that user. If not, create it and then proceed as normal.

Getting a Client Key From PrintNode

GET/client/key/UUID?edition=EDITION&version=VERSION

UUID, EDITION and VERSION are the parameters passed by the PrintNode Client to your Delegated Client Authentication endpoint.

Example Request cURL

curl "https://api.printnode.com/client/key/5470de8f-40be-4c0e-9712-46806d9e8d42?version=4.7.1&edition=printnode" \ -H 'X-Child-Account-By-Id: 477' \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

"ck-X98csd4gDb+3OpEkNjKZ1J5SskXLhxCUNRTGdPy+y1ue"
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 51 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 1784e321-da40-4c10-a3f8-b65e8b381c1e Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Child-Account-By-Id: 477 X-Auth-With: ApiKey X-Authorized-As: 439 X-Account: 477 Content-MD5: u0RHOrxFArESBEjRKDHyWw== Response-Time: 15

Managing Client Downloads

The PrintNode Client is actively developed and we release new versions with new features and bugfixes regularly. If we have provided you with a custom-branded client, it will receive these updates too. The latest version will be available at:

https://app.printnode.com/download/client/EDITION NAME/OPERATING SYSTEM

Valid values for OPERATING SYSTEM are osx and windows. EDITION NAME is a string which you may choose when we first provide you a custom-branded client. Typically this is the name of your organization or the application into which you are integrating PrintNode.

We strongly recommend that your users download the client directly from PrintNode using this URL. Hosting a custom-branded PrintNode Client yourself has two significant disadvantages:

  • The client can only check for available updates from the PrintNode website. It cannot detect when an update is published on your own website.
  • If we detect a serious bug in a client version, we can immediately prevent distribution of that version by pulling it from our website. Obviously, we cannot prevent distribution of a client which is hosted elsewhere.

Most customers are happy to automatically track the releases of the standard PrintNode Client but you may have additional QA requirements or you might wish to pin your customers to a certain version. If this is the case, no problem – the following API endpoints allow you to control which client download is presented for your edition.

Getting The Latest Client

Use GET/download/clients/OPERATING SYSTEM to fetch information about the latest version of the client available for an operating system. Valid values for OPERATING SYSTEM are osx and windows.

Example Request cURL

curl https://api.printnode.com/download/client/windows \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

{ "edition": "tyrell", "version": "3.3.0", "os": "windows", "filename": "TyrellCorporation-3.3.0+050.exe", "filesize": 14582098, "sha1": "22d34b7644e6a7cd3b9979d8f3629f98832650be", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/download/client/tyrell/windows" }
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 314 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: adf6c9e2-5e2d-4669-87d5-696ac7c3b274 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 439 Content-MD5: Y/kGN9ZK7hvwE9egijSt6A== Response-Time: 7

Getting All Clients

You can get a list of all client versions supported for your account using the following endpoints:

GET/download/clients
GET/download/clients/DOWNLOAD ID SET

Example Request cURL

curl https://api.printnode.com/download/clients \ -u 44784dd8d88be9631046ff83e9044419ff824b10:

Response

[ { "id": 18, "enabled": false, "edition": "tyrell", "version": "3.3.0", "os": "osx", "filename": "TyrellCorporation-3.3.0+f71.dmg", "filesize": 14665374, "sha1": "dda838dc045e1b0b31de249a686d42549fd701e3", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.3.0/tyrell/TyrellCorporation-3.3.0+f71.dmg" }, { "id": 17, "enabled": true, "edition": "tyrell", "version": "3.3.0", "os": "linux", "filename": "TyrellCorporation-3.3.0+62c.deb", "filesize": 14259175, "sha1": "4861c62cad5516b563ff6ed253957b32439eb9a8", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.3.0/tyrell/TyrellCorporation-3.3.0+62c.deb" }, { "id": 16, "enabled": true, "edition": "tyrell", "version": "3.3.0", "os": "windows", "filename": "TyrellCorporation-3.3.0+050.exe", "filesize": 14582098, "sha1": "22d34b7644e6a7cd3b9979d8f3629f98832650be", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.3.0/tyrell/TyrellCorporation-3.3.0+050.exe" }, { "id": 15, "enabled": true, "edition": "tyrell", "version": "3.2.1", "os": "osx", "filename": "TyrellCorporation-3.2.1+fff.dmg", "filesize": 14261599, "sha1": "f4e67346cf41db1c108929c53cc6ad041d96d262", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.2.1/tyrell/TyrellCorporation-3.2.1+fff.dmg" }, { "id": 14, "enabled": true, "edition": "tyrell", "version": "3.2.1", "os": "linux", "filename": "TyrellCorporation-3.2.1+cab.deb", "filesize": 14226685, "sha1": "bfe0fcc76b4f1b218ed9bdac7658c53dfd20101d", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.2.1/tyrell/TyrellCorporation-3.2.1+cab.deb" }, { "id": 13, "enabled": true, "edition": "tyrell", "version": "3.2.1", "os": "windows", "filename": "TyrellCorporation-3.2.1+ae8.exe", "filesize": 14633540, "sha1": "6072e3ed8c208b80ca9da0e5fc6cdfd201429383", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.2.1/tyrell/TyrellCorporation-3.2.1+ae8.exe" }, { "id": 12, "enabled": true, "edition": "tyrell", "version": "3.2.0", "os": "osx", "filename": "TyrellCorporation-3.2.0+8c4.dmg", "filesize": 14386643, "sha1": "a7faa873a1754696526f8cd6e1ef0f975214b576", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.2.0/tyrell/TyrellCorporation-3.2.0+8c4.dmg" }, { "id": 11, "enabled": true, "edition": "tyrell", "version": "3.2.0", "os": "linux", "filename": "TyrellCorporation-3.2.0+141.deb", "filesize": 14054301, "sha1": "1550fe45875d8fcdc007cfb571bf9c60d115ac59", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.2.0/tyrell/TyrellCorporation-3.2.0+141.deb" }, { "id": 10, "enabled": true, "edition": "tyrell", "version": "3.2.0", "os": "windows", "filename": "TyrellCorporation-3.2.0+64b.exe", "filesize": 14820050, "sha1": "abc175bc7340e5459bc799d9c3def48ea48c8da4", "releaseTimestamp": "2015-11-16T24:14:19.235Z", "url": "https://app.printnode.com/bundles/printnodemain/downloads/3.2.0/tyrell/TyrellCorporation-3.2.0+64b.exe" } ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 3722 Connection: keep-alive Vary: Accept-Encoding Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 309cf8ea-7960-4a34-a36d-1c9b6594ff4d Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 439 Content-MD5: 3IKRmJasZQZjhVvSaKBU2A== Response-Time: 10

Enabling and Disabling Specific Clients

The generic download endpoint at https://app.printnode.com/download/client/EDITION NAME/OPERATING SYSTEM and GET/download/clients/OPERATING SYSTEM fetch information about the highest versioned client which is enabled for a given operating system. PrintNode allows you to control which client version is presented at these enpoints by enabling or disabling individual client downloads.

To enable or disable one or more downloads, make a request to PATCH/download/clients/DOWNLOAD ID SET. The request body should be {"enabled": true} or {"enabled": false}. DOWNLOAD ID SET is the set of ids of the client downloads you wish to affect.

Example Request cURL

curl -X PATCH https://api.printnode.com/download/clients/18 \ -u 44784dd8d88be9631046ff83e9044419ff824b10: \ -H "Content-Type: application/json" \ -d '{"enabled": false}'

Response

[ 18 ]
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:06 GMT Content-Type: application/json Content-Length: 10 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: b06d825a-6798-44bd-878c-72a7435366e5 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 439 Content-MD5: ijeMl/Zcy9T8Q5M2mJ4kzw== Response-Time: 9

Miscellaneous

Ping

GET/ping

If you want to test the accessibility of the PrintNode API, make a request to GET/ping. No authentication is required. If the PrintNode API is available it will respond with HTTP 200 OK.

Example Request cURL

curl https://api.printnode.com/ping

Response

"OK"
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 6 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 50b57fdb-5769-43d9-8f09-f7f6a3d0f828 Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id Content-MD5: NfgwUyZSRinpR6P6IiSZ0A== Response-Time: 1

No Operation

GET/noop

If you want to check your credentials but do nothing else you can make a request to GET/noop. If your credentials are valid, the PrintNode API will return HTTP 200 OK and the response body will be the JSON-encoded Request-Id. If your credentials are invalid, you will receive HTTP 401 Unauthorized.

Example Request cURL

curl -u 44784dd8d88be9631046ff83e9044419ff824b10: https://api.printnode.com/noop

Response

"90c94065-8244-453d-a8d3-fa9a9ff775ff"
HTTP/1.1 200 OK Date: Thu, 26 Nov 2015 16:55:05 GMT Content-Type: application/json Content-Length: 40 Connection: keep-alive Server: PrintNodeApi Api-Version: 3.0.0 Request-Id: 90c94065-8244-453d-a8d3-fa9a9ff775ff Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Methods: * Access-Control-Allow-Headers: Accept, Accept-Version, Api-Version, Authorization, Content-Length, Content-MD5, Content-Type, Date, X-Account, X-Requested-With, X-Pretty, X-Dont-Log, X-Child-Account-By-Id, X-Child-Account-By-Email, X-Child-Account-By-CreatorRef Access-Control-Expose-Headers: Api-Version, Records-Returned, Records-Returned-Limit, Records-Returned-Offset, Records-Total, Request-Id, Response-Time, X-Authorized-As, X-Auth-With, X-Child-Account-By-CreatorRef, X-Child-Account-By-Email, X-Child-Account-By-Id X-Auth-With: ApiKey X-Account: 433 Content-MD5: a/bHDjthwoyrgfGYAzGh1A== Response-Time: 3