Skip to main content
API v1 JSON over HTTPS

Ohio School Branding API

Retrieve school names, mascots, colors, and normalized logo assets for Ohio sports applications. Logo URLs are absolute and available as PNG or validated SVG files. SVG assets reject scripts, event handlers, external references, document types, and imported or executable styles.

Public access

No token is required. Requests are limited to 30 per minute per IP address, with up to 100 schools per page.

High-volume access

Approved integrations use a dedicated Sanctum bearer token with only the school-branding:read ability. It is unlimited on these branding endpoints and rejected everywhere else.

Quick start

curl "https://ohsportsrank.com/api/v1/school-branding?q=Napoleon&has_branding=1"

For an approved integration, send the token only in the HTTPS authorization header:

curl -H "Authorization: Bearer YOUR_TOKEN" \
  "https://ohsportsrank.com/api/v1/school-branding?per_page=100"

Endpoints

GET /api/v1/school-branding

Returns a deterministic, paginated school collection.

QueryTypePurpose
qstringSearch name, common name, or city; 2–100 characters.
updated_sincedate-timeReturn records changed at or after an ISO 8601 timestamp.
has_brandingbooleanFilter schools that have any branding field, or none.
out_of_statebooleanInclude only Ohio or out-of-state opponents.
per_pageinteger1–100 records; defaults to 50.
pageintegerPage number beginning at 1.
GET /api/v1/school-branding/{stateId}

Returns one school by its stable Ohio Sports Rankings state ID, or HTTP 404.

School response

{
  "state_id": 1080,
  "name": "Napoleon High School",
  "common_name": "Napoleon",
  "city": "Napoleon, OH",
  "nickname": "Wildcats",
  "girls_nickname": "Wildcats",
  "out_of_state": false,
  "colors": { "primary": "#0A1633", "secondary": "#FFFFFF" },
  "logos": {
    "primary": "https://.../school-logos/example.png",
    "alternate": null
  },
  "logo_formats": { "primary": "png", "alternate": null },
  "updated_at": "2026-08-26T09:00:00-04:00"
}

Missing colors and logos are returned as null. Collection responses wrap schools in data and include standard Laravel links and meta pagination objects.

Incremental synchronization

Save the greatest updated_at received, then request updated_since on the next run. Follow every links.next URL before advancing the saved timestamp.

Errors and limits

Validation errors use HTTP 422, missing schools use 404, and rate limits use 429 with Retry-After and JSON retry_after values.

Logo usage

School names, mascots, and logos may be protected by their respective owners. API availability does not grant trademark or merchandising rights; consumers are responsible for lawful use and attribution requirements.