Piedev Tech Solutions
Piedev Tech Solutions
Official Developer Integration Guide

Developer API & Auto-Update Integration

Integrate robust in-app auto-updating into your C#, Electron, Python, or Flutter applications in minutes.

Tailor Documentation For: Adapts live parameters & code
GST Invoice Maker
Business
gst-invoice-maker โœ“

โšก Quick Overview

The Piedev Tech Solutions Auto-Updater API provides zero-configuration, lightweight JSON endpoints for desktop applications, mobile clients, and embedded software to automatically detect updates, stream installers, and verify cryptographic integrity.

๐Ÿ“Œ Key Architecture Features
  • No API Keys Required: Public endpoints designed for in-app update checks from anywhere.
  • SemVer Comparison: Server-side semantic version comparisons using standard version numbering.
  • Cryptographic Verification: Every release returns a 64-character SHA-256 checksum to prevent corrupted or malicious downloads.
  • Multi-Package Channels: Supports both installer (.exe, .msi, .dmg, .apk) and portable (.zip, .tar.gz) releases across stable, beta, nightly, and lts channels.

๐Ÿ“ก Check Update Endpoint

Send a standard HTTP GET request to check whether a newer version is available for the user's running application.

GET https://downloads.piedevtech.com/api/check-update?slug=gst-invoice-maker&version=1.0.0&channel=stable

Query Parameters

Parameter Type Requirement Default Description
slug string Required โ€” Unique software identifier registered in the portal (currently: gst-invoice-maker).
version or current_version string Required โ€” The client's currently installed version to compare against (e.g. 1.0.0 or 2.4.0).
channel string Optional stable Distribution channel filter: stable, beta, nightly, or lts.
package_type string Optional installer Target package variety to resolve (e.g. installer, portable, msi, archive). The primary download URL matches this preference, while the packages array returns all varieties available for the version.
platform string Optional windows Client operating system platform: windows, macos, linux, or android.

cURL Terminal Request

bash โ€” cURL Terminal Command
$ curl -s -X GET "https://downloads.piedevtech.com/api/check-update?slug=gst-invoice-maker&version=1.0.0&package_type=installer&channel=stable"

๐Ÿ“„ JSON Response Schema

JSON โ€” HTTP 200 OK (Update Available)
{
    "update_available": true,
    "software": "GST Invoice Maker",
    "slug": "gst-invoice-maker",
    "icon_url": "https://downloads.piedevtech.com/icon/gst-invoice-maker",
    "current_version": "1.0.0",
    "latest_version": "2.5.0",
    "package_type": "installer",
    "package_title": "Setup Installer",
    "channel": "stable",
    "platform": "windows",
    "file_name": "gst-invoice-maker-setup-v2.5.0.exe",
    "file_size": 45012345,
    "file_size_formatted": "42.93 MB",
    "sha256": "d597d05eba04697a61d156822a159955743b184f4ebfebe81b95cb523a54d5b7",
    "changelog": "- Added automated tax calculation\n- Improved multi-store sync speed\n- Security updates and bug fixes",
    "min_os_version": "Windows 10/11 (64-bit)",
    "release_date": "2026-11-13 03:02:08",
    "download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/installer",
    "portable_download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/portable",
    "available_package_types": ["installer", "portable"],
    "packages": [
        {
            "package_type": "installer",
            "package_title": "Setup Installer",
            "file_name": "gst-invoice-maker-setup-v2.5.0.exe",
            "file_size": 45012345,
            "file_size_formatted": "42.93 MB",
            "sha256": "d597d05eba04697a61d156822a159955743b184f4ebfebe81b95cb523a54d5b7",
            "download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/installer"
        },
        {
            "package_type": "portable",
            "package_title": "Portable ZIP Archive",
            "file_name": "gst-invoice-maker-portable-v2.5.0.zip",
            "file_size": 42890123,
            "file_size_formatted": "40.9 MB",
            "sha256": "a73f82...",
            "download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/portable"
        }
    ]
}
JSON โ€” HTTP 200 OK (Up to Date)
{
    "update_available": false,
    "software": "GST Invoice Maker",
    "slug": "gst-invoice-maker",
    "icon_url": "https://downloads.piedevtech.com/icon/gst-invoice-maker",
    "current_version": "2.5.0",
    "latest_version": "2.5.0",
    "package_type": "installer",
    "package_title": "Setup Installer",
    "channel": "stable",
    "platform": "windows",
    "file_name": "gst-invoice-maker-setup-v2.5.0.exe",
    "file_size": 45012345,
    "file_size_formatted": "42.93 MB",
    "sha256": "d597d05eba04697a61d156822a159955743b184f4ebfebe81b95cb523a54d5b7",
    "changelog": "Latest stable release.",
    "min_os_version": "Windows 10/11 (64-bit)",
    "release_date": "2026-11-13 03:02:08",
    "download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/installer",
    "portable_download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/portable",
    "available_package_types": ["installer", "portable"],
    "packages": [
        {
            "package_type": "installer",
            "package_title": "Setup Installer",
            "download_url": "https://downloads.piedevtech.com/gst-invoice-maker/2.5.0/installer"
        }
    ]
}

