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 aboveHTML 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.