Silent Install HQ

API Reference

Analyze any Windows installer and get silent install switches, Intune detection rules, publisher metadata, and more — in a single API call.

Base URL: https://app.silentinstallhq.com  ·  Get a free API key →

Authentication

Pass your API key in the X-API-Key request header on every request. Requests without a key are accepted but consume the anonymous shared quota.

Keys are shown once at signup. If lost, rotate from your dashboard — the old key is immediately invalidated.

curl
curl -X POST https://app.silentinstallhq.com/identify \
  -H "X-API-Key: sihq_your_key_here" \
  -F "file=@setup.exe"

Rate limits

Each plan has a daily request quota that resets at midnight UTC. Per-endpoint hourly limits also apply.

PlanDaily quotaPrice
free100 / day
pro1,000 / day$49 / month
EndpointHourly limit
POST /identify20 / hour
POST /identify/url10 / hour
POST /identify/upload-url20 / hour
429 Response
{
  "detail": {
    "error":       "Daily limit of 100 requests exceeded (free tier).",
    "upgrade_url": "/billing/upgrade",
    "resets_at":   "midnight UTC"
  }
}

Errors

All errors return JSON with a detail field. On rate-limit errors detail is an object (not a string) so you can surface the upgrade URL directly in your application.

StatusMeaning
400Bad request — invalid input or download failed
401Missing or invalid API key
413File exceeds size limit
422Validation error — check content type or body shape
429Daily quota exceeded
503File too large for sync endpoint — use the large file flow
401 Response
{
  "detail": "Invalid or inactive API key."
}
503 Response
{
  "detail": "File exceeds 50 MB sync limit. Use POST /identify/upload-url to upload large files via pre-signed URL."
}
POST /identify

Upload a file directly. Analyzes it synchronously and returns a full profile object.

multipart/form-data max 50 MB 20 / hour
ParameterTypeDescription
file file required The installer binary (.exe, .msi, .msix, .appx, …)
curl
curl -X POST https://app.silentinstallhq.com/identify \
  -H "X-API-Key: sihq_your_key_here" \
  -F "file=@7zip-24.09-x64.exe"
Python
import requests

with open("7zip-24.09-x64.exe", "rb") as f:
    resp = requests.post(
        "https://app.silentinstallhq.com/identify",
        headers={"X-API-Key": "sihq_your_key_here"},
        files={"file": f},
    )
profile = resp.json()
POST /identify/url

Submit a public download URL. The server downloads the file and analyzes it, then returns the profile object synchronously.

application/json max 50 MB 10 / hour
ParameterTypeDescription
url string required Public HTTPS URL to the installer file
curl
curl -X POST https://app.silentinstallhq.com/identify/url \
  -H "X-API-Key: sihq_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/setup.exe"}'
Python
import requests

resp = requests.post(
    "https://app.silentinstallhq.com/identify/url",
    headers={"X-API-Key": "sihq_your_key_here"},
    json={"url": "https://example.com/setup.exe"},
)
profile = resp.json()

Large files > 50 MB

Files over 50 MB use a three-step async flow. You get a pre-signed URL, upload directly to cloud storage (bypassing the app entirely), then queue the job. Poll GET /jobs/{job_id} for the result.

1
POST /identify/upload-url — reserve a slot, receive upload_url + job_id
20 / hour
2
PUT {upload_url} — upload binary directly to cloud storage
3
POST /identify/submit — queue the job, then poll GET /jobs/{job_id}
ParameterTypeDescription
filename string required Original filename — used for analysis and extension detection
Step 1 — Reserve slot
curl -X POST https://app.silentinstallhq.com/identify/upload-url \
  -H "X-API-Key: sihq_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"filename": "office-setup.exe"}'

# Response
{
  "job_id":     "3f8a1c2d-...",
  "upload_url": "https://storage.example.com/...",
  "expires_in": 3600
}
Step 2 — Upload file
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @office-setup.exe
Step 3 — Queue job
curl -X POST https://app.silentinstallhq.com/identify/submit \
  -H "X-API-Key: sihq_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"job_id": "3f8a1c2d-..."}'

