API Reference¶
Complete reference for all Patcher API endpoints.
Base URL¶
Authentication¶
All endpoints (except /check) require authentication via API Key.
Header:
Endpoints¶
1. Request Upload URL¶
Get a presigned S3 URL for uploading large files.
Endpoint: POST /cdn-upload
Headers:
Request Body:
{
"dev_name": "string (required)",
"app_name": "string (required)",
"version": "string (required)"
}
Response (200):
{
"success": true,
"upload_url": "https://...",
"key": "downloads/dev/app/vX.Y.Z.zip",
"message": "Upload URL generated. Please PUT your file to 'upload_url'."
}
Errors: - 400: Missing required fields - 403: Invalid API key or unauthorized - 500: Server error
2. Register Release Metadata¶
Register release information in the database.
Endpoint: POST /upload
Headers:
Request Body:
{
"dev_name": "string (required)",
"app_name": "string (required)",
"version": "string (required)",
"build": "string (required)",
"platform": "string (required)",
"sha256": "string (required)",
"release_notes": "string (optional)",
"channel": "string (optional, default: 'production')",
"auto_publish": "boolean (optional, default: false)",
"is_latest": "boolean (optional, default: auto_publish)",
"install_action": "string (optional, default: 'unzip')",
"update_action": "string (optional, default: 'replace')",
"display_mode": "string (optional, default: 'active')"
}
Response (200):
{
"success": true,
"message": "Release published and marked as Latest.",
"data": {
"download_url": "https://...",
"channel": "production",
"status": "live",
"is_latest": true
}
}
Errors: - 400: Missing required fields or invalid application - 403: Invalid API key or unauthorized - 500: Server error
3. Check for Updates¶
Query for the latest release (public endpoint, no auth required).
Endpoint: GET /check
Query Parameters: - app_id (required): Application identifier - channel (optional): Release channel (default: production)
Example:
Response (200):
{
"id": "one.novasuite.myapp",
"channel": "production",
"latest": {
"version": "1.2.0",
"download_url": "https://serve.novasuite.one/downloads/...",
"notes": "Release notes here",
"hash": "sha256_checksum",
"published_at": "2026-01-19T05:00:00.000Z",
"channel": "production",
"install_action": "unzip",
"display_mode": "active",
"update_action": "replace",
"is_latest": true
}
}
Response (404):
Errors: - 400: Missing app_id - 404: No published releases found - 500: Server error
Field Definitions¶
channel¶
Distribution channel identifier.
Valid Values: production, beta, alpha, dev, or custom
Default: production
install_action¶
Instructions for how the client should process the downloaded file.
Valid Values: - unzip: Extract ZIP contents to application directory - execute: Run the downloaded file (it's an installer) - replace_file: The download is the app itself, replace directly - run_script: Execute as a script/batch file
Default: unzip
update_action¶
Instructions for how to apply the update relative to the existing installation.
Valid Values: - replace: Overwrite existing files (standard update) - clean_install: Delete old installation, then install fresh - delta: Apply only changed files (partial update) - migration: Run data migration scripts before/after
Default: replace
display_mode¶
Controls UI behavior during the update process.
Valid Values: - active: Show full update UI with dialogs and progress - passive: Show minimal notification, less user interaction - silent: Completely background, no UI unless error
Default: active
is_published¶
Whether the release is publicly visible.
Values: - true: Live and available for distribution - false: Draft, stored but not visible to /check endpoint
Default: false
is_latest¶
Whether this version should be considered the "current" release.
Values: - true: Explicitly marked as the recommended version - false: Exists but not the primary recommendation
Default: Value of auto_publish
Note: Only one release per (app, channel, platform) can be is_latest: true. Setting a new release to latest automatically unmarks the previous one.
Rate Limits¶
Currently, there are no enforced rate limits. However, please: - Don't poll /check more than once per app launch - Use reasonable retry logic with exponential backoff - Cache results when appropriate
Error Codes¶
| Code | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request - Invalid or missing parameters |
| 403 | Forbidden - Authentication failed |
| 404 | Not Found - No releases match criteria |
| 405 | Method Not Allowed |
| 500 | Internal Server Error |
Support¶
For API issues or questions: - Email: support@novasuite.one - Documentation: https://novasuite.one/docs/patcher