Skip to content
Home SteadyScore documentation Developer reference

Developer reference

SteadyScore is built as a standalone product, not as an extension platform — there is no large public hooks API in v1.0.0. A small set of filter hooks are available so site owners and agencies can tune timeouts, batch sizes, and cache lifetimes for their environment.

Filter hooks

All hooks are namespaced under the steadyscore_ prefix. Each one is documented inline in the codebase at the call site.

steadyscore_wporg_timeout

HTTP timeout for outbound requests to the WordPress.org plugin API.

Default 15 seconds (2 seconds during the initial-population batch)
Type int (seconds)
Use when The WordPress.org API is slow from your network and you want to give it more time before SteadyScore gives up on a request.
add_filter('steadyscore_wporg_timeout', function ($seconds) {
    return 30;
});

steadyscore_wordfence_timeout

HTTP timeout for outbound requests to the Wordfence Intelligence API.

Default 15 seconds
Type int (seconds)
add_filter('steadyscore_wordfence_timeout', function ($seconds) {
    return 30;
});

steadyscore_chunk_size

Batch size for background jobs. The initial-population job, the background refresh job, and the author-reputation recalculation job all process plugins in chunks of this size, scheduling the next chunk via Action Scheduler.

Default 10 plugins per chunk
Type int
Use when Lower the value on memory-constrained shared hosting; raise it on a fast box where you want scoring to finish sooner.
add_filter('steadyscore_chunk_size', function ($size) {
    return 5;
});

steadyscore_sync_budget

Maximum number of outbound API requests SteadyScore will make in a single sync invocation. Used by the data sync service as a safety valve so runaway runs cannot hammer upstream APIs.

Default 20 requests per sync invocation
Type int
add_filter('steadyscore_sync_budget', function ($budget) {
    return 50;
});

steadyscore_cache_ttl

TTL (in seconds) for cached upstream data. The filter receives the proposed TTL and the data-source slug so you can override per source.

Default 7 days for wporg, 3 days for wordfence, 1 day for steadypress (Pro), 7 days for codecanyon (Pro)
Type int (seconds), string $dataSource second argument
Use when You want longer caches on a quiet site, or shorter caches on a development site where you want every change reflected fast.
add_filter('steadyscore_cache_ttl', function ($ttl, $dataSource) {
    if ($dataSource === 'wordfence') {
        return DAY_IN_SECONDS; // 24 hours for Wordfence
    }
    return $ttl;
}, 10, 2);

REST API

SteadyScore exposes a REST namespace at /wp-json/steadyscore/v1/. Every route requires the manage_options capability except the Google OAuth callback, which is public so the browser can complete the redirect.

Route Method Purpose
/status GET Poll initial-population and refresh progress.
/settings POST Save dashboard, display, and Wordfence settings.
/settings/monitoring POST Save monitoring schedule and alert configuration (Pro).
/license/activate POST Activate a Pro license against the SteadyPress API.
/license/deactivate POST Release the license slot for this site.
/data/delete-all POST Truncate every SteadyScore table and clear every SteadyScore option.
/ai/scan POST Trigger an AI analysis run for all plugins (Pro).
/ai/results GET Fetch latest AI analysis results (Pro).
/export/google-sheets POST Export the dashboard view to a Google Sheet (Pro).
/oauth/google/initiate POST Start the Google OAuth flow (Pro).
/oauth/google/callback GET OAuth callback handler.

The REST API is considered internal to the plugin's admin UI in v1.0.0 — the contract may evolve in future releases without deprecation. If you have a use case that needs a stable public REST contract, please contact us at https://steadypress.ai/contact/?subject=SteadyScore so we can scope it before locking the interface.

PSR-4 autoloading

The plugin uses Composer's PSR-4 autoloader. Free classes live under SteadyPress\SteadyScore\ (mapping to includes/base/ and includes/free/); Pro classes live under SteadyPress\SteadyScore\Pro\ (mapping to includes/pro/). The Pro autoload entry is stripped from the free build.

Action Scheduler hooks

Background jobs are registered against Action Scheduler hooks. These are implementation details rather than a public extension surface, but if you are debugging in Tools → Scheduled Actions, you will see them as:

Hook Job class What it does
steadyscore_initial_population_batch InitialPopulationJob Detects, paths, fetches, and scores every installed plugin. Self-chains until done.
steadyscore_background_refresh BackgroundRefreshJob Re-fetches expiring cache entries and re-scores affected plugins.
steadyscore_author_reputation_recalc AuthorReputationRecalcJob Recalculates author reputation across all scored plugins.
steadyscore_pruning PruningJob Weekly cleanup of expired cache rows and old refresh metadata.
steadyscore_scheduled_monitoring ScheduledMonitoringJob (Pro) Runs the monitoring cadence and evaluates alert triggers.
steadyscore_ai_analysis_job AiAnalysisJob (Pro) Calls the SteadyPress API to run AI analysis on a batch of plugins.

Database schema

SteadyScore owns six tables under your existing WordPress table prefix:

  • <prefix>_steadyscore_plugins — inventory of detected plugins.
  • <prefix>_steadyscore_refreshes — metadata for each refresh run.
  • <prefix>_steadyscore_scores — per-plugin per-refresh scoring results.
  • <prefix>_steadyscore_vulnerabilities — vulnerability records.
  • <prefix>_steadyscore_data_cache — TTL-based cache of fetched upstream data.
  • <prefix>_steadyscore_ai_results — Pro-only AI analysis results.

The schema is created via dbDelta() in Database/Migrator.php on activation. Uninstall drops every one.

Capability and security

Every admin screen, every REST endpoint (apart from the OAuth callback), and every settings save requires the manage_options capability. There is no separate custom capability — administrators have access; nobody else does.

Pro requests to the SteadyPress API are signed with HMAC-SHA256 using a per-site secret returned at license activation. The signature is sent in the X-PTS-HMAC header. There is no API-key model — the HMAC is the only credential.

Source code

SteadyScore is licensed under GPL v2 or later. The free build is also distributed through the WordPress.org plugin directory.


Need more help? Contact support.