Preview an identity provider's configuration
const url = 'https://api.deploybase.eu/api/v1/api/v1/team/sso/discover';const options = { method: 'POST', headers: {Authorization: '<Authorization>', 'Content-Type': 'application/json'}, body: '{"issuer":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.deploybase.eu/api/v1/api/v1/team/sso/discover \ --header 'Authorization: <Authorization>' \ --header 'Content-Type: application/json' \ --data '{ "issuer": "example" }'Fetches and validates an issuer’s OpenID discovery document and reports what it found: the canonical issuer, the detected provider flavour, the endpoints, the profile mapping we would default to, and any warnings. Writes nothing and creates nothing, so it is safe to call repeatedly while an admin corrects an address. This is the first step of setting a connection up: it lets the admin confirm we reached the right provider before they produce a client id and secret. Team admin or owner.
Authorizations
Section titled “ Authorizations ”Request Body
Section titled “ Request Body ”The issuer address to preview
object
Example generated
{ "issuer": "example"}Responses
Section titled “ Responses ”OK
object
object
object
The endpoints we found. Shown back to the admin as evidence that we reached the right provider, which is the whole point of a preview step: a reachable issuer at the wrong address is the failure a list of endpoints catches and a green tick does not. UserinfoEndpoint is empty for a provider that has none.
Issuer is the canonical issuer the document reports, which is the value that should be submitted to Create — not necessarily the one the admin typed.
Provider is the detected flavour: generic_oidc, keycloak or authentik. It picks the setup copy and prefills the connection name.
RecommendedIsIDTokenMapping is what Create would choose if the admin expressed no preference, so the form can show the resolved value rather than an empty control.
RedirectURI is the callback to register in the IdP, repeated here so the preview step can show it without a second call.
SuggestedIssuer is set only when the typed address and the document disagree in a way we can fix for them, which in practice is a trailing slash. Empty otherwise.
SuggestedName is a sensible prefill for the connection name, from the flavour. The admin owns the final value — it becomes the label on their sign-in button.
Warnings are the same advisories Create would return, in the same three-field shape, seen before anything is created rather than after.
object
Example generated
{ "data": { "authorization_endpoint": "example", "issuer": "example", "jwks_uri": "example", "provider": "example", "recommended_is_id_token_mapping": true, "redirect_uri": "example", "suggested_issuer": "example", "suggested_name": "example", "token_endpoint": "example", "userinfo_endpoint": "example", "warnings": [ { "code": "example", "docs_url": "example", "message": "example" } ] }, "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Bad Request
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Unauthorized
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Forbidden
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}INVALID_INPUT, SSO_ISSUER_INVALID, SSO_ISSUER_UNREACHABLE, SSO_ISSUER_MISMATCH or SSO_DISCOVERY_INCOMPLETE
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}