Academic verification API · since 2020

Student? Prove it in one login.

Their university already knows who’s a student, so we just ask it. Two API calls for you, one login they already know. No PDFs, no manual review, no bill.

Start building

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
  • and many more

Trusted by teams at

HubSpotDelivery HeroH&MKaDeWe
How it works

Don’t ask the student. Ask the university.

  1. 1

    You create a verification

    One API call. No SAML, no certificates, no metadata. You get back a link.

  2. 2

    They log in at their university

    The same account and MFA they use every day. Passwords never reach us, or you.

  3. 3

    The university answers

    A signed assertion becomes a stable user ID and an institution. In seconds, not days.

  • Per-verification fee
  • Setup fee
  • Seat licence
  • Sales call

$0. Their university already paid for the hard part.

Why it’s free
The difference

Stop playing PDF detective.

Is this font… edited?

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
Seconds, not days

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
The integration

Two calls.
Zero SAML.

No certificates, no federation metadata, no XML. The institution signs the login; the API hands you clean JSON.

POST /v2/auth/verification201
$ curl -X POST https://api.studid.io/v2/auth/verification \
    -H "Content-Type: application/json" \
    -d '{"secretToken":"…","redirectUrl":"…","serviceName":"My App"}'
GET /v2/auth/verification/{id}200
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.

AI integration

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. Copy the prompt, grab a coffee.

prompt.txt
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.
Live demo

Try it with your own university.

Go on, log in. You’ll see exactly what an integrator receives — and then we forget it. No signup, no install, the real flow.

Test mode runs against the public DFN test IdP, where you choose what to release.

Real login, live API
studid.io/searchlive

Popular