On-Premise REST Service

OP Signing Utility

A lightweight local service that signs PDFs using your PFX certificate. Integrates with any ERP or application via a simple REST API. Data never leaves your server.

Windows 64-bit
Linux 64-bit
REST API ยท Port 7070
VirusTotal 0/70 & 0/63
DOWNLOAD

Choose Your Platform

Both builds are digitally signed and verified clean by VirusTotal across all major security vendors

Windows 64-bit

Windows 10 / 11  ยท  152 MB

Full-featured build for signing with PFX certificate files. Includes system tray, auto-start, and silent enterprise deployment options.

  • PFX Certificate Support
  • System Tray & Auto-start
  • Silent Enterprise Install
  • Configurable Port
0 / 70 VirusTotal โ€” All 70 vendors: Clean SHA-256: 9892dce4b58144155b038d7c8ad17ced2f30d1f86694caf645e18b2ab05266b4
Download for Windows SuTan-Sign-Op-Windows-Final.zip ยท 152 MB

Linux 64-bit

Ubuntu 20.04+ / Debian  ยท  161 MB

Server-compatible ELF binary for Linux environments. Ideal for on-premise ERP servers with headless signing requirements.

  • Headless & GUI Modes
  • Systemd Service Ready
  • CLI Integration Support
  • Configurable Port
0 / 63 VirusTotal โ€” All 63 vendors: Clean SHA-256: f2cf3870f405e667f11a571a0862384ece669795fa8687acca29d0ea7ac8f21c
Download for Linux SuTan-Sign-Op-Linux-Final.zip ยท 161 MB
Looking for the end-user desktop signing app? That's SuTan Desktop, available only on the Microsoft Store for Windows.
INSTALLATION

Getting Started

From download to first signed document in four steps

1

Extract and Run

Extract the zip file and run SuTan-Sign-Op.exe. The utility starts a local REST server on port 7070 by default.

PowerShell
.\SuTan-Sign-Op.exe
Custom port
$env:OP_SIGNING_PORT = "8080"
.\SuTan-Sign-Op.exe
2

Activate License

Call the activate endpoint once with your license key and partner API key.

PowerShell
Invoke-RestMethod -Uri "http://localhost:7070/op/activate" `
  -Method Post -ContentType "application/json" `
  -Body '{"licenseKey":"ST-OP-XXXX-XXXX-XXXX-XXXX",
          "partnerApiKey":"dgsk_..."}'
3

Register Your PFX Certificate

Register your PFX file. Signing is blocked until at least one certificate is registered and approved.

PowerShell
Invoke-RestMethod -Uri "http://localhost:7070/op/register-pfx" `
  -Method Post -ContentType "application/json" `
  -Headers @{ "X-API-KEY" = "dgsk_..." } `
  -Body '{"pfxPath":"C:\\Certs\\company.pfx",
          "pfxPassword":"YourPassword",
          "pfxLabel":"Company Certificate"}'
4

Start Signing

Send documents to the sign endpoint as Base64. The signed PDF is returned as Base64 โ€” ready to save or send.

PowerShell
$pdfBase64 = [Convert]::ToBase64String(
  [IO.File]::ReadAllBytes("C:\Docs\invoice.pdf"))

$body = @{
    pdfBase64   = $pdfBase64
    pfxPath     = "C:\Certs\company.pfx"
    pfxPassword = "YourPassword"
    erpUsername = "Deepak Singh"
    designation = "Director"
    reason      = "Approved"
    location    = "Hyderabad"
    signatures  = @(@{ page=1; x=50; y=700; width=200; height=60 })
} | ConvertTo-Json -Depth 4

$res = Invoke-RestMethod -Uri "http://localhost:7070/op/sign" `
    -Method Post -ContentType "application/json" -Body $body

[IO.File]::WriteAllBytes("C:\Docs\invoice_signed.pdf",
    [Convert]::FromBase64String($res.signedPdfBase64))
1

Extract and Make Executable

Bash
unzip SuTan-Sign-Op-Linux-Final.zip
chmod +x SuTan-Sign-Op-signed
./SuTan-Sign-Op-signed
Custom port
OP_SIGNING_PORT=8080 ./SuTan-Sign-Op-signed
2

Run as Systemd Service (optional)

/etc/systemd/system/sutan-op.service
[Unit]
Description=SuTan OP Signing Utility
After=network.target

[Service]
ExecStart=/opt/sutan/SuTan-Sign-Op-signed
Restart=always
Environment=OP_SIGNING_PORT=7070

[Install]
WantedBy=multi-user.target
Bash
sudo systemctl enable sutan-op
sudo systemctl start sutan-op
sudo systemctl status sutan-op
3

Activate License

curl
curl -X POST http://localhost:7070/op/activate \
  -H "Content-Type: application/json" \
  -d '{"licenseKey":"ST-OP-XXXX-XXXX-XXXX-XXXX",
       "partnerApiKey":"dgsk_..."}'
