# ERC-5007: Time NFT Extension

Source: https://www.eipsfordesigners.com/standards/ERC-5007
Agent brief: https://www.eipsfordesigners.com/standards/ERC-5007/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/ERC-5007
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | NFT Capabilities |
| Journey stages | Asset Management |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-5007 |
| Discussion search | https://ethereum-magicians.org/search?q=ERC-5007 |

## UX Impact

NFTs have built-in start and end times — tokens can be time-bounded or represent time periods. Design implications: show validity period badges ('Valid: Jan 1 - Dec 31'), gray out or hide expired tokens, display countdown to activation/expiration, support time-range visualization for event tickets or subscriptions. Design decisions: whether to completely hide invalid-period tokens or show them disabled, how to handle timezone display, whether to allow splitting/merging time-bounded tokens if composable extension used.

## Summary

ERC-5007 adds time validity to NFTs with built-in start and end times. Perfect for subscriptions, season passes, time-limited memberships, and access tokens that automatically become invalid after expiration.

## For Designers

- You can design UI that delivers nFT has on-chain startTime/endTime.
- You can design UI that delivers uI can show "Valid until Dec 31" or "Expired" clearly.
- You can design UI that delivers set startTime in future: "Valid Jan 1, Dec 31, 2027".

## Applicability

### When to Use

- Your product addresses: subscriptions require off-chain expiration tracking.
- Your product addresses: expired access tokens still appear in wallets.
- The flow should deliver: nFT has on-chain startTime/endTime, contracts can check directly.
- You are designing a subscription card experience with visible states and recovery paths.

### When to Avoid

- Always show "Valid until [date]" prominently.
- Visually distinguish expired tokens (gray out, badge).
- Warn at 30, 7, and 1 day before expiry.
- Assets are fungible tokens only with no unique-item semantics.

## Problems It Solves

### Subscriptions require off-chain expiration tracking

Impact: critical

Old way: NFT exists forever, backend checks if subscription is active

New way: NFT has on-chain startTime/endTime, contracts can check directly

### Expired access tokens still appear in wallets

Impact: high

Old way: User sees membership NFT but it's actually expired

New way: UI can show "Valid until Dec 31" or "Expired" clearly

### Can't create future-starting access

Impact: high

Old way: NFT is valid from mint time, can't pre-sell future access

New way: Set startTime in future: "Valid Jan 1 - Dec 31, 2027"

### Renewal requires burn and remint

Impact: medium

Old way: Extend subscription by burning old NFT, minting new one

New way: Just update endTime to extend validity period

### Smart contracts can't verify time-based access

Impact: medium

Old way: Off-chain oracle needed to verify subscription status

New way: On-chain time check: if (block.timestamp < endTime) grant access

## Anti-Patterns

### Hiding validity period from users

Severity: critical

Users surprised when access suddenly revoked

Instead: Always show "Valid until [date]" prominently

### Treating expired NFTs same as active

Severity: critical

Confusing when NFT appears valid but doesn't work

Instead: Visually distinguish expired tokens (gray out, badge)

### No warning before expiration

Severity: high

Users miss renewal window, lose access

Instead: Warn at 30, 7, and 1 day before expiry

### Not showing future-starting passes clearly

Severity: high

User thinks NFT is broken when it's just not active yet

Instead: Show "Activates in X days" with clear start date

### Complex renewal process

Severity: medium

Users give up on renewing, churn increases

Instead: One-click renewal that extends endTime

### Burning expired NFTs automatically

Severity: medium

Users lose collectible/proof they had membership

Instead: Keep expired NFT visible, just mark as expired

## UI Components

### ValidityPeriodDisplay

Show start and end time of NFT
States: not-started, active, expiring-soon, expired
Props: startTime, endTime, showProgress

### ExpiryCountdown

Countdown to expiration
States: plenty-time, warning, critical, expired
Props: endTime, warningThreshold, criticalThreshold

### TimelineBadge

Visual timeline showing validity period
States: past, present, future
Props: startTime, endTime, currentTime

### RenewalPrompt

Prompt to renew expiring NFT
States: hidden, suggested, urgent
Props: daysUntilExpiry, renewalPrice, onRenew

### ExpiredOverlay

Overlay for expired NFT display
States: expired, renewable, permanently-expired
Props: expiredAt, canRenew, onRenew, onHide

## On Monad

### Timestamp Precision

Ethereum: 12-second blocks, timestamps approximate

Monad: Sub-second blocks, more precise timing possible

Design implication: Can show "expires in X hours" with higher accuracy

### Renewal Transactions

Ethereum: Renewal costs gas, users might delay

Monad: Low gas makes last-minute renewals easy

Design implication: Can offer "renew instantly" even at expiry

### Access Checks

Ethereum: On-chain time checks in contracts

Monad: Fast finality means access revocation is instant

Design implication: Access changes the moment endTime passes

### Short-Duration Passes

Ethereum: Gas cost limits viability of daily passes

Monad: Low cost enables hourly or daily access tokens

Design implication: Can design micro-duration access products

## Key Takeaways

- ERC-5007 = NFT with built-in start and end time
- Perfect for subscriptions, season passes, memberships
- Always show validity period prominently
- Warn before expiration (30/7/1 day)
- Keep expired NFTs visible, just marked as expired

## UX Patterns

### Subscription Card

Display time-limited NFT with validity period

User flow:

- User views their membership NFT
- Sees validity period and time remaining
- Progress bar shows how much time used
- Can renew before expiration
- After expiry, card shows "Expired" status

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Season Pass Timeline

Show season pass with start and end dates

User flow:

- User purchases season pass
- Sees exact start and end dates
- Timeline shows current position
- Tracks progress toward rewards
- Pass automatically expires at season end

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

### Future Access Pre-Sale

Sell access that starts in the future

User flow:

- User sees pre-sale for future access
- Pass has startTime in the future
- User purchases at discount
- NFT minted but not yet active
- Automatically activates on startTime

Mockup registry key: `generic/token-transfer` (React UI on the live standard page).

### Expired Token Display

Clear indication when time-limited NFT has expired

User flow:

- User views expired NFT
- Card clearly shown as expired (grayed out)
- Shows when it expired
- Option to hide or renew
- Renewal extends endTime

Mockup registry key: `concept/nft-gallery` (React UI on the live standard page).

## Technical Notes

ERC-5007 extends ERC-721 with startTime() and endTime() returning uint64 timestamps. Interface includes IERC5007 with these two functions. Contracts can check if (block.timestamp >= startTime && block.timestamp <= endTime) to verify validity. Common to pair with ERC-4907 for rental time windows or standalone for subscriptions.
