DataLicenser

Technical reference / v1

Inspect the model before you trust the gate.

Architecture, integration, delivery, and allocation notes for teams evaluating DataLicenser.

/01

robots.txt is a declaration, not an access control

robots.txt communicates crawl preferences to user agents that choose to follow it. It does not authenticate a crawler, return a denial response, or connect access to commercial status.

DataLicenser converts publisher policy and live license state into a decision at the CDN or local server layer.

User-agent: GPTBot
Disallow: /

# Declared policy above
# Enforced decision below
license.active && identity.verified → ALLOW
otherwise                           → DENY
/02

Signed local rule cache

The server layer reads a versioned JSON configuration from local disk. The control plane updates it in the background; the request path does not wait for that network sync.

{
  "publisher_id": "pub_…",
  "version": 42,
  "expires_at": 1786536000,
  "crawler_policy": { "GPTBot": "deny" },
  "active_licenses": ["lic_…"],
  "signature": "hmac-sha256:…"
}

The design target is a policy refresh approximately every 15 minutes. If the signature is invalid or the cache expires beyond its configured grace policy, known crawler routes fail closed. Human requests continue through the publisher’s normal stack.

NoteLatency varies by runtime, storage, and integration point. Sub-millisecond targets require production benchmarking on every supported stack.
/03

Cloudflare setup

  1. Create a token scoped to Zone Read and the dedicated rules resource used by DataLicenser.
  2. Select the zone. DataLicenser verifies read access before proposing any rule.
  3. Review the generated crawler expression. Existing rules are shown but not edited.
  4. Publish the rule, then run the verification request from Setup.
NoteNever provide a Global API Key. Production authorization should use the narrow scopes shown during connection.
/04

Akamai setup

  1. Create an API client with read access to the target property and scoped write access to its security configuration.
  2. Enter the EdgeGrid credentials through the encrypted connection flow.
  3. Select a staging configuration and review the proposed behavior.
  4. Verify on Akamai staging before promotion through your existing activation process.
/05

PHP / WordPress engine

  1. Create and verify the domain from the publisher setup screen.
  2. Download datalicenser.php and store the issued site key and API secret outside the web root.
  3. Load the engine with PHP's auto_prepend_file setting.
  4. Schedule php /path/datalicenser.php --flush every five minutes.
NoteOnly use the package and credentials shown inside your authenticated setup screen. A modified or unsigned local rule cache invokes fail-closed AI-bot enforcement.
/06

Generic NGINX / PHP

The local verifier reads cached policy before protected crawler content is returned. It checks policy expiry and signature, crawler identity, and any presented license token.

location / {
  auth_request /_datalicenser/verify;
  try_files $uri $uri/ /index.php?$args;
}

location = /_datalicenser/verify {
  internal;
  proxy_pass http://127.0.0.1:8787/verify;
}

Reference packages are not yet published. The setup flow will provide versioned snippets and checksums when available.

/07

HMAC verification model

Policy files and licensed-access tokens use separate scoped secrets. HMAC is symmetric: any system with a given secret can compute a signature, so storage, rotation, and scope form part of the security boundary.

Access tokens are short-lived and bound to the publisher, license, request class, timestamp, and nonce. The verifier reconstructs the canonical message and compares signatures in constant time.

canonical = method + "\n" + path_class + "\n" +
            publisher_id + "\n" + license_id + "\n" +
            timestamp + "\n" + nonce

expected = HMAC-SHA256(site_secret, canonical)
allow = timing_safe_equal(expected, presented)

Expired, malformed, replayed, or invalid tokens fail closed for licensed crawler routes.

/08

Structured licensed delivery

When the license, publisher scope, intended use, and token are valid, a supported integration can return Markdown or JSON derived from the canonical CMS record. Advertising, navigation, and unrelated page chrome are excluded.

GET /licensed/v1/content/{publisher}/{content_id}
Authorization: DL-HMAC credential=lab_…, signature=…
Accept: text/markdown | application/json

Structured delivery is available only for content and uses explicitly covered by the active agreement. It is not a general extraction endpoint.

/09

Telemetry and data handling

Field classPurposeDefault handling
Decision metadataEnforcement and auditTimestamp, outcome, rule version
License referencesEntitlement reconciliationOpaque IDs; no contract text at edge
Content referencesDemand attributionCanonical ID; no body in the event
Usage bandsBilling reconciliationCount and byte band; configurable
Page contentNoneNot collected in telemetry
Query strings / cookiesNoneExcluded by default

Crawler events are designed to buffer locally and flush approximately every five minutes. Final retention windows and data-processing terms will be documented before production onboarding.

/10

Direct deal controls

Every licensed AI lab maps to a publisher-approved agreement and a separate technical entitlement. The access record includes:

  • Buyer: the named legal entity and verified technical identities.
  • Scope: covered content, permitted use, formats, territory, and any training or retrieval restrictions.
  • Commercial state: effective date, expiry, renewal, suspension, and termination.
  • Exclusivity: optional, explicit, and limited to the scope the publisher approves.

A publisher can authorize several labs at once. Each receives different credentials and can be revoked without changing any other lab’s state.

NoteA user-agent header is not proof of identity. Supported lab verification combines published IP information or reverse DNS with short-lived signed credentials. Exact controls depend on the identity material each lab makes available.