Contracts
The Content Lake is a publishing-oriented service. Every document ingested into the Content Lake must be associated with a contract. Contracts define who holds which rights, what can be done with the content, and how royalties are structured. This model ensures that rights, distribution rules, and compensation terms are always available alongside the content itself.
Why Every Document Needs a Contract
Even internal, non-commercial content needs a contract. The contract is a primary component of the ingestion process, not an afterthought. By requiring a contract at ingest time, the platform can enforce territorial restrictions, format permissions, and usage terms from the moment content enters the system. Without a contract, the platform cannot determine whether content may be distributed, translated, or used in derivative works.
Agents
Contracts involve multiple parties (agents), each with a defined role:
| Role | Description |
|---|---|
| Author | The content creator |
| Rights Holder | Entity that owns the intellectual property rights |
| Publisher | Entity responsible for publishing and distribution |
| Distributor | Entity that distributes content through specific channels |
Each agent has an identifier, name, email, and role. A contract can have multiple agents. Additional metadata can be attached to any agent via an extensible metadata field.
Territorial Rights
Territorial rights define where content can be distributed using ISO 3166-1 alpha-2 country codes.
- Worldwide -- a
worldwideflag grants rights globally, with optional exclusions - Specific territories -- list individual territory codes
- Verdicts -- each territorial right has a status:
PERMITTED,PROHIBITED, orCONDITIONAL
Examples
Worldwide rights with no restrictions:
Worldwide rights excluding China and India:
Single territory (United Kingdom only):
Format Rights
Format rights control which output formats are permitted.
| Format | Description |
|---|---|
| Physical print distribution | |
| EBOOK | Digital ebook formats |
| AUDIO | Audiobook formats |
| VIDEO | Video content |
| INTERACTIVE | Interactive/HTML experiences |
| SUBSCRIPTION | Subscription platform access |
Each format right has a status (PERMITTED or PROHIBITED),
optional territory restrictions, and optional constraints via
extensible metadata.
Examples
Digital-only distribution (ebook and subscription permitted, print prohibited):
{
"format_rights": [
{
"format": "EBOOK",
"status": "PERMITTED"
},
{
"format": "SUBSCRIPTION",
"status": "PERMITTED"
},
{
"format": "PRINT",
"status": "PROHIBITED"
}
]
}
Subscription-only with US territory restriction:
{
"format_rights": [
{
"format": "SUBSCRIPTION",
"status": "PERMITTED",
"territory_codes": ["US"]
}
]
}
Usage Terms
Usage terms are modelled after ONIX-PL and define how content can be used:
| Usage Type | Description |
|---|---|
| ACCESS | How content can be accessed (stream, download) |
| COPY | Whether content can be copied |
| DISTRIBUTE | Distribution permissions |
| Print permissions | |
| DISPLAY | Display permissions |
| LEND | Lending permissions |
| TRANSLATE | Translation permissions |
| CREATE_DERIVATIVE | Derivative work permissions |
Each usage term has a status (PERMITTED, PROHIBITED, or
CONDITIONAL), and can optionally specify:
- User types --
INDIVIDUAL,INSTITUTIONAL, orCOMMERCIAL - Purpose --
EDUCATIONAL,COMMERCIAL,PERSONAL, orRESEARCH - Method --
DOWNLOAD,STREAM,EMBED,VIEW_ONLINE, orAPI_ACCESS - Condition --
ATTRIBUTION_REQUIRED,DRM_REQUIRED,APPROVAL_REQUIRED, orGEOGRAPHIC_RESTRICTION - Quantity limit -- maximum number of permitted actions
- Exception -- free-text exception description
Example
A typical ebook usage terms configuration combining multiple terms:
{
"usage_terms": [
{
"usage_type": "ACCESS",
"status": "PERMITTED",
"user_types": ["INDIVIDUAL", "INSTITUTIONAL"],
"method": "DOWNLOAD"
},
{
"usage_type": "DISTRIBUTE",
"status": "PERMITTED",
"purpose": "COMMERCIAL"
},
{
"usage_type": "COPY",
"status": "PERMITTED",
"quantity_limit": 3
},
{
"usage_type": "TRANSLATE",
"status": "PROHIBITED"
},
{
"usage_type": "CREATE_DERIVATIVE",
"status": "CONDITIONAL",
"condition": "APPROVAL_REQUIRED"
}
]
}
Royalty Structure
Contracts define how content creators are compensated. Monetary amounts use micros (1,000,000 micros = 1.00 in the specified currency) and percentages use basis points (100 bps = 1%).
| Type | Description |
|---|---|
| FREE | No royalty -- open access or promotional |
| FIXED_FEE | One-time or recurring fixed payment |
| REVENUE_SHARE | Percentage of revenue |
| TIERED_REVENUE_SHARE | Percentage that changes at revenue thresholds |
| ADVANCE_PLUS_ROYALTY | Upfront advance, then percentage after earn-out |
Payment frequency can be MONTHLY, QUARTERLY, or ANNUALLY.
Examples
Revenue share at 15%:
{
"royalty": {
"type": "REVENUE_SHARE",
"currency": "GBP",
"revenue_share_bps": 1500,
"payment_frequency": "QUARTERLY"
}
}
Advance plus royalty (5,000 GBP advance, then 10% after earn-out):
{
"royalty": {
"type": "ADVANCE_PLUS_ROYALTY",
"currency": "GBP",
"advance_amount_micros": 5000000000,
"revenue_share_bps": 1000,
"payment_frequency": "QUARTERLY"
}
}
Duration
| Field | Description |
|---|---|
effective_date |
When the contract takes effect |
expiry_date |
When the contract expires |
perpetual |
If true, no expiry |
auto_renew_months |
Automatic renewal period |
notice_period_days |
Required notice for termination |
continuing_access |
Post-expiry access terms |
Continuing Access
When a contract expires, continuing access terms can grant limited access for a defined period. This is common for institutional subscriptions. Continuing access specifies:
- Whether post-cancellation access is granted
- The access period in days
- Which formats remain available during the access period
- A human-readable description of the terms
Contract State Machine
DRAFT ──────▶ ACTIVE ──────▶ EXPIRED
│ │
│ ├──▶ SUSPENDED
│ │ │
│ │ ├──▶ ACTIVE
│ │ │
│ │ └──▶ TERMINATED
│ │
│ └──▶ TERMINATED
│
└──────▶ TERMINATED
| State | Description |
|---|---|
| DRAFT | Contract is being assembled |
| ACTIVE | Contract is in force |
| SUSPENDED | Temporarily paused (e.g. dispute) |
| EXPIRED | Reached expiry date |
| TERMINATED | Ended early or after suspension |
Valid transitions:
- DRAFT may move to ACTIVE or TERMINATED
- ACTIVE may move to SUSPENDED, EXPIRED, or TERMINATED
- SUSPENDED may move back to ACTIVE or to TERMINATED
- EXPIRED and TERMINATED are final states
Immutability
Once content has been ingested with a contract, the association cannot be changed. If contract terms change, create a new contract version and re-import the relevant content with the new terms.
For example, a provider may not have allowed their content to be used by AI systems but now does. Rather than modifying the existing contract, create a new version that reflects the updated terms and re-ingest the affected documents.
Rights Checking
The platform precomputes a rights summary for each document based on its contract. This summary aggregates territorial rights, format rights, and usage terms into a single view that downstream services query at runtime.
When a service needs to check whether a document can be used in a specific context (territory, format, usage type), it queries the rights summary rather than parsing the full contract. The check evaluates dimensions in order:
- Duration -- is the contract active or in continuing access?
- Territory -- is the territory permitted?
- Format -- is the format permitted (including per-format territory overrides and continuing access restrictions)?
- Usage -- is the usage type permitted for the given user type, purpose, and method?
If any dimension is denied, the overall result is denied. If any dimension is conditional, the overall result is conditional with merged conditions. Rights verdicts are:
- PERMITTED -- the action is allowed
- PROHIBITED -- the action is not allowed
- CONDITIONAL -- allowed with restrictions (check the condition)
Permission Tags
Key contractual terms are stamped as tags on documents so they can be filtered at query time.
Derived Content
| Tag | Description |
|---|---|
contract/[allow,deny]/derive-content |
Allow or deny all derived content |
contract/[allow,deny]/derive-content/translation |
Translation into any language |
contract/[allow,deny]/derive-content/translation/[language] |
Translation into a specific language |
contract/[allow,deny]/derive-content/ai/training |
AI model training |
contract/[allow,deny]/derive-content/ai/inference |
AI inference (RAG, MCP) |
Product Restrictions
| Tag | Description |
|---|---|
contract/[allow,deny]/product/[manual,automation] |
Manual or automated product inclusion |
contract/[allow,deny]/product/format |
Like-for-like format use |
contract/[allow,deny]/product/format/[type] |
Specific format (newsletter, book, audio) |
When contract/deny/product/automation is set, the content will
not be automatically included in products. Features such as
automatically creating translated versions or alternative product
formats will not be available. This should only be used when
licensing restrictions are so ambiguous that there is no way to
confidently model content usage.
Distribution Restrictions
| Tag | Description |
|---|---|
contract/[allow,deny]/distribution/channel/[channel] |
Distribution channel (e.g. amazon, oreilly) |
contract/[allow,deny]/distribution/country/[country] |
Country-specific distribution |
contract/[allow,deny]/distribution/language/[language] |
Language-specific distribution |
Contract Events
Contract lifecycle events are published to the platform event bus:
contract.v1.created-- includes contract reference and associated document identifierscontract.v1.state_changed-- published when a contract transitions between lifecycle states (e.g. DRAFT to ACTIVE)contract.v1.rights_changed-- published when rights-affecting fields are modified (territorial, format, royalty, usage, or document associations)
Events are published per document, so a contract covering three documents will produce three events for each lifecycle change. Tags added or removed as a result of contract changes are reflected in the corresponding document tag events.
Worked Examples
Standard Book Deal
Author grants worldwide ebook rights at 15% revenue share, print rights UK-only, no audio. Three-year term with auto-renewal.
{
"agents": [
{
"role": "AUTHOR",
"name": "Jane Smith",
"email": "jane@example.com"
},
{
"role": "PUBLISHER",
"name": "Packt Publishing",
"email": "contracts@packt.com"
}
],
"territorial_rights": [
{
"worldwide": true,
"status": "PERMITTED"
}
],
"format_rights": [
{
"format": "EBOOK",
"status": "PERMITTED"
},
{
"format": "PRINT",
"status": "PERMITTED",
"territory_codes": ["GB"]
},
{
"format": "AUDIO",
"status": "PROHIBITED"
}
],
"usage_terms": [
{
"usage_type": "ACCESS",
"status": "PERMITTED",
"user_types": ["INDIVIDUAL", "INSTITUTIONAL"]
},
{
"usage_type": "DISTRIBUTE",
"status": "PERMITTED",
"purpose": "COMMERCIAL"
},
{
"usage_type": "TRANSLATE",
"status": "PROHIBITED"
}
],
"royalty": {
"type": "REVENUE_SHARE",
"currency": "GBP",
"revenue_share_bps": 1500,
"payment_frequency": "QUARTERLY"
},
"duration": {
"effective_date": "2025-01-01T00:00:00Z",
"expiry_date": "2028-01-01T00:00:00Z",
"auto_renew_months": 36,
"notice_period_days": 90
}
}
Open Access Title
Freely available content: perpetual, worldwide, all formats, no royalty.
{
"agents": [
{
"role": "AUTHOR",
"name": "Open Source Project",
"email": "oss@example.com"
}
],
"territorial_rights": [
{
"worldwide": true,
"status": "PERMITTED"
}
],
"format_rights": [
{
"format": "EBOOK",
"status": "PERMITTED"
},
{
"format": "PRINT",
"status": "PERMITTED"
},
{
"format": "AUDIO",
"status": "PERMITTED"
},
{
"format": "VIDEO",
"status": "PERMITTED"
},
{
"format": "INTERACTIVE",
"status": "PERMITTED"
},
{
"format": "SUBSCRIPTION",
"status": "PERMITTED"
}
],
"usage_terms": [
{
"usage_type": "ACCESS",
"status": "PERMITTED"
},
{
"usage_type": "COPY",
"status": "PERMITTED"
},
{
"usage_type": "DISTRIBUTE",
"status": "PERMITTED"
},
{
"usage_type": "TRANSLATE",
"status": "PERMITTED"
},
{
"usage_type": "CREATE_DERIVATIVE",
"status": "PERMITTED"
}
],
"royalty": {
"type": "FREE"
},
"duration": {
"perpetual": true
}
}
Expired Contract with Continuing Access
Institutional subscription expired, but one year of ebook access continues.
{
"agents": [
{
"role": "PUBLISHER",
"name": "Packt Publishing",
"email": "contracts@packt.com"
},
{
"role": "DISTRIBUTOR",
"name": "University Library Network",
"email": "licensing@uln.example.com"
}
],
"territorial_rights": [
{
"worldwide": true,
"status": "PERMITTED"
}
],
"format_rights": [
{
"format": "EBOOK",
"status": "PERMITTED"
},
{
"format": "VIDEO",
"status": "PERMITTED"
}
],
"usage_terms": [
{
"usage_type": "ACCESS",
"status": "PERMITTED",
"user_types": ["INSTITUTIONAL"],
"method": "VIEW_ONLINE"
}
],
"royalty": {
"type": "FIXED_FEE",
"currency": "GBP",
"fixed_amount_micros": 50000000000,
"payment_frequency": "ANNUALLY"
},
"duration": {
"effective_date": "2024-01-01T00:00:00Z",
"expiry_date": "2026-01-01T00:00:00Z",
"continuing_access": {
"post_cancellation_access": true,
"access_period_days": 365,
"permitted_formats": ["EBOOK"],
"description": "Ebook-only access for 12 months post-expiry"
}
}
}
During the continuing access period, only ebook access is available. Video access (which was permitted during the active contract) is denied until a new contract is established.
Default Contracts
Several default contracts are provided out of the box. Ensure these align with your legal team's understanding of the licenses before using them.