Skip to content

Publish your discovery document

Serve JSON at GET https://sms.example.edu/.well-known/sdi-configuration, unauthenticated and cacheable:

{
"sdi_version": "1.0",
"protocol_versions": ["1.0"],
"issuer": "https://sms.example.edu",
"authorization_endpoint": "https://sms.example.edu/oauth/authorize",
"token_endpoint": "https://sms.example.edu/oauth/token",
"registration_endpoint": "https://sms.example.edu/oauth/register",
"jwks_uri": "https://sms.example.edu/oauth/jwks",
"grant_types_supported": ["authorization_code", "client_credentials", "refresh_token"],
"code_challenge_methods_supported": ["S256"],
"scopes_supported": ["sdi.enrollment.write", "sdi.enrollment.read"],
"languages_supported": ["en-GB", "fr-FR", "sw-KE"],
"default_language": "en-GB",
"capabilities": [
{
"name": "enrollment-sync",
"contract_versions": ["1.0"],
"schema_endpoint": "https://sms.example.edu/sdi/enrollment-sync/schema",
"ingest_endpoint": "https://sms.example.edu/sdi/enrollment-sync/records",
"scopes": ["sdi.enrollment.write", "sdi.enrollment.read"]
}
]
}

Tips:

  • Only advertise grants you actually support. If you cannot do interactive authorization, omit authorization_endpoint/registration_endpoint and support client_credentials only.
  • issuer must be stable — Consumers use it (and jwks_uri) to verify your signed document-resolution calls (§7).
  • Add a new capability by appending to capabilities; never repurpose an existing entry.
  • Declare languages_supported/default_language (BCP-47 language-REGION) if you localize field labels and error text (§4.1, and §5.1 below). If you serve only one language, set default_language to it and list only that one (or omit languages_supported).