Skip to content

Single sign-on

A workspace's single sign-on through its own identity provider: connection (null when it has none: its id, protocol oidc, oauth2 or saml, config with the protocol's fields, has_client_secret, certificates by SHA-256 fingerprint for SAML, allow_join, tested_at and tested_by, when the first person signed in through it), required (whether members must sign in through it), you_linked (whether you have), identities (the people linked: username, subject and email at the provider, linked_at, last_used_at), and service_provider: the addresses to give the provider (redirect_uri for OpenID Connect and OAuth 2.0; entity_id, acs_url and metadata_url for SAML; sign_in_url, where people start).

GET/workspaces/{workspace}/sso

The client secret is never returned. Owners only, as people.

  • Authentication: Required. Send an access token as Authorization: Bearer.
  • MCP tool: workspace with action get_sso, and the same inputs
  • Scope: An access token needs workspace:read.
Name Type Required Description
workspace string Yes The workspace’s name, e.g. “acme”.
curl https://api.g1t.sh/workspaces/flagon-io/sso \
-H "Authorization: Bearer $G1T_TOKEN"

A successful request answers 200 with:

{
"slug": "flagon-io",
"connection": {
"id": "sso_01m54gq2v0e8e3c5yj6k9t1r2a",
"protocol": "saml",
"config": {
"idp_entity_id": "http://www.okta.com/exk1a2b3c4d5",
"idp_sso_url": "https://flagon.okta.com/app/flagon_g1t/exk1a2b3c4d5/sso/saml",
"certificates": [
"MIICsDCCAZigAwIBAgICA+gwDQYJKoZIhvcNAQELBQAw"
]
},
"has_client_secret": false,
"certificates": [
{
"fingerprint": "3F:A1:9C:22:7B:E0:44:D1:8A:6F:0B:93:12:C7:5E:AA:41:08:DD:6C:39:F2:B5:7E:90:1A:C3:58:24:EF:6B:0D"
}
],
"allow_join": true,
"tested_at": "2026-10-17T09:12:44.000Z",
"tested_by": "syntaqx",
"created_at": "2026-10-17T09:05:10.000Z",
"updated_at": "2026-10-17T09:05:10.000Z"
},
"required": true,
"you_linked": true,
"identities": [
{
"username": "syntaqx",
"subject": "chase@flagon.io",
"email": "chase@flagon.io",
"linked_at": "2026-10-17T09:12:44.000Z",
"last_used_at": "2026-10-17T14:02:31.000Z"
}
],
"service_provider": {
"redirect_uri": "https://g1t.sh/auth/sso/wsp_01m3xbtsa9d3b4c5e6f7g8h9j0/callback",
"entity_id": "https://g1t.sh/auth/sso/wsp_01m3xbtsa9d3b4c5e6f7g8h9j0/metadata",
"acs_url": "https://g1t.sh/auth/sso/wsp_01m3xbtsa9d3b4c5e6f7g8h9j0/saml",
"metadata_url": "https://g1t.sh/auth/sso/wsp_01m3xbtsa9d3b4c5e6f7g8h9j0/metadata",
"sign_in_url": "https://g1t.sh/auth/sso/flagon-io",
"scim_url": "https://api.g1t.sh/scim/v2/wsp_01m3xbtsa9d3b4c5e6f7g8h9j0"
}
}

A failed request answers with one of these statuses and a body like {"error": {"code": "not_found", "message": "Repository not found."}}. See errors.

Status Code When
401 unauthenticated A token is required, or the one sent is not valid.
403 forbidden The token is valid but not allowed to do this, such as a member-only change, or a token without the scope it needs.
404 not_found It does not exist, or you cannot see it.
422 invalid The input is not valid. message says which field and why.