PRE-GEN
Docs / Refusal codes

Refusal codes

36 codes · Generated from the versioned policy registry · 2026-08-23

Every refusal from POST /v1/verify/ carries a machine-readable PG_* reason code. Codes are classified hard — no retry, reshaped request, or replacement license changes the outcome — or soft: a different request, a valid license, or a different provider might still succeed. An unregistered code fails closed (treated as hard), never silently retryable.

CodeCategoryTypeSinceMeaning
PG_MISSING_PROMPT_HASHrequestsoft2025-01-01The request did not include a prompt_hash to bind the decision to.
PG_NO_PAIRidentitysoft2025-01-01No live provider↔licensee pair authorizes this caller.
PG_IDENTITY_REVOKEDidentityHARD2025-06-01The provider disowned this end user’s identity link.
PG_ENTITLEMENT_INACTIVEidentityHARD2025-06-01The purchase (entitlement) backing this request is no longer active — reversed or expired.
PG_PROVIDER_NOT_ALLOWEDidentitysoft2025-06-01This license’s allow/block list excludes the calling provider.
PG_IDENTITY_UNKNOWNidentitysoft2026-07-26The asserted end-user identity does not resolve to any live identity link for this provider — the user has not completed the connect flow, or the link was deleted.
PG_IDENTITY_MISMATCHidentitysoft2026-07-26The license belongs to a different end user than the one the caller is acting for — cross-user reuse.
PG_IDENTITY_REQUIREDidentitysoft2026-07-26The license is bound to a specific end user, so the caller must say which user it is acting for.
PG_NO_SUBJECTsubject trustsoft2025-01-01No registered subject matches subject_id.
PG_SUBJECT_OPTED_OUTsubject trustHARD2025-01-01The subject’s rules refuse this request’s category outright. Checked before any license — no license can override it.
PG_SUBJECT_DISPUTEDsubject trustHARD2025-09-01A dispute is open on this subject — licensing is frozen pending outcome.
PG_SUBJECT_WITHDRAWNsubject trustHARD2025-01-01The subject was withdrawn by its owner or on moderation takedown.
PG_SUBJECT_PENDINGsubject trustsoft2025-01-01The subject is awaiting operator review before it may license at all.
PG_SUBJECT_PAUSEDsubject trustsoft2025-01-01The subject’s owner temporarily paused licensing.
PG_SUBJECT_NOT_LICENSABLEsubject trustHARD2025-10-01The subject’s trust-lifecycle state (suspended/disputed/revoked/archived) permits no licensing at all.
PG_REFERENCE_ONLYsubject trustHARD2025-01-01The subject is registered as reference-only and never licenses.
PG_PROVIDER_VETOEDsubject trustHARD2025-07-01The rights holder blocked this specific provider — no license changes that.
PG_SANDBOX_SUBJECT_ONLYsubject trustHARD2025-08-01A sandbox (Tier 1) provider credential may only verify against synthetic test subjects.
PG_PROHIBITED_USEsubject trustHARD2026-06-01A permanently-denied use for a high-risk subject — e.g. a sexualized category for a minor.
PG_INSUFFICIENT_AUTHORITYsubject trustsoft2025-10-01The subject’s authority/verification tier does not meet the bar this request needs.
PG_OWNER_NOT_VERIFIEDsubject trustsoft2026-08-19Commercial use also requires the subject’s owning account to be verified — the subject alone reaching commercial status is not sufficient.
PG_NO_LICENSElicensesoft2025-01-01No valid, live license authorizes this licensee for this subject.
PG_INVALID_SIGNATURElicenseHARD2025-01-01A license was found but its signature does not verify.
PG_SCOPE_VIOLATIONlicensesoft2025-01-01The request’s modality, channel, or territory falls outside what the license scopes.
PG_PRODUCT_MISMATCHlicensesoft2025-04-01The license is bound to a specific product and this request names a different one.
PG_PROJECT_MISMATCHlicensesoft2025-04-01The license is bound to a specific project and this request names a different one.
PG_MISSING_CONTEXTlicensesoft2025-04-01The license restricts a dimension and the request omitted it — fail-closed rather than let an omission bypass a restriction.
PG_IMMUTABLE_DENIALlicenseHARD2025-01-01The request’s declared category matches one of the license’s immutable (never-grantable) denials.
PG_TIER_VIOLATIONlicensesoft2025-05-01The declared use case ranks above what this license’s tier authorizes.
PG_EXTENSION_REFUSEDlicensesoft2025-05-01A license extension (e.g. a region rider) evaluated and refused this request.
PG_REGION_BLOCKEDlicensesoft2025-06-01The request’s territory falls outside the license’s allowed regions.
PG_LICENSE_REVOKEDlicenseHARD2025-09-15A live revocation (full or partial) withdraws this license.
PG_RIGHTS_NOT_GRANTEDlicensesoft2026-06-01The request exercises a rights dimension (e.g. model_training) the license never granted.
PG_USAGE_LIMITlicensesoft2025-05-01The license’s purchased quantity (max_uses) is exhausted. Surface this to the buyer as “buy more”, not as an error.
PG_CONCURRENCY_LIMITlicensesoft2025-05-01The license’s concurrent in-flight generation cap is reached. Back off and retry later.
PG_HELD_FOR_REVIEWreviewsoft2026-07-24Not a refusal: a commercial generation that would otherwise be allowed is held for human review. Treat as pending, not denied.
For implementers A correct client stops retrying on HARD codes and reacts to soft ones (offer a license-request flow, surface “buy more”, back off on concurrency). Retrying a withdrawn subject forever is the canonical wrong behavior — the hard/soft split exists precisely to prevent it.