When billing changes, product access doesn't always follow.

Refunds process, but access stays live. Cancellations go through in Stripe, and users keep premium features. You usually notice later.

For indie devs & small B2B software teams

API preview — entitlement check

Confirm a user's access state from your source of truth

POST https://api.keyfox.io/v1/entitlements/check

Headers:
  x-api-key: YOUR_API_KEY

Body:
  subject: user_123
→ Response (200 OK)
{
  "hasAccess": true,
  "subject": "user_123",
  "entitlement": "premium"
}
Early access preview — responses are mocked while we finalize the API. Your feedback shapes the real implementation.

Where things break

A payment fails, and the user keeps premium access.

A user cancels or downgrades, but the system keeps premium access.

A refund is processed, and the user's access never gets revoked.

A billing webhook is delivered, but your app does not update access state.

Repetition

Cancellations, refunds, and plan changes happen all the time. Each product or pricing update means rewriting the same billing boilerplate.

Fragility

Ad-hoc fixes often fail silently. One missed webhook or script error means a canceled user keeps access, or a paying user loses it, and no one sees it.

Maintenance

Custom billing and entitlement sync code gets harder to maintain, test, and trust as it grows. Each hotfix for a corner case adds debt and more bugs.

These issues often go unnoticed for weeks. Support ends up fixing them by hand.

From “it should have updated” to a single entitlement check.

Keep Stripe as your billing system. Use Keyfox to resolve the user's current access state, plan, features, and grace in one place. It stays correct when events arrive late, retry, or arrive out of order.

BEFORE. Custom, fragile validation logic

const key = getUserLicenseKey() if (!key) return console.error("No license found!") const expired = checkIfExpired(key) const valid = !expired && validateKey(key) if (!valid) { renewKey(key) const renewed = validateKey(key) if (!renewed) return console.error("License invalid.") } console.log("License valid!")

AFTER. One clean Keyfox API call

const client = new Keyfox({ apiKey: process.env.KEYFOX_API_KEY }); // Validate a license key with a single API call const result = await client.verify("KFX-XXXX-XXXX"); if (result.valid) { console.log("License valid!"); // Continue with your application logic }

No manual fixes. No one-off scripts. No missed cancellations. One API keeps access state in sync.

API Examples

Preview real Keyfox responses — mocked during early access while we finalize the API.

Active Access

Access check example

REQUEST
POST /v1/entitlements/check
Headers:
x-api-key: YOUR_API_KEY
Body:
subject: user_123
RESPONSE
200 OK
{ "hasAccess": true, "subject": "user_123", "entitlement": "premium" }

Expired Access

Access check example

REQUEST
POST /v1/entitlements/check
Headers:
x-api-key: YOUR_API_KEY
Body:
subject: user_123
RESPONSE
200 OK
{ "hasAccess": false, "subject": "user_456", "reason": "subscription_expired" }

Revoked Access

Access check example

REQUEST
POST /v1/entitlements/check
Headers:
x-api-key: YOUR_API_KEY
Body:
subject: user_123
RESPONSE
200 OK
{ "hasAccess": false, "subject": "user_789", "reason": "refund_processed" }

Built for developers, not legacy vendors.

A modern entitlement platform built to remove boilerplate, ensure consistency, and give you clean, predictable control — without the bloat or black boxes of traditional vendors.

Modern Entitlement API

Check access, sync billing state, and manage user entitlements via a simple REST API that integrates with Stripe, Paddle, or any payment provider. No SDK lock-in. No proprietary formats.

Zero Boilerplate

No more custom cancellation handlers, refund scripts, or 'does this user still have access?' checks. Keyfox handles the lifecycle complexity so you don't have to write any glue code.

Auditable by Default

Every access event is logged and traceable, providing a clear audit trail of user entitlements. Always know exactly when access was granted or revoked — no more guesswork or surprises.

Self-Hosted or Cloud

Run Keyfox anywhere — your infrastructure or ours. Control regions, data, and scaling with a fully portable API.

Get early access
to the Keyfox API

Get API preview access, sample code, and early feature updates.

For indie devs & small B2B software teams

No marketing. No sales emails. Just technical updates and early access details.

Early members get priority when API keys are released.