{"components":{"schemas":{"ApiTokenCreate":{"description":"Neue Scopes: build:create, build:read, release:publish, release:read, analytics:read, downloads:read, templates:read/write, webhooks:read/write. Alte Scopes builds:read/write und versions:read/write bleiben als Aliase gueltig.","properties":{"expires_in_days":{"maximum":3650,"minimum":1,"type":"integer"},"name":{"type":"string"},"scopes":{"items":{"type":"string"},"type":"array"}},"type":"object"},"BatchBuildRequest":{"properties":{"distribution":{"$ref":"#/components/schemas/DistributionOptions"},"name":{"type":"string"},"offline":{"$ref":"#/components/schemas/OfflineOptions"},"package":{"type":"string"},"targets":{"items":{"enum":["exe","msix","appinstaller","apk","aab","android_project","ios","pwa"],"type":"string"},"maxItems":6,"type":"array"},"template_id":{"type":"string"},"url":{"format":"uri","type":"string"}},"required":["url","targets"],"type":"object"},"BuildRequest":{"properties":{"distribution":{"$ref":"#/components/schemas/DistributionOptions"},"height":{"maximum":2160,"minimum":240,"type":"integer"},"name":{"maxLength":80,"type":"string"},"offline":{"$ref":"#/components/schemas/OfflineOptions"},"offline_custom_html":{"maxLength":20000,"type":"string"},"offline_enabled":{"default":true,"type":"boolean"},"offline_message":{"maxLength":280,"type":"string"},"offline_mode":{"default":"preset","enum":["preset","custom_html"],"type":"string"},"offline_preset":{"default":"default","enum":["default","glass","clean","support","terminal"],"type":"string"},"offline_retry_label":{"maxLength":40,"type":"string"},"offline_title":{"maxLength":80,"type":"string"},"package":{"type":"string"},"target":{"enum":["exe","msix","appinstaller","apk","aab","android_project","ios","pwa"],"type":"string"},"url":{"format":"uri","type":"string"},"width":{"maximum":3840,"minimum":320,"type":"integer"}},"required":["url","target"],"type":"object"},"BuildStatus":{"properties":{"artifact_metadata":{"type":"object"},"error":{"type":"string"},"error_code":{"example":"SIGNING_FAILED","type":"string"},"filename":{"type":"string"},"log_lines":{"items":{"type":"object"},"type":"array"},"ok":{"type":"boolean"},"output_kind":{"type":"string"},"phase":{"example":"compiling","type":"string"},"phase_label":{"type":"string"},"progress":{"maximum":100,"minimum":0,"type":"integer"},"size_mb":{"type":"number"},"status":{"enum":["queued","building","done","error","cancelled"],"type":"string"}},"type":"object"},"BuildTemplate":{"properties":{"config":{"type":"object"},"is_default":{"type":"boolean"},"name":{"type":"string"},"template_id":{"type":"string"}},"type":"object"},"DistributionOptions":{"description":"Store-ready Metadaten fuer Custom Schemes, Android App Links, iOS Universal Links, Windows App Installer Updates und Store-Readiness.","properties":{"app_link_domains":{"items":{"type":"string"},"type":"array"},"custom_scheme":{"example":"myapp","type":"string"},"ios_team_id":{"type":"string"},"privacy_policy_url":{"format":"uri","type":"string"},"sha256_cert_fingerprints":{"items":{"type":"string"},"type":"array"},"store_url":{"format":"uri","type":"string"},"support_url":{"format":"uri","type":"string"},"universal_link_domains":{"items":{"type":"string"},"type":"array"},"update_url":{"format":"uri","type":"string"}},"type":"object"},"OfflineOptions":{"description":"Offline-Seite fuer generierte Apps. Im Modus custom_html werden Platzhalter wie {{TITLE}}, {{MESSAGE}}, {{RETRY_LABEL}}, {{APP_NAME}} und {{TARGET_URL}} serverseitig ersetzt.","properties":{"custom_html":{"maxLength":20000,"type":"string"},"enabled":{"default":true,"type":"boolean"},"message":{"maxLength":280,"type":"string"},"mode":{"default":"preset","enum":["preset","custom_html"],"type":"string"},"preset":{"default":"default","enum":["default","glass","clean","support","terminal"],"type":"string"},"retry_label":{"maxLength":40,"type":"string"},"title":{"maxLength":80,"type":"string"}},"type":"object"},"OfflinePreviewRequest":{"properties":{"name":{"type":"string"},"offline":{"$ref":"#/components/schemas/OfflineOptions"},"url":{"format":"uri","type":"string"}},"type":"object"},"ReleaseReadiness":{"properties":{"blocking_count":{"type":"integer"},"checks":{"items":{"type":"object"},"type":"array"},"ok":{"type":"boolean"},"platforms":{"items":{"type":"string"},"type":"array"},"warning_count":{"type":"integer"}},"type":"object"},"SigningStatus":{"properties":{"android":{"type":"object"},"ios":{"type":"object"},"mode":{"enum":["auto","required","off"],"type":"string"},"ready":{"type":"boolean"},"windows":{"type":"object"}},"type":"object"},"VersionRequest":{"properties":{"app_name":{"type":"string"},"channel":{"example":"stable","type":"string"},"download_links":{"additionalProperties":{"type":"string"},"type":"object"},"force_publish":{"default":false,"description":"Ueberspringt harte Readiness-Blocker bewusst beim Publish/Create","type":"boolean"},"free_download":{"default":true,"description":"true = public download for visitors, false = authenticated owner/API-token download only","type":"boolean"},"release_notes":{"type":"string"},"source_build_ids":{"additionalProperties":{"type":"string"},"type":"object"},"status":{"enum":["draft","beta","live","final","archived"],"type":"string"},"store_metadata":{"description":"Optionale Store-/Update-Darstellung: category, description, image_url, icon_url, privacy_policy_url, support_url, accent_color, sort_order, update.mandatory, update.rollout_percent, update.min_supported_version, update.message","type":"object"},"version_code":{"type":"integer"},"version_name":{"example":"1.2.0","type":"string"}},"required":["version_name"],"type":"object"},"WebhookRequest":{"properties":{"active":{"type":"boolean"},"events":{"items":{"enum":["build.completed","build.failed","release.published","release.promoted","release.approval","release.rolled_back"],"type":"string"},"type":"array"},"name":{"type":"string"},"rotate_secret":{"type":"boolean"},"url":{"format":"uri","type":"string"}},"required":["url"],"type":"object"}},"securitySchemes":{"BearerApiToken":{"bearerFormat":"w2a token","scheme":"bearer","type":"http"},"CookieSession":{"in":"cookie","name":"AUTH_TOKEN","type":"apiKey"},"CsrfHeader":{"in":"header","name":"X-CSRF-Token","type":"apiKey"}}},"info":{"description":"Build websites into Windows, Android and iOS app artifacts, manage API tokens, and publish versioned download releases. Release downloads can be public (`free_download=true`) or authenticated (`free_download=false`). Link-only public releases are materialized on first permitted download.","title":"Webpage to App REST API","version":"2.2.0"},"openapi":"3.0.3","paths":{"/api/batch-builds":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchBuildRequest"}}}},"responses":{"202":{"description":"Batch queued"}},"summary":"Start multiple app builds","tags":["builds"]}},"/api/build":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildRequest"}}}},"responses":{"200":{"description":"Build queued"}},"summary":"Start app build","tags":["builds"]}},"/api/build-templates":{"get":{"responses":{"200":{"description":"Template list"}},"summary":"List build templates","tags":["templates"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildTemplate"}}}},"responses":{"201":{"description":"Template created"}},"summary":"Create build template","tags":["templates"]}},"/api/build-templates/{template_id}":{"delete":{"responses":{"200":{"description":"Template deleted"}},"summary":"Delete build template","tags":["templates"]},"get":{"responses":{"200":{"description":"Template"}},"summary":"Get build template","tags":["templates"]},"patch":{"responses":{"200":{"description":"Template updated"}},"summary":"Update build template","tags":["templates"]}},"/api/build/{build_id}/artifact":{"get":{"parameters":[{"in":"path","name":"build_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Binary artifact"}},"summary":"Download build artifact","tags":["builds"]}},"/api/build/{build_id}/progress/stream":{"get":{"parameters":[{"in":"path","name":"build_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"text/event-stream progress events"}},"summary":"Stream build progress as Server-Sent Events","tags":["builds"]}},"/api/build/{build_id}/status":{"get":{"parameters":[{"in":"path","name":"build_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildStatus"}}},"description":"Build status"}},"summary":"Get build status","tags":["builds"]}},"/api/builds":{"get":{"parameters":[{"in":"query","name":"status","schema":{"example":"done,error","type":"string"}},{"in":"query","name":"target","schema":{"type":"string"}},{"in":"query","name":"q","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"type":"integer"}}],"responses":{"200":{"description":"Build list"}},"summary":"List builds with filters","tags":["builds"]}},"/api/distribution/metadata":{"post":{"requestBody":{"content":{"application/json":{"schema":{"properties":{"distribution":{"$ref":"#/components/schemas/DistributionOptions"},"name":{"type":"string"},"package":{"type":"string"},"targets":{"items":{"type":"string"},"type":"array"},"url":{"format":"uri","type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"assetlinks, AASA, appinstaller XML and checklist"}},"summary":"Generate distribution assets and readiness checklist","tags":["distribution"]}},"/api/embed/releases/latest/{channel}":{"get":{"responses":{"200":{"description":"Release download options"}},"security":[],"summary":"Embeddable latest release download options by channel","tags":["embed"]}},"/api/embed/releases/{version_id}":{"get":{"responses":{"200":{"description":"Release download options"}},"security":[],"summary":"Embeddable release download options","tags":["embed"]}},"/api/offline/presets":{"get":{"responses":{"200":{"description":"Offline presets and starter HTML"}},"security":[],"summary":"List offline page presets","tags":["offline"]}},"/api/offline/preview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfflinePreviewRequest"}}}},"responses":{"200":{"description":"Rendered HTML preview"},"400":{"description":"Validation error"}},"summary":"Render offline page preview","tags":["offline"]}},"/api/public/apps":{"get":{"responses":{"200":{"description":"Public app releases"}},"security":[],"summary":"Public app store releases","tags":["public"]}},"/api/public/releases/latest/{channel}/update/{platform}":{"get":{"parameters":[{"in":"path","name":"channel","required":true,"schema":{"type":"string"}},{"in":"path","name":"platform","required":true,"schema":{"type":"string"}},{"in":"query","name":"current_version","schema":{"type":"string"}},{"in":"query","name":"current_code","schema":{"type":"integer"}},{"description":"Stable installation identifier for deterministic rollout_percent cohorts","in":"query","name":"install_id","schema":{"type":"string"}},{"description":"Alias for install_id","in":"query","name":"device_id","schema":{"type":"string"}}],"responses":{"200":{"description":"Update manifest"},"404":{"description":"Release not found"}},"security":[],"summary":"Latest public release update manifest by channel","tags":["public"]}},"/api/public/releases/{version_id}":{"get":{"responses":{"200":{"description":"Public version"}},"security":[],"summary":"Public release metadata","tags":["public"]}},"/api/public/releases/{version_id}/update/{platform}":{"get":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}},{"in":"path","name":"platform","required":true,"schema":{"type":"string"}},{"in":"query","name":"current_version","schema":{"type":"string"}},{"in":"query","name":"current_code","schema":{"type":"integer"}},{"description":"Stable installation identifier for deterministic rollout_percent cohorts","in":"query","name":"install_id","schema":{"type":"string"}},{"description":"Alias for install_id","in":"query","name":"device_id","schema":{"type":"string"}}],"responses":{"200":{"description":"Update manifest"},"304":{"description":"Not modified"}},"security":[],"summary":"Public release update manifest","tags":["public"]}},"/api/releases/activity":{"get":{"parameters":[{"in":"query","name":"days","schema":{"default":30,"type":"integer"}},{"in":"query","name":"limit","schema":{"default":100,"type":"integer"}},{"in":"query","name":"channel","schema":{"type":"string"}},{"in":"query","name":"version_id","schema":{"type":"string"}},{"in":"query","name":"action","schema":{"type":"string"}},{"in":"query","name":"include_telemetry","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Release activity timeline"}},"summary":"Tenant release lifecycle activity","tags":["analytics"]}},"/api/releases/analytics":{"get":{"parameters":[{"in":"query","name":"days","schema":{"default":30,"type":"integer"}},{"in":"query","name":"channel","schema":{"type":"string"}},{"in":"query","name":"platform","schema":{"type":"string"}},{"in":"query","name":"version_id","schema":{"type":"string"}}],"responses":{"200":{"description":"Release analytics summary"}},"summary":"Tenant release download/update analytics","tags":["analytics"]}},"/api/releases/report":{"get":{"parameters":[{"in":"query","name":"days","schema":{"default":30,"type":"integer"}},{"in":"query","name":"limit","schema":{"default":50,"type":"integer"}},{"in":"query","name":"channel","schema":{"type":"string"}},{"in":"query","name":"status","schema":{"type":"string"}},{"in":"query","name":"version_id","schema":{"type":"string"}},{"in":"query","name":"include_activity","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Release readiness, analytics and activity summary"}},"summary":"Tenant release operations report","tags":["analytics"]}},"/api/releases/{version_id}/download/{platform}":{"get":{"responses":{"200":{"description":"Binary artifact"},"302":{"description":"Redirect to external link"}},"security":[],"summary":"Public platform download","tags":["public"]}},"/api/signing/status":{"get":{"responses":{"200":{"description":"Code-signing readiness without secrets"}},"summary":"Distribution trust/signing readiness","tags":["signing"]}},"/api/tokens":{"get":{"responses":{"200":{"description":"Token list"}},"summary":"List API tokens","tags":["tokens"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiTokenCreate"}}}},"responses":{"200":{"description":"One-time API token"}},"summary":"Create API token","tags":["tokens"]}},"/api/tokens/{token_id}":{"delete":{"parameters":[{"in":"path","name":"token_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Token revoked"}},"summary":"Revoke API token","tags":["tokens"]}},"/api/versions":{"get":{"responses":{"200":{"description":"Version list"}},"summary":"List app versions","tags":["versions"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionRequest"}}}},"responses":{"200":{"description":"Version created"}},"summary":"Create app version","tags":["versions"]}},"/api/versions/{version_id}":{"get":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Version"}},"summary":"Get app version","tags":["versions"]},"patch":{"responses":{"200":{"description":"Version updated"}},"summary":"Update app version","tags":["versions"]}},"/api/versions/{version_id}/approval":{"get":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Release approval state"}},"summary":"Get release approval state","tags":["versions"]},"post":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"decision":{"enum":["approved","rejected","changes_requested","pending"],"type":"string"},"note":{"type":"string"},"required":{"default":true,"type":"boolean"},"reviewer":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Release approval recorded"}},"summary":"Record release approval decision","tags":["versions"]}},"/api/versions/{version_id}/pause":{"post":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Release paused"}},"summary":"Pause/unpublish a live release","tags":["versions"]}},"/api/versions/{version_id}/promote":{"post":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"force_publish":{"default":false,"type":"boolean"},"reason":{"type":"string"},"replace":{"default":false,"type":"boolean"},"status":{"default":"final","enum":["draft","beta","live","final"],"type":"string"},"target_channel":{"default":"stable","type":"string"},"version_name":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Existing target replaced"},"201":{"description":"Release promoted to new channel"},"409":{"description":"Target version already exists"}},"summary":"Promote/copy a release to another channel","tags":["versions"]}},"/api/versions/{version_id}/publish":{"post":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Version published"}},"summary":"Publish/finalize app version","tags":["versions"]}},"/api/versions/{version_id}/readiness":{"get":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"ok":{"type":"boolean"},"readiness":{"$ref":"#/components/schemas/ReleaseReadiness"},"version_id":{"type":"string"}},"type":"object"}}},"description":"Release readiness"}},"summary":"Validate release readiness before publishing","tags":["versions"]}},"/api/versions/{version_id}/report":{"get":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}},{"in":"query","name":"days","schema":{"default":30,"type":"integer"}},{"in":"query","name":"include_activity","schema":{"default":true,"type":"boolean"}}],"responses":{"200":{"description":"Release detail report"}},"summary":"Single release operations report","tags":["analytics"]}},"/api/versions/{version_id}/rollback":{"post":{"parameters":[{"in":"path","name":"version_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"force_publish":{"default":false,"type":"boolean"},"promote_previous":{"default":true,"type":"boolean"},"reason":{"type":"string"},"target_version_id":{"type":"string"}},"type":"object"}}}},"responses":{"200":{"description":"Release rolled back"}},"summary":"Rollback a release and optionally promote the previous version","tags":["versions"]}},"/api/webhooks":{"get":{"responses":{"200":{"description":"Webhook list"}},"summary":"List webhooks","tags":["webhooks"]},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRequest"}}}},"responses":{"201":{"description":"Webhook created; secret is returned once"}},"summary":"Create webhook","tags":["webhooks"]}},"/api/webhooks/{webhook_id}":{"delete":{"responses":{"200":{"description":"Webhook deleted"}},"summary":"Delete webhook","tags":["webhooks"]},"get":{"responses":{"200":{"description":"Webhook"}},"summary":"Get webhook","tags":["webhooks"]},"patch":{"responses":{"200":{"description":"Webhook updated"}},"summary":"Update webhook","tags":["webhooks"]}},"/api/webhooks/{webhook_id}/test":{"post":{"responses":{"200":{"description":"Test delivery attempted"}},"summary":"Send signed test webhook","tags":["webhooks"]}}},"security":[{"BearerApiToken":[]},{"CookieSession":[],"CsrfHeader":[]}],"servers":[{"url":"https://webpage-to-app.crafthoster.com"}]}
