Academic verification API · since 2020
Student? Prove it in one login.
Studid confirms students, faculty and staff straight with their university. Two API calls for you, one familiar login for them. No documents, no manual review.
Acme Notes
Student plan · 50% off
Confirm you’re a student to unlock the discount.
Verify with your universityVerified student
Technische Universität Berlin
- affiliations
- ["student"]
- authIdentifier
- "MCE6NXEQ3FC3…"
- entityId
- "idp.tu-berlin.de"
Thousands of institutions across 70+ national federations, including
- Technische Universität Berlin
- Ludwig-Maximilians-Universität München
- Universität Heidelberg
- RWTH Aachen University
- Technische Universität München
- Universität Hamburg
- Karlsruher Institut für Technologie
- Freie Universität Berlin
- and many more
Trusted by teams at
Don’t ask the student. Ask the university.
- 1
You create a verification
One API call. No SAML, no certificates, no metadata. You get back a link.
- 2
They log in at their university
The same account and MFA they use every day. Passwords never reach us, or you.
- 3
The university answers
A signed assertion becomes a stable user ID and an institution. In seconds, not days.
Documents vs. one university login
The old way
Uploading documents
- Upload a transcript or student ID
- Wait days for someone to review it
- Hope nobody edited the PDF
- Store sensitive personal files
With Studid
One university login
- One login at the university they already use
- A verified result in seconds
- Signed and confirmed by the institution
- Nothing sensitive to store
Two calls.
Zero SAML.
No certificates, no federation metadata, no XML. The institution signs the login; the API hands you clean JSON.
$ curl -X POST https://api.studid.io/v2/auth/verification \
-H "Content-Type: application/json" \
-d '{"secretToken":"…","redirectUrl":"…","serviceName":"My App"}'- authIdentifier
- "MCE6NXEQ3FC3PU7XQ2WJ5ZKAB4YHT2RD"
- authIdentifierType
- "pairwise-id"
- entityId
- "https://idp.tu-berlin.de/shibboleth"
- affiliations
- ["student", "member"]
- entityIdalways
- The institution the user authenticated at. On its own, this proves affiliation, even with no stable user ID.
- authIdentifierwhen released
- A privacy-safe, stable ID for the user: a per-service pseudonym or a persistent identifier. null when the institution only issues a transient ID.
- affiliationsusually included
- Their role, such as student, staff or faculty. Usually included; if an institution doesn’t release it, the list is empty and the login still counts.
No persistent ID? The verification still counts. A null authIdentifier doesn’t mean the login failed: the user still authenticated at a real institution. Use entityId for eligibility decisions and bind the result to your own session for continuity.
Or let your coding agent write it.
Two endpoints, an OpenAPI spec, an llms.txt and a plain-markdown guide. Everything Claude Code, Cursor or Copilot needs to get it right on the first pass.
Read https://studid.io/llms.txt and add academic verification with Studid.
1. On signup, POST https://api.studid.io/v2/auth/verification with { secretToken, redirectUrl, serviceName } and redirect the user to the returned link.
2. After they return to redirectUrl, poll GET https://api.studid.io/v2/auth/verification/{id} with header "Authorization: Bearer <secretToken>" and use session.authIdentifier as the user's ID.
3. Reject session.test === true in production.Try it with your own university.
Sign in with your own account and see exactly what an integrator receives. No signup, no install, the real flow.
Test mode runs against the public DFN test IdP, where you choose what to release.
Popular