RtU Integration
Right-to-Use (RtU) validation checks whether content at a given URL can be used for a specific purpose. It evaluates copyright, licensing, and Terms of Service policies in real-time and returns a clear verdict.
How it works
- Submit one or more URLs with a usage purpose
- Souma checks each URL against known policies
- You receive a verdict: PERMITTED, NOT_PERMITTED, or UNCLEAR
- Each result includes a confidence score, plain-language reasoning, and policy references
Basic validation
REST API
curl -X POST https://api.souma.com/v1/validate \
-H "Authorization: Bearer sk_prod_xxx" \
-H "Content-Type: application/json" \
-d '{
"validations": [
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://example.com/article",
"purpose": "AI model training"
}
]
}'Response
{
"results": [
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"validation_id": "val_abc123",
"status": "COMPLETED",
"url": "https://example.com/article",
"usage_purpose": "AI model training",
"allowed_for_use": "PERMITTED",
"confidence_score": 0.92,
"llm_reasoning": "The site's Terms of Service explicitly permit...",
"conditions": ["Attribution required"],
"policy_source_urls": ["https://example.com/terms"],
"created_at": "2026-03-20T10:30:00Z",
"completed_at": "2026-03-20T10:30:02Z"
}
]
}Verdicts
| Verdict | Description |
|---|---|
PERMITTED | Content can be used for the stated purpose |
NOT_PERMITTED | Content cannot be used - policy prohibits it |
UNCLEAR | No clear policy found - manual review recommended |
Batch validation
Submit multiple URLs in a single request:
curl -X POST https://api.souma.com/v1/validate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"validations": [
{
"request_id": "id-1",
"url": "https://example.com/page-1",
"purpose": "Data analytics"
},
{
"request_id": "id-2",
"url": "https://example.com/page-2",
"purpose": "Data analytics"
}
]
}'Real-time streaming
For long-running validations, use Server-Sent Events to get results as they complete:
const ids = result.results.map((r) => r.validation_id)
const params = ids.map((id) => `validation_ids=${id}`).join('&')
const eventSource = new EventSource(
`/api/validate/stream?${params}`
)
eventSource.addEventListener('result', (event) => {
const updated = JSON.parse(event.data)
console.log(updated.url, updated.allowed_for_use)
})
eventSource.addEventListener('done', () => {
eventSource.close()
})Validation statuses
| Status | Description |
|---|---|
PENDING | Validation is still processing |
COMPLETED | Validation finished successfully |
ERROR_NOT_FOUND | Content not found at URL |
ERROR_NO_POLICY | No applicable policy found |
ERROR_TIMEOUT | Validation timed out |
ERROR_NETWORK | Network error reaching the URL |
ERROR_INVALID_URL | URL format is invalid |
Next steps
- Dashboard Overview - Monitor compliance and manage your account