- Quick Reference Table
- Authentication
- Authentication Code Snippets
- API Endpoints
- Status Codes
- Error Codes
- Common Integration Patterns
- Supported File Types
Print API Integration Guide
For AI Agents: This document is available in raw Markdown format for easier parsing. Replace
.htmlextension with.mdto get the raw Markdown source.Auto-generated RAW AGENT.md for AI-assisted and human development Auto-generated testing RAW AGENT.md for AI-assisted and human development
API Version: 2
Quick Reference Table
Base URL: https://printapi.ezeep.com/
| Method | Endpoint | Description | Auth Required |
|---|---|---|---|
| GET | /sfapi/GetConfiguration/ |
Retrieve user details and system configuration (supported filetypes) | Yes |
| GET | /sfapi/GetPrinter/ |
Get list of printers available to the user | Yes |
| GET | /sfapi/GetPrinterProperties/ |
Get detailed properties of a printer by ID or name | Yes |
| GET | /sfapi/PrepareUpload/ |
Prepare file upload and get sasUri for uploading | Yes |
| PUT | {{sasUri}} |
Upload file to Azure blob storage | No (uses sasUri token) |
| POST | /sfapi/Print/ |
Print an uploaded file or file referenced by URL | Yes |
| GET | /sfapi/Status/?id=:id |
Get print job status | Yes |
Authentication
Auth Type
OAuth 2.0 with Bearer Token
ezeep Blue supports the following authorization flows:
- Authorization Code Flow - Recommended for secure server-side apps
- Authorization Code Flow with PKCE - For SPAs, mobile apps, desktop applications
- Device Authorization Flow (Pairing Code Grant) - For CLI tools, scripts, devices without browser
- Resource Owner Password Credentials - Legacy, not recommended
- Client Credentials - Server-to-server (UMP customers only)
Authorization Base URL
https://account.ezeep.com/
Header Format
API Requests (Bearer Token)
Authorization: Bearer <access_token>
Token Requests (Basic Auth)
Authorization: Basic <base64_encoded_client_credentials>
Encoding format:
- Public client (no secret): base64("<client_id>:")
- Confidential client: base64("<client_id>:<client_secret>")
Token Lifecycle
| Token Type | Expiration | Refresh Mechanism |
|---|---|---|
| Access Token | 3600 seconds (1 hour) | Use refresh token to obtain new access token |
| Refresh Token | Varies by configuration | Token rotation: new refresh token issued with each use |
Important: With refresh token rotation enabled, each refresh token is single-use. Store the new refresh token from each response.
Available Scopes
| Scope | Description |
|---|---|
printing |
Access to printing APIs |
printing.connectors |
Access to connector APIs |
reporting |
Access to reporting APIs |
accounts |
Access to account APIs |
accounts.me |
Access to current user account |
Authentication Code Snippets
1. Initiate Authorization (Browser Redirect)
# Open in browser - user will authenticate and be redirected with authorization code
https://account.ezeep.com/oauth/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=<your_redirect_uri>&scope=printing
2. Exchange Authorization Code for Tokens
curl -X POST "https://account.ezeep.com/oauth/access_token/" \
--header "Authorization: Basic <base64_encoded_client_id>" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data "grant_type=authorization_code" \
--data "scope=printing" \
--data "code=<authorization_code>" \
--data "redirect_uri=<your_redirect_uri>"
Response:
{
"access_token": "eyJ0eXAiO...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "printing",
"refresh_token": "erliDdAb..."
}
3. Refresh Access Token
curl -X POST "https://account.ezeep.com/oauth/access_token/" \
--header "Authorization: Basic <base64_encoded_client_id>" \
--header "Content-Type: application/x-www-form-urlencoded" \
--data "grant_type=refresh_token" \
--data "scope=printing" \
--data "refresh_token=<your_refresh_token>"
Base64 Encoding Helper
# Public client (no secret)
echo -n "<client_id>:" | base64
# Confidential client (with secret)
echo -n "<client_id>:<client_secret>" | base64
Note: The base64 encoded string length must be a multiple of 4. Pad with
=if needed.
API Endpoints
GET /sfapi/GetConfiguration/
Retrieve details of the currently authenticated user and related system configuration parameters. Used to determine supported filetypes for printing.
Request:
curl -X GET "https://printapi.ezeep.com/sfapi/GetConfiguration/" \
--header "Authorization: Bearer <access_token>"
Response:
{
"Drivers": {
"PrinterDynamic": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6",
"PrinterStatic": "f6e5d4c3b2a1f6e5d4c3b2a1f6e5d4c3"
},
"Folders": [
{
"export": "",
"id": 1,
"op": 3
}
],
"SFForms": {
"$Count": 0
},
"Shell": [],
"System": {
"BW": 0,
"CONNECT": ":4001",
"CONNECTEX": ":4001",
"DocProvUplInterval": 60,
"FILEEXT": "bmp;csv;doc;docm;docx;dot;dotm;dotx;eml;gif;htm;html;jpeg;jpg;log;mht;mhtml;odf;odg;odm;odp;odt;otg;oth;otp;ott;pdf;png;pot;potm;potx;pps;ppsx;ppt;pptm;pptx;rtf;scp;sda;sdd;sds;sdw;sgl;smf;sti;stw;sxd;sxg;sxi;sxm;sxw;tif;tiff;tpf;txt;vor;wtx;xls;xlsb;xlsm;xlsx;xlt;xltm;xltx;xml;xps;",
"HOST": "https://vm-example-host:443",
"HOSTEX": "https://vm-example-host:443",
"MaxLocalPreviewFileSize": 16777216
}
}
Response Fields:
| Section | Attribute | Type | Description |
|---|---|---|---|
System |
FILEEXT |
string | List of supported file formats (semicolon-separated extensions) |
GET /sfapi/GetPrinter/
Returns a list of printers available to the authenticated user.
Request:
curl -X GET "https://printapi.ezeep.com/sfapi/GetPrinter/" \
--header "Authorization: Bearer <access_token>"
Response:
[
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"location": "Building A, Floor 2",
"name": "printer 6"
},
{
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"location": "",
"name": "printer01"
}
]
Response Fields:
| Attribute | Type | Description |
|---|---|---|
id |
string (UUID) | Unique printer identifier |
location |
string | Physical location of printer |
name |
string | Display name of printer |
GET /sfapi/GetPrinterProperties/
Returns detailed properties of a printer by ID or name.
Endpoints:
GET /sfapi/GetPrinterProperties/
GET /sfapi/GetPrinterProperties/?id=<printer_uuid>
GET /sfapi/GetPrinterProperties/?printer=<printer_name>
Parameters:
| Attribute | Type | Required | Description |
|---|---|---|---|
id |
string | No | UUID of the printer |
printer |
string | No | Name of the printer |
Note: If neither parameter is provided, returns properties for all available printers. Specify either
printerorid, not both.
Request:
curl -X GET "https://printapi.ezeep.com/sfapi/GetPrinterProperties/?id=c3d4e5f6-a7b8-9012-cdef-123456789012" \
--header "Authorization: Bearer <access_token>"
Response:
[{
"Collate": true,
"Color": false,
"ColorSupported": true,
"Driver": "TP Output Gateway",
"DuplexMode": 2,
"DuplexSupported": true,
"Id": "d4e5f6a7-b8c9-0123-def0-234567890123",
"Location": "",
"MediaSupported": ["Auto", "Letter", "Legal", "Statement", "Executive", "A5", "B5", "A4", "Envelope Monarch", "Envelope No. 10 (COM10)", "Envelope DL", "Envelope C5", "Custom [Name Fixed]"],
"MediaSupportedId": [0, 1, 5, 6, 7, 11, 13, 9, 37, 20, 27, 28, 256],
"Name": "Canon UFR II Printer",
"OrientationsSupported": ["portrait", "landscape"],
"OrientationsSupportedId": [1, 2],
"PaperFormats": [
{"Id": 1, "Name": "Letter", "XRes": 2159, "YRes": 2794, "Default": false},
{"Id": 5, "Name": "Legal", "XRes": 2159, "YRes": 3556, "Default": false},
{"Id": 9, "Name": "A4", "XRes": 2100, "YRes": 2970, "Default": true},
{"Id": 27, "Name": "Envelope DL2", "XRes": 1100, "YRes": 2200, "Default": false},
{"Id": 28, "Name": "Envelope C5", "XRes": 1620, "YRes": 2290, "Default": false}
],
"Default": {
"Duplex": "duplex_simplex",
"DuplexIndex": 1,
"Color": "color",
"Orientation": null,
"OrientationIndex": null,
"Resolution": "600",
"Paper": "A4",
"PaperId": 9,
"Tray": "Multi-Purpose Feeder",
"TrayIndex": 284
},
"Resolutions": ["Auto", "600"],
"TPUID": 2,
"Trays": [
{"Index": 284, "Name": "Multi-Purpose Feeder", "Default": true},
{"Index": 285, "Name": "Manual Paper", "Default": false},
{"Index": 286, "Name": "Envelope Feeder", "Default": false}
]
}]
Response Fields:
| Attribute | Type | Description |
|---|---|---|
Id |
string (UUID) | Printer identifier |
Name |
string | Printer name |
Location |
string | Printer location |
ColorSupported |
bool | Whether color printing is supported |
DuplexSupported |
bool | Whether duplex printing is supported |
DuplexMode |
int | Current duplex mode |
MediaSupported |
array | List of supported paper sizes |
MediaSupportedId |
array | IDs corresponding to paper sizes |
OrientationsSupported |
array | Supported orientations |
OrientationsSupportedId |
array | IDs for orientations (1=portrait, 2=landscape) |
PaperFormats |
array | Detailed paper format specifications |
Resolutions |
array | Supported print resolutions |
Trays |
array | Available paper trays |
Default |
object | Default printer settings |
Reference: ezeep follows Microsoft’s DEVMODE for printer properties. See DEVMODE specification.
GET /sfapi/PrepareUpload/
Prepares a file upload by generating a file ID and Azure SAS URI.
Request:
curl -X GET "https://printapi.ezeep.com/sfapi/PrepareUpload/" \
--header "Authorization: Bearer <access_token>"
Response:
{
"fileid": "ERI_e1f2a3b4-c5d6-7890-abcd-ef0123456789",
"sasUri": "https://examplestore.blob.core.windows.net/userstorage/ERI_e1f2a3b4-c5d6-7890-abcd-ef0123456789?sv=2018-03-28&sr=b&sig=ExAmPlEsIgNaTuReStRiNg1234567890ABCDEF%3D&se=2024-01-01T12%3A00%3A00Z&sp=wl"
}
Response Fields:
| Attribute | Type | Description |
|---|---|---|
fileid |
string | Unique file identifier for print requests |
sasUri |
string | Azure Blob Storage SAS URI for file upload |
PUT {{sasUri}} - File Upload
Uploads a file to Azure Blob Storage using the SAS URI from PrepareUpload.
Request:
curl -X PUT "<sasUri>" \
--header "x-ms-blob-type: BlockBlob" \
--header "Content-Type: multipart/form-data" \
-F "file=@/path/to/your/file.pdf"
Headers:
| Header | Value | Description |
|---|---|---|
x-ms-blob-type |
BlockBlob |
Required Azure blob type |
Content-Type |
multipart/form-data |
Content type for file upload |
Response: - HTTP 201 Created - File uploaded successfully (empty response body)
POST /sfapi/Print/
Prints an uploaded file or a file referenced by URL.
Request:
curl -X POST "https://printapi.ezeep.com/sfapi/Print/" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer <access_token>" \
--data '{
"fileid": "<fileid>",
"printerid": "<printerid>",
"type": "pdf"
}'
Parameters (Uploaded File):
| Attribute | Type | Required | Description |
|---|---|---|---|
fileid |
string | Yes | ID of the uploaded file from PrepareUpload |
type |
string | Yes | File type/extension (e.g., “pdf”, “txt”) |
printerid |
string | Yes | ID of the printer from GetPrinter |
alias |
string | No | Original filename (defaults to fileid) |
printanddelete |
bool | No | Delete file after printing (default: false) |
paperid |
int | No | Paper size ID from GetPrinterProperties |
paperlength |
int | No | Custom paper length in tenths of mm (if paperid=256) |
paperwidth |
int | No | Custom paper width in tenths of mm (if paperid=256) |
color |
bool | No | Enable color printing |
duplex |
bool | No | Enable duplex printing |
duplexmode |
int | No | Duplex mode |
orientation |
int | No | Orientation ID (1=portrait, 2=landscape) |
copies |
int | No | Number of copies |
resolution |
string | No | DPI / quality |
trayname |
string | No | Tray name |
defaultsource |
int | No | Tray index (overrides trayname) |
locale |
string | No | Language settings (e.g., “de-DE”, “en-US”) |
pageRanges |
string | No | Page ranges (e.g., “1-2,4-5”, “1,2,3”) |
Parameters (URL-Referenced File):
| Attribute | Type | Required | Description |
|---|---|---|---|
fileurl |
string | Yes | Public URL of the file to print |
type |
string | Yes | File type/extension |
printerid |
string | Yes | ID of the printer |
| (other params) | Same as uploaded file parameters |
Example Request (URL-Referenced File):
curl -X POST "https://printapi.ezeep.com/sfapi/Print/" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer <access_token>" \
--data '{
"fileurl": "https://example.com/document.pdf",
"printerid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"type": "pdf",
"properties": {"OrientationsSupported": "landscape", "MediaSupported": "Letter"}
}'
Response (Success):
{
"jobid": "ezprnds-d000001:Example_Printer#1234567890:1"
}
Response (File Still Uploading - HTTP 412):
{
"fileid": "ERI_e1f2a3b4-c5d6-7890-abcd-ef0123456789",
"sasUri": ""
}
Note: For large files referenced by URL, you may receive HTTP 412. Use the returned
fileidwith the standard print endpoint to retry.
GET /sfapi/Status/
Retrieves the current status of a print job.
Request:
curl -X GET "https://printapi.ezeep.com/sfapi/Status/?id=<jobid>" \
--header "Authorization: Bearer <access_token>"
Parameters:
| Attribute | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Job identifier from Print response |
Response:
{
"jobpagesprinted": 0,
"jobpagestotal": 1,
"jobposition": 1,
"jobstatus": 129,
"jobstatusstring": "PRINTING|RETAINED|"
}
Response Fields:
| Attribute | Type | Description |
|---|---|---|
jobpagesprinted |
int | Pages printed so far |
jobpagestotal |
int | Total pages in job |
jobposition |
int | Position in print queue |
jobstatus |
int | Status code |
jobstatusstring |
string | Human-readable status |
Status Codes
| Status Code | Description |
|---|---|
| 0 | SUCCESS: Print job successfully finished |
| 2 | ERROR: Invalid print job identifier |
| 129 | INFO: Print job processing is running |
| 1246 | INFO: No status available yet, keep polling |
| 3011 | ERROR: Something went wrong - restart print job |
Error Codes
ezeep uses Microsoft error codes represented as integers. See https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes for a comprehensive list.
Common Integration Patterns
Pattern 1: Upload and Print
# 1. Prepare upload
UPLOAD_RESPONSE=$(curl -s -X GET "https://printapi.ezeep.com/sfapi/PrepareUpload/" \
--header "Authorization: Bearer $ACCESS_TOKEN")
FILEID=$(echo $UPLOAD_RESPONSE | jq -r '.fileid')
SASURI=$(echo $UPLOAD_RESPONSE | jq -r '.sasUri')
# 2. Upload file
curl -X PUT "$SASURI" \
--header "x-ms-blob-type: BlockBlob" \
--header "Content-Type: multipart/form-data" \
-F "file=@document.pdf"
# 3. Print
curl -X POST "https://printapi.ezeep.com/sfapi/Print/" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--data "{\"fileid\":\"$FILEID\",\"printerid\":\"$PRINTER_ID\",\"type\":\"pdf\"}"
Pattern 2: Print from URL
curl -X POST "https://printapi.ezeep.com/sfapi/Print/" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--data '{
"fileurl": "https://public-url.com/document.pdf",
"printerid": "'"$PRINTER_ID"'",
"type": "pdf"
}'
Pattern 3: Poll Job Status
while true; do
STATUS=$(curl -s -X GET "https://printapi.ezeep.com/sfapi/Status/?id=$JOB_ID" \
--header "Authorization: Bearer $ACCESS_TOKEN")
STATUS_CODE=$(echo $STATUS | jq -r '.jobstatus')
case $STATUS_CODE in
0) echo "Print completed successfully"; break ;;
129|1246) echo "Printing in progress..."; sleep 2 ;;
*) echo "Error: $STATUS_CODE"; break ;;
esac
done
Supported File Types
The following file extensions are supported for printing (retrieved via GetConfiguration):
Documents: doc, docm, docx, dot, dotm, dotx, odf, odg, odm, odp, odt, otg, oth, otp, ott, pdf, rtf, txt, xps
Spreadsheets: csv, xls, xlsb, xlsm, xlsx, xlt, xltm, xltx
Presentations: pot, potm, potx, pps, ppsx, ppt, pptm, pptx, sda, sdd, sds, sdw
Images: bmp, gif, jpeg, jpg, png, tif, tiff
Web/Email: eml, htm, html, mht, mhtml, xml
Other: log, scp, sgl, smf, sti, stw, sxd, sxg, sxi, sxm, sxw, tpf, vor, wtx