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_endpointand supportclient_credentialsonly. issuermust be stable — Consumers use it (andjwks_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-47language-REGION) if you localize field labels and error text (§4.1, and §5.1 below). If you serve only one language, setdefault_languageto it and list only that one (or omitlanguages_supported).