Skip to main content

Protocol specification

Property document (olpn-property.json)

The per-site record that confirms which entities own a given property.

A property is a domain or site an entity claims ownership of. The property document at https://{property-domain}/olpn-property.json is the site's side of that claim: it names the entities that own it. Two-way ownership verification requires both the entity (via its olpn.json properties[]) and the property (via its olpn-property.json ownership[]) to name each other.

Shape

{
  "olpn_property": {
    "id": "§:property:example.com",
    "name": "Example Law",
    "url": "https://example.com",
    "type": "Law Firm Website",
    "description": "The firm's public website.",
    "ownership": [
      { "network_id": "§:entity:example.com" }
    ]
  }
}

Fields

olpn_property.id (string, required)

Property identifier, §:property:{domain}. The {domain} should match the host serving the document.

HTTPS URL to the property's public-facing home page. Used by the resolver to link out from the verified property card.

Human-readable name. Shown on search results pages.

olpn_property.type (string, optional)

Free-form classification. Common values in existing deployments:

  • Website — generic personal or professional site
  • Law Firm Website — firm homepage
  • Protocol Site — sites that host protocol infrastructure (olpn.org itself)
  • Newsletter — a Substack-style publication
  • Profile — a profile page on a larger platform (contributor profiles, etc.)

olpn_property.description (string, optional)

Free-form description, one or two sentences.

olpn_property.ownership (array, required for verification)

An array of PropertyOwner objects. Each has a single field:

  • network_id (string) — the OLPN entity ID of an owner.

A property can be owned by more than one entity. Each entity's olpn.json must list this property in its properties[], and this document's ownership[] must list that entity, for the ownership claim to verify.

Minimum viable document

{
  "olpn_property": {
    "id": "§:property:example.com",
    "ownership": [
      { "network_id": "§:entity:example.com" }
    ]
  }
}

Serving rules

  • Path: exactly /olpn-property.json at the property's domain.
  • Content-Type: application/json.
  • HTTP status: 200.
  • CORS: no specific requirement.

Multi-owner properties

A firm website owned by three partners would list all three in ownership[]:

{
  "olpn_property": {
    "id": "§:property:smithjonesdoe.com",
    "name": "Smith Jones Doe LLP",
    "url": "https://smithjonesdoe.com",
    "type": "Law Firm Website",
    "ownership": [
      { "network_id": "§:entity:smith.law" },
      { "network_id": "§:entity:jones.law" },
      { "network_id": "§:entity:doe.law" }
    ]
  }
}

Each partner's olpn.json needs to include §:property:smithjonesdoe.com in properties[] for their individual ownership claim to verify. Partners who don't list it are still named in ownership[] but won't verify from the resolver's perspective.