๐Ÿ’ป Code Integration Examples

Production-ready code samples demonstrating background checking, SHA-256 hash comparison, and silent auto-installation.

csharp โ€” PiedevUpdateManager.cs (.NET 6/7/8)
using System;
using System.IO;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text.Json;
using System.Threading.Tasks;
using System.Diagnostics;

public class PiedevUpdateManager
{
    private static readonly HttpClient client = new HttpClient();
    private const string ApiBase = "https://downloads.piedevtech.com/api/check-update";
    private const string SoftwareSlug = "gst-invoice-maker";

    public static async Task CheckForUpdatesAsync(string currentAppVersion)
    {
        try
        {
            string url = $"{ApiBase}?slug={SoftwareSlug}&version={currentAppVersion}&channel=stable";
            string responseJson = await client.GetStringAsync(url);
            
            using var doc = JsonDocument.Parse(responseJson);
            var root = doc.RootElement;

            bool updateAvailable = root.GetProperty("update_available").GetBoolean();
            if (!updateAvailable)
            {
                Console.WriteLine("Application is up to date.");
                return;
            }

            string latestVersion = root.GetProperty("latest_version").GetString();
            string downloadUrl = root.GetProperty("download_url").GetString();
            string expectedHash = root.GetProperty("sha256").GetString();
            string changelog = root.GetProperty("changelog").GetString();

            Console.WriteLine($"New version v{latestVersion} available!\nChangelog:\n{changelog}");

            // Step 1: Download installer to temporary directory
            string tempInstallerPath = Path.Combine(Path.GetTempPath(), $"update_v{latestVersion}.exe");
            byte[] fileBytes = await client.GetByteArrayAsync(downloadUrl);
            await File.WriteAllBytesAsync(tempInstallerPath, fileBytes);

            // Step 2: Verify Cryptographic SHA-256 Checksum
            using var sha256 = SHA256.Create();
            byte[] hashBytes = sha256.ComputeHash(fileBytes);
            string calculatedHash = BitConverter.ToString(hashBytes).Replace("-", "").ToLowerInvariant();

            if (!string.IsNullOrEmpty(expectedHash) && !calculatedHash.Equals(expectedHash, StringComparison.OrdinalIgnoreCase))
            {
                throw new Exception("SHA-256 verification failed! Corrupted or tampered installer.");
            }

            // Step 3: Run silent installer and close current application
            Process.Start(new ProcessStartInfo
            {
                FileName = tempInstallerPath,
                Arguments = "/SILENT", // InnoSetup / NSIS silent switch
                UseShellExecute = true
            });

            Environment.Exit(0);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Update check error: {ex.Message}");
        }
    }
}
javascript โ€” updater.js (Electron / Node.js)
const { app, dialog, shell } = require('electron');
const axios = require('axios');
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');

async function checkForUpdates(currentVersion) {
    const API_URL = 'https://downloads.piedevtech.com/api/check-update';
    const SLUG = 'gst-invoice-maker';

    try {
        const response = await axios.get(API_URL, {
            params: {
                slug: SLUG,
                version: currentVersion,
                channel: 'stable'
            },
            timeout: 8000
        });

        const data = response.data;
        if (!data.update_available) {
            return { hasUpdate: false };
        }

        // Display update prompt dialog
        const { response: userChoice } = await dialog.showMessageBox({
            type: 'info',
            title: `Update Available (v${data.latest_version})`,
            message: `A new version of ${data.software} (v${data.latest_version}) is available!\n\nWhat's New:\n${data.changelog}`,
            buttons: ['Download & Update', 'Later'],
            defaultId: 0,
            cancelId: 1
        });

        if (userChoice === 0) {
            shell.openExternal(data.download_url);
        }

        return { hasUpdate: true, data };
    } catch (err) {
        console.error('Update check failed:', err.message);
        return { hasUpdate: false, error: err.message };
    }
}

module.exports = { checkForUpdates };
python โ€” updater.py (Python 3)
import hashlib
import os
import requests
import sys
import subprocess

