|
[ |
|
{ |
|
"category": "Site Provisioning", |
|
"title": "Create Site", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.new", |
|
"invocation_pattern": "press.api.site.new(site={...})", |
|
"doctype": "Site", |
|
"doc_method": "", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/pages/NewSite.vue"], |
|
"purpose": "Provision site via shared/private/dedicated flows.", |
|
"required_args": ["site.name", "site.plan", "site.apps"], |
|
"optional_args": ["site.version", "site.cluster", "site.provider", "site.server", "site.selected_app_plans"], |
|
"acts_on": ["Site", "Site Group Deploy", "Release Group", "Bench"], |
|
"async": true, |
|
"tracking_entities": ["Site Group Deploy", "Agent Job", "Site"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Response shape varies by provisioning path." |
|
}, |
|
{ |
|
"category": "Site Provisioning", |
|
"title": "Check subdomain availability", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.exists", |
|
"invocation_pattern": "press.api.site.exists(subdomain, domain)", |
|
"doctype": "", |
|
"doc_method": "", |
|
"source_files": ["press/api/site.py"], |
|
"frontend_files": ["dashboard/src/pages/NewSite.vue"], |
|
"purpose": "Validate name availability.", |
|
"required_args": ["subdomain", "domain"], |
|
"optional_args": [], |
|
"acts_on": ["Site"], |
|
"async": false, |
|
"tracking_entities": [], |
|
"danger_level": "Safe", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "allow_guest + rate-limited." |
|
}, |
|
{ |
|
"category": "Generic API Utilities / Wrappers", |
|
"title": "Get document", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.client.get", |
|
"invocation_pattern": "press.api.client.get(doctype, name)", |
|
"doctype": "*", |
|
"doc_method": "", |
|
"source_files": ["press/api/client.py"], |
|
"frontend_files": ["dashboard/src/pages/NewSiteProgress.vue"], |
|
"purpose": "Fetch doc snapshots with team access checks.", |
|
"required_args": ["doctype", "name"], |
|
"optional_args": [], |
|
"acts_on": ["ALLOWED_DOCTYPES"], |
|
"async": false, |
|
"tracking_entities": [], |
|
"danger_level": "Safe", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Doctype must be in allowlist." |
|
}, |
|
{ |
|
"category": "Generic API Utilities / Wrappers", |
|
"title": "Run document method", |
|
"exposure_type": "run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.client.run_doc_method", |
|
"invocation_pattern": "press.api.client.run_doc_method(dt, dn, method, args)", |
|
"doctype": "varies", |
|
"doc_method": "varies", |
|
"source_files": ["press/api/client.py"], |
|
"frontend_files": ["dashboard/src/main.js", "dashboard/src/objects/site.js"], |
|
"purpose": "Invoke dashboard-whitelisted document operations.", |
|
"required_args": ["dt", "dn", "method"], |
|
"optional_args": ["args"], |
|
"acts_on": ["Any allowed doctype with dashboard-whitelisted methods"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site", "Site Activity"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Must pass dashboard action checks; should be wrapped internally." |
|
}, |
|
{ |
|
"category": "Backups", |
|
"title": "List site backups", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.backups", |
|
"invocation_pattern": "press.api.site.backups(name)", |
|
"doctype": "Site Backup", |
|
"doc_method": "", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site_backup/site_backup.py"], |
|
"frontend_files": ["dashboard/src/objects/site.js"], |
|
"purpose": "Return logical/offsite backups with availability filtering.", |
|
"required_args": ["name"], |
|
"optional_args": [], |
|
"acts_on": ["Site Backup"], |
|
"async": false, |
|
"tracking_entities": [], |
|
"danger_level": "Safe", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Offsite backup count is capped by Press Settings." |
|
}, |
|
{ |
|
"category": "Backups", |
|
"title": "Schedule backup (doc method)", |
|
"exposure_type": "run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.client.run_doc_method", |
|
"invocation_pattern": "dt=Site, method=schedule_backup, args={with_files, physical}", |
|
"doctype": "Site", |
|
"doc_method": "schedule_backup", |
|
"source_files": ["press/press/doctype/site/site.py", "press/press/doctype/site_backup/site_backup.py"], |
|
"frontend_files": ["dashboard/src/components/site/SiteScheduleBackup.vue"], |
|
"purpose": "Create backup with optional files/physical mode.", |
|
"required_args": [], |
|
"optional_args": ["with_files", "physical"], |
|
"acts_on": ["Site", "Site Backup"], |
|
"async": true, |
|
"tracking_entities": ["Site Backup", "Agent Job"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Physical backup gated by site/system flags." |
|
}, |
|
{ |
|
"category": "Restore / Recovery", |
|
"title": "Restore site from files", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.restore", |
|
"invocation_pattern": "press.api.site.restore(name, files, skip_failing_patches)", |
|
"doctype": "Site", |
|
"doc_method": "restore_site", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/SiteDatabaseRestoreDialog.vue", "dashboard/src/objects/site.js"], |
|
"purpose": "Restore DB/files/config from provided remote files.", |
|
"required_args": ["name", "files"], |
|
"optional_args": ["skip_failing_patches"], |
|
"acts_on": ["Site", "Remote File"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "At least one of database/public/private file is mandatory." |
|
}, |
|
{ |
|
"category": "Restore / Recovery", |
|
"title": "Restore from physical backup snapshot", |
|
"exposure_type": "run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.client.run_doc_method", |
|
"invocation_pattern": "dt=Site, method=restore_site_from_physical_backup, args={backup}", |
|
"doctype": "Site", |
|
"doc_method": "restore_site_from_physical_backup", |
|
"source_files": ["press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/objects/site.js"], |
|
"purpose": "Restore database using physical snapshot restoration workflow.", |
|
"required_args": ["backup"], |
|
"optional_args": [], |
|
"acts_on": ["Site", "Physical Backup Restoration", "Site Backup"], |
|
"async": true, |
|
"tracking_entities": ["Physical Backup Restoration", "Agent Job", "Site"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "Medium", |
|
"confidence": "Medium", |
|
"status": "likely_active", |
|
"notes": "Requires physical backup feature enabled." |
|
}, |
|
{ |
|
"category": "Restore / Recovery", |
|
"title": "Validate restoration disk requirements", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.validate_restoration_space_requirements", |
|
"invocation_pattern": "press.api.site.validate_restoration_space_requirements(...)", |
|
"doctype": "Site", |
|
"doc_method": "", |
|
"source_files": ["press/api/site.py"], |
|
"frontend_files": ["dashboard/src/components/BackupFilesUploader.vue"], |
|
"purpose": "Check if app/db servers have enough free space for restore.", |
|
"required_args": ["name", "db_file_size", "public_file_size", "private_file_size"], |
|
"optional_args": [], |
|
"acts_on": ["Site", "Server", "Database Server"], |
|
"async": false, |
|
"tracking_entities": [], |
|
"danger_level": "Safe", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Public servers treated as expandable." |
|
}, |
|
{ |
|
"category": "Site Actions / Lifecycle", |
|
"title": "Reinstall site", |
|
"exposure_type": "direct endpoint / run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.reinstall", |
|
"invocation_pattern": "press.api.site.reinstall(name) OR dt=Site method=reinstall", |
|
"doctype": "Site", |
|
"doc_method": "reinstall", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/objects/site.js"], |
|
"purpose": "Reset/reinstall site via agent job.", |
|
"required_args": ["name"], |
|
"optional_args": [], |
|
"acts_on": ["Site"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Sets site status to Pending." |
|
}, |
|
{ |
|
"category": "Site Actions / Lifecycle", |
|
"title": "Archive site", |
|
"exposure_type": "direct endpoint / run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.archive", |
|
"invocation_pattern": "press.api.site.archive(name, force) OR dt=Site method=archive", |
|
"doctype": "Site", |
|
"doc_method": "archive", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/ArchiveSiteDialog.vue"], |
|
"purpose": "Archive/drop site and disable related subscriptions.", |
|
"required_args": ["name"], |
|
"optional_args": ["force", "create_offsite_backup"], |
|
"acts_on": ["Site", "Subscription"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Also removes upstream/proxy mapping." |
|
}, |
|
{ |
|
"category": "App Management", |
|
"title": "Install app on site", |
|
"exposure_type": "direct endpoint / run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.install_app", |
|
"invocation_pattern": "press.api.site.install_app(name, app, plan) OR dt=Site method=install_app", |
|
"doctype": "Site", |
|
"doc_method": "install_app", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/InstallAppDialog.vue"], |
|
"purpose": "Install application and optionally attach marketplace plan.", |
|
"required_args": ["name", "app"], |
|
"optional_args": ["plan"], |
|
"acts_on": ["Site", "Subscription", "Marketplace App"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Paid app install blocked for teams without paid capability." |
|
}, |
|
{ |
|
"category": "App Management", |
|
"title": "Uninstall app from site", |
|
"exposure_type": "direct endpoint / run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.uninstall_app", |
|
"invocation_pattern": "press.api.site.uninstall_app(name, app) OR dt=Site method=uninstall_app", |
|
"doctype": "Site", |
|
"doc_method": "uninstall_app", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/UninstallAppDialog.vue"], |
|
"purpose": "Remove app and update marketplace subscription state.", |
|
"required_args": ["name", "app"], |
|
"optional_args": ["create_offsite_backup", "feedback"], |
|
"acts_on": ["Site", "Subscription"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Sets site pending while job runs." |
|
}, |
|
{ |
|
"category": "Site Config / Environment / Domains", |
|
"title": "Read/Update site config", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.update_config", |
|
"invocation_pattern": "press.api.site.site_config(name), press.api.site.update_config(name, config)", |
|
"doctype": "Site", |
|
"doc_method": "update_config", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/ConfigEditorDialog.vue"], |
|
"purpose": "Manage customer-visible subset of site config.", |
|
"required_args": ["name"], |
|
"optional_args": ["config"], |
|
"acts_on": ["Site", "Site Config"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Blacklisted/internal keys blocked; developer_mode disallowed in doc path." |
|
}, |
|
{ |
|
"category": "Site Config / Environment / Domains", |
|
"title": "Domain verify/add/remove/redirect", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.check_dns", |
|
"invocation_pattern": "check_dns, add_domain, retry_add_domain, remove_domain, set_host_name, set_redirect, unset_redirect", |
|
"doctype": "Site", |
|
"doc_method": "add_domain/remove_domain/set_host_name/set_redirect/unset_redirect", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/AddDomainDialog.vue"], |
|
"purpose": "Manage custom domain lifecycle and primary/redirect behavior.", |
|
"required_args": ["name", "domain"], |
|
"optional_args": [], |
|
"acts_on": ["Site Domain", "Site"], |
|
"async": true, |
|
"tracking_entities": ["Site Domain", "Site Activity"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Includes DNS validation and reserved-domain checks." |
|
}, |
|
{ |
|
"category": "Migration / Upgrade / Update", |
|
"title": "Version upgrade orchestration", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.version_upgrade", |
|
"invocation_pattern": "version_upgrade + compatibility and bench checks", |
|
"doctype": "Site", |
|
"doc_method": "", |
|
"source_files": ["press/api/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/SiteVersionUpgradeDialog.vue"], |
|
"purpose": "Schedule/start major version upgrades.", |
|
"required_args": ["name", "destination_group"], |
|
"optional_args": ["scheduled_datetime", "skip_failing_patches", "skip_backups"], |
|
"acts_on": ["Version Upgrade", "Site", "Release Group"], |
|
"async": true, |
|
"tracking_entities": ["Version Upgrade", "Agent Job"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Destination group may be auto-resolved for shared/central benches." |
|
}, |
|
{ |
|
"category": "Migration / Upgrade / Update", |
|
"title": "Migration via doc method", |
|
"exposure_type": "run_doc_method", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.client.run_doc_method", |
|
"invocation_pattern": "dt=Site method=create_migration_plan|get_migration_options|migrate", |
|
"doctype": "Site", |
|
"doc_method": "create_migration_plan / get_migration_options / migrate", |
|
"source_files": ["press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/SiteMigration.vue"], |
|
"purpose": "Plan and execute migration flows.", |
|
"required_args": [], |
|
"optional_args": ["scheduled_time", "skip_failing_patches", "skip_backups"], |
|
"acts_on": ["Site Migration", "Site", "Agent Job"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job", "Site"], |
|
"danger_level": "Dangerous", |
|
"saas_relevance": "High", |
|
"confidence": "Medium", |
|
"status": "likely_active", |
|
"notes": "Used in dashboard migration UI." |
|
}, |
|
{ |
|
"category": "Deployments / Jobs / Status Tracking", |
|
"title": "Site job list/detail", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.jobs", |
|
"invocation_pattern": "jobs, job, running_jobs, get_job_status", |
|
"doctype": "Agent Job", |
|
"doc_method": "", |
|
"source_files": ["press/api/site.py"], |
|
"frontend_files": ["dashboard/src/utils/agentJob.js", "dashboard/src/components/site/SiteJobs.vue"], |
|
"purpose": "Track async job status and step output.", |
|
"required_args": ["filters (jobs)", "job (job detail)", "name (running_jobs)"], |
|
"optional_args": ["pagination/order"], |
|
"acts_on": ["Agent Job", "Agent Job Step"], |
|
"async": false, |
|
"tracking_entities": ["Agent Job", "Agent Job Step"], |
|
"danger_level": "Safe", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Undelivered is normalized to Pending in API response." |
|
}, |
|
{ |
|
"category": "Plans / Billing / Subscription / Marketplace", |
|
"title": "Site plan catalog and current plan", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.site.get_site_plans", |
|
"invocation_pattern": "get_site_plans, get_plans, current_plan, change_plan", |
|
"doctype": "Site Plan", |
|
"doc_method": "set_plan", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/data/plans.js", "dashboard/src/components/site/SitePlanChangeDialog.vue"], |
|
"purpose": "Read available plans and change plan for site.", |
|
"required_args": [], |
|
"optional_args": ["name", "rg", "plan"], |
|
"acts_on": ["Site", "Site Plan", "Site Plan Change"], |
|
"async": true, |
|
"tracking_entities": ["Agent Job"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Plan changes enforce payment/eligibility checks." |
|
}, |
|
{ |
|
"category": "Plans / Billing / Subscription / Marketplace", |
|
"title": "Marketplace app plan & subscription operations", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.marketplace.change_app_plan", |
|
"invocation_pattern": "get_app_plans, get_marketplace_subscriptions_for_site, change_app_plan", |
|
"doctype": "Subscription", |
|
"doc_method": "", |
|
"source_files": ["press/api/marketplace.py"], |
|
"frontend_files": ["dashboard/src/components/site/SiteAppPlanSelectDialog.vue"], |
|
"purpose": "Manage per-app subscription plans for installed marketplace apps.", |
|
"required_args": ["subscription", "new_plan (for change)"], |
|
"optional_args": ["site", "app"], |
|
"acts_on": ["Subscription", "Marketplace App Plan"], |
|
"async": false, |
|
"tracking_entities": [], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "High", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Paid-plan eligibility checked against team credit/payment capability." |
|
}, |
|
{ |
|
"category": "Plans / Billing / Subscription / Marketplace", |
|
"title": "Billing summary/invoice APIs", |
|
"exposure_type": "direct endpoint", |
|
"http_method": "POST", |
|
"endpoint": "/api/method/press.api.billing.get_summary", |
|
"invocation_pattern": "upcoming_invoice, get_unpaid_invoices, total_unpaid_amount, get_invoice_usage, get_summary, billing_forecast", |
|
"doctype": "Invoice", |
|
"doc_method": "", |
|
"source_files": ["press/api/billing.py"], |
|
"frontend_files": ["dashboard/src/pages/BillingOverview.vue", "dashboard/src/components/billing/*"], |
|
"purpose": "Expose billing status, invoice details and forecast data.", |
|
"required_args": ["invoice (for usage/details)", "none for some summary calls"], |
|
"optional_args": [], |
|
"acts_on": ["Invoice", "Balance Transaction", "Team"], |
|
"async": false, |
|
"tracking_entities": [], |
|
"danger_level": "Safe", |
|
"saas_relevance": "Medium", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Protected by billing role guard." |
|
}, |
|
{ |
|
"category": "Teams / Ownership / Transfer / Access", |
|
"title": "Site transfer request and confirmation", |
|
"exposure_type": "direct endpoint / run_doc_method", |
|
"http_method": "POST/GET", |
|
"endpoint": "/api/method/press.api.site.send_change_team_request", |
|
"invocation_pattern": "send_change_team_request(name, team_mail_id, reason) + confirm_site_transfer(key)", |
|
"doctype": "Site", |
|
"doc_method": "send_change_team_request", |
|
"source_files": ["press/api/site.py", "press/press/doctype/site/site.py"], |
|
"frontend_files": ["dashboard/src/components/site/SiteTransferDialog.vue"], |
|
"purpose": "Transfer site ownership between teams.", |
|
"required_args": ["name", "team_mail_id", "reason"], |
|
"optional_args": ["key (confirm)"], |
|
"acts_on": ["Site", "Team Change"], |
|
"async": true, |
|
"tracking_entities": ["Team Change"], |
|
"danger_level": "Moderate", |
|
"saas_relevance": "Medium", |
|
"confidence": "High", |
|
"status": "active", |
|
"notes": "Confirmation endpoint may respond with web redirects/pages." |
|
} |
|
] |