Verification is integrated. Now implement the full permissions system: licensing requests, revenue reporting, and enforcement handling.
When an identity is claimed or boxed, you may need to request a license. Some creators auto-approve, others require manual review.
Licensing Endpoints
/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": "..."
} /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"
} /licensing/request/{id} Check license request status (pending, approved, denied).
Revenue Reporting
Report usage data for royalty calculation. Required for licensed content.
/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
}
} /revenue/balance Check current balance and pending payouts to creators.
Enforcement Handling
Handle takedown requests and boxing notifications.
/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);
}); Proper enforcement handling protects you legally. Document all compliance actions for your records.
Related Documentation
Learn more about licensing, webhooks, and compliance in our full documentation.