API_URL = "https://downloads.piedevtech.com/api/check-update"
SLUG = "gst-invoice-maker"
CURRENT_VERSION = "1.0.0"

def check_for_updates():
    try:
        res = requests.get(API_URL, params={
            "slug": SLUG,
            "version": CURRENT_VERSION,
            "channel": "stable"
        }, timeout=10)
        
        data = res.json()
        if not data.get("update_available"):
            print("Already up to date.")
            return

        print(f"New update v{data['latest_version']} available!")
        print(f"Changelog:\n{data.get('changelog')}")

        download_url = data["download_url"]
        temp_file = os.path.join(os.environ.get("TEMP", "/tmp"), data["file_name"])

        # Stream download in chunks
        r = requests.get(download_url, stream=True)
        sha = hashlib.sha256()
        with open(temp_file, "wb") as f:
            for chunk in r.iter_content(chunk_size=65536):
                f.write(chunk)
                sha.update(chunk)

        # Cryptographic Hash Validation
        if data.get("sha256") and sha.hexdigest().lower() != data["sha256"].lower():
            raise ValueError("SHA-256 verification failed!")

        print(f"Installer verified successfully: {temp_file}")
        
        # Launch installer silently on Windows
        if sys.platform == "win32":
            subprocess.Popen([temp_file, "/SILENT"])
            sys.exit(0)

    except Exception as e:
        print(f"Update check error: {e}")

if __name__ == "__main__":
    check_for_updates()
dart โ€” update_service.dart (Flutter / Dart)
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart';

class UpdateService {
  static const String apiBase = "https://downloads.piedevtech.com/api/check-update";
  static const String slug = "gst-invoice-maker";

  static Future<void> checkForUpdates(String currentVersion) async {
    try {
      final uri = Uri.parse('$apiBase?slug=$slug&version=$currentVersion&channel=stable');
      final response = await http.get(uri);

      if (response.statusCode == 200) {
        final data = jsonDecode(response.body);
        if (data['update_available'] == true) {
          final downloadUrl = data['download_url'];
          print('Update available: v${data['latest_version']}');
          // Launch official download URL
          if (await canLaunchUrl(Uri.parse(downloadUrl))) {
            await launchUrl(Uri.parse(downloadUrl), mode: LaunchMode.externalApplication);
          }
        }
      }
    } catch (e) {
      print('Update check failed: $e');
    }
  }
}

๐Ÿ”’ SHA-256 Cryptographic Hash Integrity

Every software release package in Piedev Tech Solutions includes a pre-computed 64-character hexadecimal SHA-256 checksum generated directly on the server at upload time.

๐Ÿ›ก๏ธ Security Guarantee & Tamper Detection

Always calculate the hash of the downloaded file before executing or launching the installer. If the computed hash does not match the server's sha256 response byte-for-byte, discard the file immediately to prevent executing corrupt or tampered binaries.

Quick CLI Verification Commands

bash & powershell โ€” Terminal Checksum Verification
# Windows PowerShell:
Get-FileHash -Algorithm SHA256 "path\to\setup.exe"

# Windows Command Prompt:
certutil -hashfile "path\to\setup.exe" SHA256

# macOS & Linux:
sha256sum "path/to/installer.tar.gz"

๐Ÿ”— Direct Download URLs & Slugs

In addition to JSON endpoints, Piedev Tech Solutions supports direct, permanent vanity download URLs for scripts, web pages, and CDN mirrors.

Target Resource Dynamic Vanity URL Format Action
Latest Setup Installer https://downloads.piedevtech.com/gst-invoice-maker/latest/installer
Latest Portable ZIP / Binary https://downloads.piedevtech.com/gst-invoice-maker/latest/portable
Specific Version Installer https://downloads.piedevtech.com/gst-invoice-maker/{version}/installer
Specific Version Portable https://downloads.piedevtech.com/gst-invoice-maker/{version}/portable
All Releases JSON API https://downloads.piedevtech.com/api/releases?slug=gst-invoice-maker

๐Ÿš€ Release Channels & Best Practices

๐ŸŸข Stable Channel (stable)

Recommended for all production users. Receives thoroughly tested, verified, and audited release builds.

๐ŸŸก Beta Channel (beta)

For preview testers and early adopters. Receives upcoming features and enhancements ahead of general release.

๐Ÿ”ด Nightly Channel (nightly)

Automated continuous integration builds. Intended exclusively for automated testing, QA, and active debugging.

๐Ÿ”ต Long-Term Support (lts)

Enterprise distributions with critical security updates, guaranteed stability, and extended maintenance cycles.