Step 3 of 4

Handle Permissions

Verification is integrated. Now implement the full permissions system: licensing requests, revenue reporting, and enforcement handling.

📋
Licensing & Rights

When an identity is claimed or boxed, you may need to request a license. Some creators auto-approve, others require manual review.

Licensing Endpoints

GET /licensing/terms/{identity_id}

Get licensing terms and pricing for an identity.

// Response
{
  "auto_approve": false,
  "pricing": {
    "per_interaction": 0.01,
    "monthly_license": 500
  },
  "allowed_uses": ["avatar", "chatbot"],
  "blocked_uses": ["voice", "deepfake", "adult"],
  "content_guidelines": "..."
}
POST /licensing/request

Request a license for specific use.

{
  "identity_id": "id_xxx",
  "use_type": "avatar",
  "platform_description": "AI companion app",
  "expected_usage": "10K interactions/month"
}
GET /licensing/request/{id}

Check license request status (pending, approved, denied).

Revenue Reporting

Report usage data for royalty calculation. Required for licensed content.

POST /revenue/report

Report usage data for royalty calculation.

{
  "license_id": "lic_xxx",
  "period": "2025-01",
  "metrics": {
    "interactions": 45000,
    "unique_users": 1200,
    "revenue_generated": 450.00
  }
}
GET /revenue/balance

Check current balance and pending payouts to creators.

Enforcement Handling

Handle takedown requests and boxing notifications.

GET /enforcement/obligations

Check pending takedowns and grace periods.

Grace Period Flow

When someone boxes an identity that you're using:

  • Day 0: You receive boxing.created webhook
  • Day 1-30: Grace period - obtain license or prepare removal
  • Day 30: Content must be removed or licensed
  • After: Non-compliance reported; potential legal action

Webhook Implementation

Subscribe to events for real-time updates.

// Webhook handler
app.post('/webhooks/lmif', (req, res) => {
  const { event, data } = req.body;

  switch (event) {
    case 'boxing.created':
      // New boxing - start grace period
      startGracePeriod(data.identity_id, data.deadline);
      break;

    case 'boxing.grace_started':
      // Reminder: 30 days to comply
      notifyTeam(data);
      break;

    case 'license.approved':
      // License request approved
      activateLicense(data.license_id);
      break;

    case 'license.denied':
      // License denied - must remove content
      scheduleRemoval(data.identity_id);
      break;

    case 'payment.due':
      // Royalty payment needed
      processPayment(data.amount, data.recipient);
      break;
  }

  res.sendStatus(200);
});
Compliance is Protection

Proper enforcement handling protects you legally. Document all compliance actions for your records.