4

Register PFX and Sign

curl โ€” Register PFX
curl -X POST http://localhost:7070/op/register-pfx \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: dgsk_..." \
  -d '{"pfxPath":"/opt/certs/company.pfx",
       "pfxPassword":"YourPassword",
       "pfxLabel":"Company Certificate"}'
curl โ€” Sign a PDF
# Step 1 โ€” Read the PDF and convert to Base64
PDF_B64=$(base64 -w 0 /path/to/invoice.pdf)

# Step 2 โ€” Send to the signing service
RESPONSE=$(curl -s -X POST http://localhost:7070/op/sign \
  -H "Content-Type: application/json" \
  -d "{\"pdfBase64\":\"$PDF_B64\",
       \"pfxPath\":\"/opt/certs/company.pfx\",
       \"pfxPassword\":\"YourPassword\",
       \"erpUsername\":\"Deepak Singh\",
       \"designation\":\"Director\",
       \"reason\":\"Approved\",
       \"location\":\"Hyderabad\",
       \"signatures\":[{\"page\":1,\"x\":50,\"y\":700,
                        \"width\":200,\"height\":60}]}")

# Step 3 โ€” Decode and save the signed PDF
echo "$RESPONSE" | python3 -c "
import sys, json, base64
d = json.load(sys.stdin)
open('invoice_signed.pdf', 'wb').write(
    base64.b64decode(d['signedPdfBase64']))
print('Signed PDF saved to: invoice_signed.pdf')"
CONFIGURATION

Environment & Data Paths

Port Configuration

Default port is 7070. Override with the OP_SIGNING_PORT environment variable before starting the utility.

Data Directory

Windows %APPDATA%\SuTanSign\op-utility\
Linux ~/SuTanSign/op-utility/

Background Validation

The utility automatically validates its license with the master server every 24 hours. No restart required. Quota usage is reported during each cycle.

REST API

API Reference

Full interactive documentation for all four endpoints. Base URL: http://localhost:7070

1
POST /op/activate One-time activation
2
POST /op/register-pfx Register certificate
3
POST /op/sign Sign every document
4
GET /op/status Check quota & license
5
POST /op/sync Force license sync
ERROR HANDLING

Error Code Reference

All error responses follow the same JSON structure with an error field containing the error code or message

Error Response Structure
{
  "error": "ERROR_CODE_OR_MESSAGE"
}
HTTP Error Code Endpoint Cause Action
400 licenseKey is required /op/activate Missing licenseKey field in request body Include both licenseKey and partnerApiKey
400 partnerApiKey is required /op/activate Missing partnerApiKey field Include your dgsk_... partner API key
400 pfxPath and pfxPassword are required /op/register-pfx Missing required certificate fields Provide both pfxPath and pfxPassword
400 pdfBase64, pfxPath, pfxPassword are required /op/sign One or more required signing fields are missing Ensure all three fields are present and non-empty
400 signatures list is required /op/sign signatures array is empty or not provided Include at least one signature box definition
401 INVALID_OR_INACTIVE_LICENSE /op/activate License key is incorrect, expired, or suspended Verify the key format ST-OP-XXXX-XXXX-XXXX-XXXX or contact support
402 Quota exhausted /op/sign All document credits have been used Contact SuTan admin to purchase additional quota
403 License not active /op/register-pfx, /op/sign License has not been activated on this machine Call POST /op/activate first
403 License not active or expired /op/sign License is expired or was not renewed Re-activate with a valid key or renew your license
403 PFX_REJECTED_ORG /op/register-pfx, /op/sign Certificate organisation does not match the whitelist Use a certificate issued to the approved organisation, or contact admin
403 PFX_SLOT_REVOKED /op/register-pfx This certificate was revoked by the admin Contact your SuTan admin to reinstate or replace the certificate
403 NO_AVAILABLE_PFX_SLOTS /op/register-pfx All licensed PFX slots are already in use Contact admin to add more slots or free an existing slot
403 PFX_NOT_REGISTERED /op/sign The specified PFX file has not been registered Call POST /op/register-pfx for this certificate first
500 Registration failed: ... /op/register-pfx PFX file not found at the specified path or wrong password Verify the file path is absolute and the password is correct
500 Signing failed: ... /op/sign PFX missing, wrong password, or the PDF is corrupt Check the file path, password, and validate the source PDF
503 Network error message /op/activate Utility cannot reach the SuTan master server Check internet connectivity and firewall rules for outbound HTTPS

PDF Coordinate System

Signature box coordinates use PDF points (1 pt = 1/72 inch). The origin (0, 0) is at the bottom-left corner of the page. A standard A4 page is 595 ร— 842 points.

Positionxywidthheight
Bottom-left505020060
Bottom-right3455020060
Top-left5075020060
Top-right34575020060
Centre-bottom1985020060