What to do in the first 10 minutes after your district is created.
When your Stripe payment completes, Pinnova auto-creates your district and emails
the admin a welcome link. Click it, pick a password, and you'll land on your
admin dashboard at https://{your-slug}.pinnovatms.com/admin.
From Admin → Users, invite the people who will use Pinnova daily. Roles:
When you invite someone, the API returns a one-time password. Share it securely (e.g. 1Password, Signal). They'll change it on first login.
Dispatcher → Buses → Import CSV. Column names we accept:
id, capacity, type, status,
driver_id, route_id, area, hub.
For routes, use Routes → Import CSV. Columns:
id, school, level, area,
hub.
Dispatcher → Dispatch Board → New Dispatch. Pick a bus, a
route, and a driver. Status goes from scheduled → running
→ completed. Drivers see it immediately in their mobile app.
Admin → Audit. Every parent lookup and every student-record read is
logged with the caller's IP, the subject, and the timestamp. Filter by event
(parent_lookup.rate_limited surfaces brute-force attempts) or by
date range. Retained for 7 years per FERPA.
# Auth — get a token
curl -XPOST https://{slug}.pinnovatms.com/api/auth/login \
-d '{"username":"admin","password":"..."}'
# List users in your district
curl -H 'Authorization: Bearer $TOKEN' \
https://{slug}.pinnovatms.com/api/tenant/admin/users
# Invite a dispatcher
curl -XPOST -H 'Authorization: Bearer $TOKEN' \
-d '{"username":"jane","role":"dispatcher","email":"jane@district.edu"}' \
https://{slug}.pinnovatms.com/api/tenant/admin/users
# Rolling audit view
curl -H 'Authorization: Bearer $TOKEN' \
'https://{slug}.pinnovatms.com/api/tenant/admin/audit?page=1&page_size=50'