Pumpkin-MC/Pumpkin · error · LicenseError
License was revoked or refunded
Error message
License was revoked or refunded: {0} What it means
LicenseError::Revoked means the marketplace reports the plugin's license as revoked or refunded, so the plugin is no longer licensed to run. The license string/identifier is included via {0}. This is a definitive licensing decision from the server, not a transient failure.
Solutions
- Purchase a new/valid license for the plugin on the marketplace.
- Verify you are using the correct license key/account (transfers may have moved it).
- Contact marketplace support if the revocation appears erroneous.
- Remove or disable the plugin if no valid license is obtained.
- Check the marketplace account email for refund/revocation notices.
Example fix
// before
let license = manager.verify()?; // fails with Revoked
// after
match manager.verify() {
Ok(l) => enable_plugin(l),
Err(LicenseError::Revoked(id)) => {
tracing::error!("license {id} revoked — disable paid features");
disable_paid_features();
}
Err(e) => return Err(e.into()),
} Defensive patterns
Strategy: try-catch
Type guard
fn is_revoked(e: &LicenseError) -> bool {
matches!(e, LicenseError::Revoked(_))
} Try / catch
match manager.verify() {
Ok(l) => activate(l),
Err(LicenseError::Revoked(id)) => {
tracing::error!("license {id} revoked/refunded — disabling plugin");
disable_plugin();
}
Err(e) => return Err(e.into()),
} Prevention
- Keep the marketplace subscription/payment method current.
- Watch for refund/revocation emails from the marketplace.
- Don't share license keys across servers beyond entitlement.
- Periodically re-verify to detect revocation promptly.
When it happens
Trigger: License verification against the marketplace returns a revoked/refunded status for the plugin's license; occurs on initial check and on periodic re-validation or offline-grace expiry followed by re-check.
Common situations: User requested a refund on the marketplace; license was revoked for terms-of-service violations; license transferred to another account/server; shared license key used beyond its entitlement.
Related errors
- License has expired on
- Marketplace HTTP error
- License metadata mismatch
- Plugin is unsigned or missing marketplace metadata
- Plugin-utils has not been initialized (call…
AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09).
Data as JSON: /api/errors/4bf9e67c6cce0ba8.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin-plugin-utils/src/license.rs:24
};
use std::{
path::{Path, PathBuf},
time::{Duration, SystemTime, UNIX_EPOCH},
};
use thiserror::Error;
use tracing::{debug, info};
/// License checking and verification errors.
#[derive(Debug, Error)]
pub enum LicenseError {
/// HTTP communication error with marketplace.
#[error("Marketplace HTTP error: {0}")]
Http(#[from] HttpError),
/// Metadata validation error (e.g. missing license on paid plugin).
#[error("License metadata mismatch: {0}")]
MetadataMismatch(String),
/// License revoked or refunded by marketplace.
#[error("License was revoked or refunded: {0}")]
Revoked(String),
/// License is expired.
#[error("License has expired on {0}")]
Expired(String),
/// I/O error reading/writing license cache.
#[error("I/O error with license storage: {0}")]
Io(#[from] std::io::Error),
/// JSON serialization error.
#[error("JSON serialization error: {0}")]
Json(#[from] serde_json::Error),
/// Plugin is unsigned or missing marketplace metadata.
#[error("Plugin is unsigned or missing marketplace metadata")]
UnsignedPlugin,
/// Plugin has not been initialized.
#[error(
"Plugin-utils has not been initialized (call pumpkin_plugin_utils::init(context) first)"
)]
NotInitialized,View on GitHub (pinned to 8d4639e25a)