Skip to content

Instantly share code, notes, and snippets.

@Stroniax
Last active November 7, 2025 21:49
Show Gist options
  • Select an option

  • Save Stroniax/b0e3d0bb24818e0243d72b6aa21d5611 to your computer and use it in GitHub Desktop.

Select an option

Save Stroniax/b0e3d0bb24818e0243d72b6aa21d5611 to your computer and use it in GitHub Desktop.
powerschool-schemas
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/navigation-pages.schema.json",
"title": "Navigation Pages Schema",
"type": "object",
"properties": {
"pages": {
"type": "array",
"description": "Root element, expected to exist by the parser. Holds all Navigation/PageCatalog JSON elements.",
"items": { "$ref": "#/$defs/page" }
}
},
"required": ["pages"],
"$defs": {
"page": {
"type": "object",
"properties": {
"htmlID": {
"type": "string",
"description": "The ID included on the element in the HTML. Must be unique across all records in the DB."
},
"title": {
"type": "string",
"description": "The name of the page, will be the text displayed in the link in the UI."
},
"iconName": {
"type": ["string", "null"],
"description": "Name of the PDS icon to be displayed for the Category. (App Nav view only)"
},
"sortOrder": {
"type": "integer",
"description": "Used to order the links in the navigation. Core links start at 100 and increment by 100."
},
"pageURL": {
"type": ["string", "null"],
"pattern": "^/admin.*",
"description": "The URL to the Page. Must begin with '/admin'. PS-HTML tags are supported."
},
"originalParentUrl": {
"type": ["string", "null"],
"description": "URL(s) of the original parent link(s) from older navigation structure."
},
"districtLevelContext": {
"type": ["integer", "null"],
"enum": [0, 1, 2],
"description": "0 = both School and District, 1 = School only, 2 = District only. Default is 0."
},
"contextType": {
"type": ["string", "null"],
"enum": ["main", "student", "staff"],
"description": "Determines the Navigation Context. Supported: main, student, staff."
},
"requiredContext": {
"type": ["string", "null"],
"enum": ["student", "staff"],
"description": "Specifies whether a context selection is required before visiting the page."
},
"version": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+(?:\\.\\d+)?$",
"description": "Version of the link, e.g. '23.5.0.1'. Used to determine updates."
},
"children": {
"type": "array",
"items": { "$ref": "#/$defs/page" },
"description": "Array of child Navigation/PageCatalog elements."
},
"parentHTMLID": {
"type": ["string", "null"],
"description": "htmlID of an existing Category this link belongs to. Not used if defined within a parent’s children array."
},
"isNewTab": {
"type": ["boolean", "null"],
"description": "If true, opens the page in a new browser tab."
},
"isLandingPage": {
"type": ["boolean", "null"],
"description": "If true, page acts as a landing page containing links to child pages."
},
"checkParams": {
"type": ["boolean", "null"],
"description": "If true, query parameters are included in the active link check."
}
},
"required": ["htmlID", "title", "sortOrder", "version"],
"additionalProperties": false
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment