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
/api/v1/school-branding
Returns a deterministic, paginated school collection.
| Query | Type | Purpose |
|---|---|---|
| q | string | Search name, common name, or city; 2–100 characters. |
| updated_since | date-time | Return records changed at or after an ISO 8601 timestamp. |
| has_branding | boolean | Filter schools that have any branding field, or none. |
| out_of_state | boolean | Include only Ohio or out-of-state opponents. |
| per_page | integer | 1–100 records; defaults to 50. |
| page | integer | Page number beginning at 1. |
/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.