Complete a team SSO sign-in
const url = 'https://api.deploybase.eu/api/v1/api/v1/auth/sso/callback';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"intent_id":"example","token":"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/auth/sso/callback \ --header 'Content-Type: application/json' \ --data '{ "intent_id": "example", "token": "example" }'Verifies a Zitadel IdP intent, resolves which team’s provider produced it, and reports whether the person may sign in as a member of that team. Returns 201 when a member was provisioned just in time and 200 otherwise. Every refusal carries a stable code and a member-facing sentence; details.docs_url links the guide that explains the fix to a team admin. This endpoint never creates an organization and never matches an identity outside the resolved team (ADR-022). No authentication required; rate limited per IP.
Request Body
Section titled “ Request Body ”Completed IdP intent
object
IntentID is the Zitadel IdP intent id from the callback URL.
Token is that intent’s single-use token — a bearer credential. Never log it.
Example generated
{ "intent_id": "example", "token": "example"}Responses
Section titled “ Responses ”Signed in as an existing member
object
object
object
Email is the member’s address, for the post-login chrome.
Outcome is “linked”, “auto_linked” or “created”.
TeamID is the team signed into; the caller makes it the active team.
UserID is the Zitadel user to create a session for.
Example generated
{ "data": { "email": "example", "outcome": "example", "team_id": "example", "user_id": "example" }, "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}A new member was provisioned
object
object
object
Email is the member’s address, for the post-login chrome.
Outcome is “linked”, “auto_linked” or “created”.
TeamID is the team signed into; the caller makes it the active team.
UserID is the Zitadel user to create a session for.
Example generated
{ "data": { "email": "example", "outcome": "example", "team_id": "example", "user_id": "example" }, "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}SSO_NOT_A_MEMBER, SSO_CONNECTION_INACTIVE, SSO_JIT_DISABLED, SSO_EMAIL_UNVERIFIED, SSO_NO_EMAIL, SSO_ACCOUNT_IN_OTHER_TEAM or SSO_INTENT_INVALID
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}Rate limit exceeded
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}SSO_UNAVAILABLE
object
object
Example generated
{ "code": "example", "details": "example", "error": "example", "meta": { "request_id": "example", "timestamp": "example", "trace_id": "example" }}