# Response — 202 Accepted
{ "job_id": "3f8a1c2d-...", "status": "queued" }
GET /jobs/{job_id}

Poll for async job status. The profile field is populated when status is complete. Recommended polling interval: 5–10 seconds.

StatusMeaning
pending_upload Waiting for step 2 — PUT the file
queued File uploaded, waiting for worker
processing Analysis in progress
complete profile is populated
failed Check the error field
curl
curl https://app.silentinstallhq.com/jobs/3f8a1c2d-... \
  -H "X-API-Key: sihq_your_key_here"
Response (complete)
{
  "job_id":       "3f8a1c2d-...",
  "status":       "complete",
  "profile":      { /* profile object */ },
  "error":        null,
  "created_at":   "2026-06-19T10:00:00Z",
  "completed_at": "2026-06-19T10:02:14Z"
}

Profile object

Every endpoint returns the same profile shape. Fields are null when not detected. The shape is identical whether the analysis ran synchronously or via a job.

FieldTypeDescription
SHA256stringSHA-256 of the file
FileNamestringOriginal filename
ProductNamestring?Product name from file metadata
Publisherstring?Publisher name
ProductVersionstring?Version string
InstallerTypestring?msi · nsis · inno · burn · wix · exe
Architecturestring?x64 · x86 · arm64
SilentInstallstring?Silent install switch string
SilentUninstallstring?Silent uninstall command
IntuneRuleobject?Intune Win32 detection rule — see Intune Rule shapes
IntuneRuleSourcestring?How the rule was derived — msi_product_code · winget_apps_features · manual
ProductCodestring?MSI ProductCode GUID
UpgradeCodestring?MSI UpgradeCode GUID
DigitallySignedboolFile carries a valid digital signature
Signerstring?Code-signing certificate subject
ReadinessScorefloat0–1 confidence score for the silent install data
WingetPackageIdstring?Matched WinGet package ID
Descriptionstring?Product description (from WinGet)
HomepageUrlstring?Product homepage
warningsstring[]Non-fatal analysis warnings
Example response
{
  "SHA256":          "a3f9c1...",
  "FileName":        "7zip-24.09-x64.exe",
  "ProductName":     "7-Zip 24.09 (x64)",
  "Publisher":       "Igor Pavlov",
  "ProductVersion":  "24.09",
  "InstallerType":   "nsis",
  "Architecture":    "x64",
  "SilentInstall":   "/S",
  "SilentUninstall": "\"C:\\Program Files\\7-Zip\\Uninstall.exe\" /S",
  "IntuneRule": {
    "ruleType":       "registry",
    "keyPath":        "HKLM:\\SOFTWARE\\7-Zip",
    "valueName":      "DisplayVersion",
    "operator":       "greaterThanOrEqual",
    "detectionValue": "24.09"
  },
  "IntuneRuleSource": "winget_apps_features",
  "ProductCode":      null,
  "DigitallySigned":  true,
  "Signer":           "Igor Pavlov",
  "ReadinessScore":   0.95,
  "WingetPackageId":  "7zip.7zip",
  "warnings": []
}

Intune Rule shapes

The IntuneRule object varies by detection method. Use ruleType to branch your Intune deployment logic.

ruleTypeWhen used
msiMSI installers with a known ProductCode GUID
registryEXE installers detected via Apps & Features registry key
unknownNo reliable detection method found
MSI — product code
{
  "ruleType":    "msi",
  "productCode": "{23170F69-40C1-2702-2409-000001000000}"
}
Registry — key exists
{
  "ruleType":  "registry",
  "keyPath":   "HKLM:\\SOFTWARE\\Microsoft\\Teams",
  "detection": "keyExists"
}
Registry — version check
{
  "ruleType":       "registry",
  "keyPath":        "HKLM:\\SOFTWARE\\7-Zip",
  "valueName":      "DisplayVersion",
  "operator":       "greaterThanOrEqual",
  "detectionValue": "24.09"
}