Skip to content

Grace Periods

When a creator boxes their identity, existing avatars using their likeness aren’t immediately removed. Instead, a 30-day grace period gives avatar creators time to comply.

LMIF prioritizes fair treatment for everyone:

  • For creators: Protection is enforced, but fairly
  • For avatar creators: Time to adapt, not abrupt cutoffs
  • For users: Conversations preserved, smooth transitions
  • For platforms: Predictable compliance windows
┌─────────────────────────────────────────────────────────────┐
│ GRACE PERIOD TIMELINE │
├─────────────────────────────────────────────────────────────┤
│ │
│ DAY 0: Box Activated │
│ ├── All matching avatars flagged │
│ ├── Avatar creators notified │
│ ├── Users notified (in-app message) │
│ └── Grace period countdown begins │
│ │
│ DAY 7: First Reminder │
│ └── Notification sent to avatar creators │
│ │
│ DAY 21: Second Reminder │
│ └── "9 days remaining" notification │
│ │
│ DAY 28: Final Warning │
│ └── "2 days remaining - take action now" │
│ │
│ DAY 30: Enforcement │
│ ├── Unlicensed avatars deactivated │
│ ├── Users migrated to alternatives │
│ └── Conversation history preserved │
│ │
└─────────────────────────────────────────────────────────────┘

During the grace period, avatar creators have several options:

OptionDescription
Obtain LicenseApply for and pay for a license
Remove AvatarDelete the violating avatar
Mark as ParodyAdd clear parody disclaimer (if allowed by policy)
Modify AvatarChange name/image to remove likeness
AppealDispute the detection (goes to human review)
app.post('/webhooks/lmif', async (req, res) => {
const event = req.body;
switch (event.type) {
case 'grace_period.started':
// A grace period has begun for your platform
await handleGracePeriodStart(event.data);
break;
case 'grace_period.reminder':
// Reminder notification (day 7, 21, 28)
await sendReminder(event.data);
break;
case 'grace_period.ending':
// Final warning - 2 days left
await sendUrgentNotification(event.data);
break;
case 'grace_period.expired':
// Grace period ended - enforcement required
await enforceViolation(event.data);
break;
case 'grace_period.resolved':
// Avatar creator resolved the violation
await markResolved(event.data);
break;
}
res.status(200).send('OK');
});
// Get active grace periods for your platform
const gracePeriods = await lmif.gracePeriods.list({
platformId: 'your_platform_id',
status: 'active'
});
// Get details of a specific grace period
const period = await lmif.gracePeriods.get('gp_abc123');
// Mark a violation as resolved
await lmif.gracePeriods.resolve('gp_abc123', {
resolution: 'removed',
avatarId: 'avatar_xyz'
});
{
"id": "gp_abc123",
"boxId": "box_xyz789",
"violationId": "viol_123456",
"status": "active",
"startedAt": "2024-01-01T00:00:00Z",
"expiresAt": "2024-01-31T00:00:00Z",
"daysRemaining": 15,
"affectedAvatars": [
{
"avatarId": "avatar_001",
"platformId": "your_platform",
"creatorId": "creator_abc",
"userCount": 1500
}
],
"notifications": {
"day0": { "sent": true, "at": "2024-01-01T00:00:00Z" },
"day7": { "sent": true, "at": "2024-01-08T00:00:00Z" },
"day21": { "sent": false },
"day28": { "sent": false }
}
}
  1. Never abrupt - Users always get warning
  2. Always alternatives - Suggest similar avatars
  3. Preserve history - Conversations and memories saved
  4. Smooth migration - Clear path to new avatars

If an avatar creator resolves the violation early (e.g., obtains a license), the grace period ends immediately:

// Avatar creator obtained a license
await lmif.gracePeriods.resolve('gp_abc123', {
resolution: 'licensed',
licenseId: 'lic_xyz789'
});

If an avatar creator appeals, the grace period is paused:

{
"id": "gp_abc123",
"status": "paused",
"pauseReason": "appeal_pending",
"appealId": "appeal_456",
"originalExpiresAt": "2024-01-31T00:00:00Z"
}

The grace period resumes (with remaining time) if the appeal is denied.

If the identity owner changes to a less restrictive policy during the grace period:

Policy ChangeEffect
BLOCK_ALL → MONETIZEGrace period continues, but with licensing option
BLOCK_ALL → OPENGrace period ends, no enforcement
MONETIZE → BLOCK_ALLGrace period resets to 30 days

In the sandbox environment, grace periods are accelerated:

ProductionSandbox
30 days24 hours
Day 7 reminderHour 6 reminder
Day 21 reminderHour 18 reminder
Day 28 warningHour 22 warning