Add "Continue with Turtini" to your website
Turtini is a standard OpenID Connect (OIDC) identity provider, so you can add a "Continue with Turtini" button to any website. Unlike a generic login button, your users bring a real, portable identity they own — one account for life that carries their verified Turtini credentials. The same person is the same stable ID (`sub` claim) on every site, every visit.
The discovery URL (point any OIDC library at this):
```
https://api.turtini.com/.well-known/openid-configuration
```
It advertises the authorization endpoint (https://turtini.com/oauth/authorize), token endpoint, /userinfo endpoint, and the JWKS URL for verifying tokens. Supported: response_type `code`, grant types `authorization_code` + `refresh_token`, PKCE with `S256`, and id_tokens signed RS256 (verify against the JWKS — every OIDC library does this out of the box).
The three sign-in scopes:
• `openid` — required; it's what turns the OAuth flow into an OIDC flow and mints the id_token. Shares the user's unique Turtini ID.
• `profile` — adds name and profile photo.
• `email` — adds email address and `email_verified`.
Request `openid profile email` for a typical sign-in.
Two ways to integrate:
1. Drop-in button (snappy popup, no backend needed) — load the SDK and render a button:
```html
<script src="https://turtini.com/turtini-signin.js"></script>
<div id="turtini-btn"></div>
<script>
Turtini.init({ clientId: "your-client-id", scope: "openid profile email" })
Turtini.renderButton("#turtini-btn", {
onSuccess: ({ idToken, claims }) => {
// claims = { sub, email, name, picture, ... }
},
})
</script>
```
The popup keeps your page loaded and returns the result via postMessage. `renderButton` also shows the browser-native One Tap ("Continue as …") to signed-in Turtini users where FedCM is available, and falls back to the button everywhere else. The SDK handles PKCE for you (public clients, no secret in the browser).
2. Any standard OIDC library (NextAuth / Auth.js, openid-client, Passport, react-oidc-context) — point it at the issuer:
```js
providers: [{
id: "turtini", name: "Turtini", type: "oidc",
issuer: "https://api.turtini.com",
clientId: process.env.TURTINI_CLIENT_ID,
clientSecret: process.env.TURTINI_CLIENT_SECRET,
authorization: { params: { scope: "openid profile email" } },
}]
```
Getting credentials:
To get a `client_id` + `client_secret` (and register your redirect URI), email [email protected] with your site's name, homepage, redirect URI(s), and privacy-policy URL. You can browse the full developer story — SDK, CLI, MCP server, and the platform primitives you inherit — at the public /developers portal.