Create Your First Entitlement
An Entitlement is the central record in MIDDAG Account. It represents one simple fact: "Organization X has access to Product/Service Y." Every license, contract, invoice, and service request connects back to an entitlement. If you want to know what a customer has, you look at their entitlements.
In normal operation, entitlements are created automatically when a customer places an order through WooCommerce. But for your initial setup, you will create one manually to understand how the system works.
What you will need
- At least one Organization already created and verified (see Create Your First Organization)
- MIDDAG Account plugin installed with Entitlement Classes configured
Step 1: Open the Entitlements list
In your WordPress admin sidebar, navigate to MIDDAG Account > Entitlements. Click New Entitlement.
Step 2: Select the Organization
Choose which Organization this entitlement belongs to. This is the customer who will "own" this entitlement. Start typing the organization name and select it from the dropdown.
Tip: Selecting an Organization is optional. Entitlements can exist without one — useful for gift cards, promotional access, or individual (non-business) customers. For this getting-started guide, we recommend linking to an Organization so you can see the full lifecycle flow.
Step 3: Select the Entitlement Class
Every entitlement has a Class that determines what type of product or service it represents. MIDDAG Account ships with six default classes:
| Class | Prefix | What it represents | Example |
|---|---|---|---|
| Plugin | PLG | A software license | "Acme Corp has a license for MIDDAG Forms Pro" |
| Environment | ENV | A managed hosting installation | "Acme Corp has a WordPress staging environment" |
| Service | SVC | An ongoing service or project engagement | "Acme Corp has a consulting retainer" |
| Order | ORD | A generic purchase entitlement | "Acme Corp purchased a custom report package" |
| Affiliate | AFL | Membership in the partner program | "Acme Corp is an affiliate partner" |
| Education | EDU | Training, courses, or mentoring access | "Acme Corp has access to the Admin Academy" |
Select the class that matches what you are testing. For a first test, Plugin (PLG) or Order (ORD) are good choices.
INFO
Entitlement Classes are configurable from your admin settings. You can rename them, adjust their behavior, or create new ones to match your business. They are stored in the database, not hardcoded.
Step 4: Set the dates
| Field | What it means |
|---|---|
| Start Date | When this entitlement becomes active. Typically today for a new purchase. |
| Expiration Date | When access expires if not renewed. Set this to a year from today for a typical annual subscription, or leave empty for perpetual access. |
Step 5: Fill in product details
Enter the product or service name and an optional description. If you are linking this to an existing WooCommerce product, you can select it here — but for a manual test, a descriptive name is sufficient.
Step 6: Save
Click Save. The system will:
- Generate a unique, immutable Entitlement Code
- Set the status to Active
- Display the entitlement in the Organization's record
Understanding the Entitlement Code
Every entitlement gets a code in this format:
{CLASS}-{YEAR}{MONTH}{SEQ}For example: PLG-2026050001
- PLG — the class prefix (Plugin)
- 2026 — the year
- 05 — the month
- 0001 — the sequential number (the first Plugin entitlement created in May 2026)
This code is:
- Unique — no two entitlements share the same code
- Immutable — once assigned, it never changes
- Human-readable — you can tell the class and approximate creation date at a glance
- Customer-visible — customers see this code in the portal, in emails, and when opening support requests
When a customer calls support and says "I have a question about PLG-2026050001," your team knows exactly what they are talking about.
The four lifecycle states
Every entitlement is always in one of four states:
| State | What it means | How it happens | What happens next |
|---|---|---|---|
| Active | The customer has access. Everything works normally. | Created (manually or by purchase). Or reactivated from another state. | Stays active until it expires, is suspended, or is cancelled. |
| Suspended | Access is temporarily paused. | Typically triggered by a failed payment. An admin can also suspend manually. | Can return to Active if payment is recovered. Can move to Cancelled if not resolved. |
| Expired | The entitlement's end date has passed without renewal. | Automatic when the expiration date is reached. | Can return to Active if the customer renews. Can move to Cancelled after a grace period. |
| Cancelled | Permanently revoked. | Admin action, or automatic after prolonged suspension/expiration without resolution. | Can be reactivated (win-back scenario), but this is an intentional admin action. |
When an entitlement changes state, everything connected to it follows. If a Plugin entitlement is suspended, the associated license is suspended. If a Service entitlement expires, the linked contract reflects that.
Verify it worked
After saving, confirm the following:
- Entitlement list — your new entitlement appears with the correct code, class, organization, and Active status
- Organization detail — navigate to the Organization and check the Entitlements tab. Your entitlement should appear there.
- Code format — the code follows the
{CLASS}-{YEAR}{MONTH}{SEQ}pattern
Remember: this is a manual test
In production, you will not create entitlements by hand. The normal flow is:
- Customer places an order through WooCommerce
- Payment is confirmed (via Stripe, Pix, Boleto, or another gateway)
- MIDDAG Account automatically creates the entitlement with the correct class
- Downstream resources (license, contract, environment) are provisioned automatically
This manual creation exists so you can verify the system is configured correctly before connecting it to your commerce flow.
What to do next
- Run your first lifecycle — connect a WooCommerce product to an Entitlement Class and test the full automated flow from purchase to provisioning