Skip to main content

Reference

Schema reference

Every field, every type, every document, in one place.

This page is a flat reference for every type in the protocol. Conceptual prose lives in the Protocol specification section. Use this page to check exact field names, types, required-ness, and the accepted shape of an object.

OLPNEntity (root of olpn.json)

{
  version:           string?,          // "0.9"
  last_updated:      string?,          // ISO-8601
  entity_type:       "person" | "organization",  // required
  network_id:        string,           // required. "§:entity:{domain}"
  details:           Details?,
  properties:        Property[]?,
  credentials:       Credential[]?,
  other_connections: Connection[]?,
}

Details

{
  name:               string?,
  domain:             string?,
  email:              string?,
  location:           string?,
  legal_name:         string?,
  established:        string?,         // year or date
  registered_in:      string?,         // jurisdiction
  legal_entity_type:  string?,         // "LLC", "PLLC", etc.
  description:        string?,
}

Property

{
  id:           string,                // "§:property:{domain}"
  name:         string?,
  url:          string?,               // https URL
  type:         string?,                // free-form classification
  description:  string?,
  ownership:    PropertyOwner[]?,
}

PropertyOwner = {
  network_id: string,                  // "§:entity:{domain}"
}

Credential

{
  id:           string?,               // "@user@domain[/path]"
  title:        string?,
  type:         string?,                // "Employment", "Member", etc.
  description:  string?,
  property:     Property?,              // nested issuer property
  dataset:      Dataset?,
  profile_url:  string?,                // URL to subject on issuer site
}

Dataset = {
  id:    string,                       // "§:dataset:{domain}/{path}"
  name:  string,
}

Connection

{
  id: string,                          // URL for rel=me verification
}

PropertyDocument (olpn-property.json body)

{
  olpn_property: {
    id:           string,              // "§:property:{domain}"
    name:         string?,
    url:          string?,
    type:         string?,
    description:  string?,
    ownership:    PropertyOwner[]?,
  }
}

CredentialDocument (olpn-credential.json body)

{
  olpn_entity_id:  string,             // subject's network_id. required for verification.
  olpn_credential: Credential,         // body as defined above
}

Identifier patterns

network_id      := "§:entity:" domain
property_id     := "§:property:" domain
dataset_id      := "§:dataset:" domain "/" path
credential_id   := "@" username "@" domain ( "/" path )?

domain   := /^[a-z0-9.-]+\.[a-z]{2,}$/i (no scheme, no path beyond /)
username := /^[A-Za-z0-9_.-]+$/
path     := /^[A-Za-z0-9_.-]+(\/[A-Za-z0-9_.-]+)*$/

HTTP response conventions

GET https://{domain}/olpn.json
  → 200 application/json  (canonical)
  → 404                    (not found; fall back to HTML embed)
  → any other status       (treated as not found)

GET https://{domain}/olpn-property.json
  → same as above

GET https://{issuer-domain}/{username}/olpn-credential.json
  → same as above

HTML embed element IDs

  • <script id="olpn-hub" type="application/json"> — entity document fallback
  • <script id="olpn-property" type="application/json"> — property document fallback
  • <script id="olpn-credential" type="application/json"> — credential document fallback

Both attribute orders accepted. Both single and double quotes accepted. No other variations.

Case sensitivity

Identifier comparisons (network_id, property_id, credential_id) are case-insensitive. Render with the author's original casing, but compare with strings.EqualFold or equivalent.

Timeouts

Reference resolver fetch timeout: 10 seconds per document. No retries.