Skip to content

API Reference

Complete reference for all Patcher API endpoints.

Base URL

https://apis.novasuite.one/api/patcher

Authentication

All endpoints (except /check) require authentication via API Key.

Header:

Authorization: Bearer nuve_YOUR_API_KEY


Endpoints

1. Request Upload URL

Get a presigned S3 URL for uploading large files.

Endpoint: POST /cdn-upload

Headers:

Authorization: Bearer <api_key>
Content-Type: application/json

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:

Authorization: Bearer <api_key>
Content-Type: application/json

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:

GET /check?app_id=one.novasuite.myapp&channel=production

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):

{
  "message": "No releases found for this channel."
}

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