API-ul Auth (OIDC)
Suprafața publică pentru integratori a auth.codai.ro: discovery, authorization code + PKCE, device flow, tokenuri, logout și /connect/key.
auth.codai.ro e un OpenID Provider standard; citește mai întâi /.well-known/openid-configuration și lasă biblioteca ta OIDC să conducă restul. Singurul endpoint specific codai e GET /connect/key: schimbi access token-ul pe o cheie de inferență cu scope-uri (base_url: https://ai.codai.ro/v1). Sunt listate doar endpoint-urile pe care le apelează un integrator — UI-ul de login/consimțământ, API-ul de cont și rutele aplicației native sunt interne first-party. Erorile OIDC sunt { "error", "error_description" }. Fluxul pas cu pas: fluxul connect, scope-uri: scope-uri.
Corpul răspunsului
application/json
curl -X GET "https://example.com/.well-known/openid-configuration"{ "issuer": "https://auth.codai.ro", "authorization_endpoint": "http://example.com", "token_endpoint": "http://example.com", "userinfo_endpoint": "http://example.com", "jwks_uri": "http://example.com", "introspection_endpoint": "http://example.com", "revocation_endpoint": "http://example.com", "device_authorization_endpoint": "http://example.com", "end_session_endpoint": "http://example.com", "registration_endpoint": "http://example.com", "response_types_supported": [ "string" ], "grant_types_supported": [ "string" ], "token_endpoint_auth_methods_supported": [ "string" ], "scopes_supported": [ "string" ], "claims_supported": [ "string" ], "code_challenge_methods_supported": [ "S256" ], "acr_values_supported": [ "string" ], "subject_types_supported": [ "string" ], "id_token_signing_alg_values_supported": [ "string" ], "backchannel_logout_supported": true}Corpul răspunsului
application/json
curl -X GET "https://example.com/jwks"{ "keys": [ { "kty": "RSA", "kid": "string", "use": "sig", "alg": "RS256", "n": "string", "e": "string" } ]}Parametri query
Trebuie să fie code.
Valoare în
- "code"
Identificatorul clientului înregistrat.
Unul dintre redirect URI-urile înregistrate ale clientului (potrivire exactă).
uriScope-uri separate prin spațiu; trebuie să includă openid.
Valoare CSRF opacă, întoarsă la redirect. Puternic recomandată.
BASE64URL(SHA-256(code_verifier)) — PKCE este obligatoriu pentru fiecare client.
Doar S256 este suportat.
Valoare în
- "S256"
Protecție anti-replay, copiată în ID token.
Valorile standard OIDC pentru prompt (login, consent, none, select_account).
Contextul de autentificare cerut; passkey/mfa declanșează step-up.
Indicator de resursă RFC 8707. https://ai.codai.ro/mcp produce un access token JWT cu scope-ul mcp.
uriExtensie codai — signup deschide direct formularul de înregistrare.
Valoare în
- "signup"
Extensie codai — cod de recomandare (codai.ro/r/<username>, 3–20 caractere [A-Za-z0-9_]) precompletat la înregistrare.
^[A-Za-z0-9_]{3,20}$Limba paginilor de login. Implicit din cookie-ul NEXT_LOCALE, apoi din Accept-Language.
Valoare în
- "ro"
- "en"
Corpul răspunsului
text/html
curl -X GET "https://example.com/auth?response_type=code&client_id=metu&redirect_uri=http%3A%2F%2Fexample.com&scope=openid+email+profile+inference+keys%3Amanage&code_challenge=string&code_challenge_method=S256"Corpul cererii
application/x-www-form-urlencoded
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
curl -X POST "https://example.com/device/auth" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'client_id=codai-cli'{ "device_code": "string", "user_code": "BCDF-GHJK", "verification_uri": "https://auth.codai.ro/device", "verification_uri_complete": "http://example.com", "expires_in": 0, "interval": 5}Autorizare
clientSecretBasic Autentificare client client_secret_basic. client_secret_post și private_key_jwt merg în body-ul formularului; clienții publici trimit doar client_id.
În: header
Corpul cererii
application/x-www-form-urlencoded
Definiții TypeScript
Folosește tipul request body în TypeScript.
Body form-encoded. Câmpurile depind de grant_type; credențialele clientului depind de metoda lui de autentificare.
Corpul răspunsului
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'grant_type=authorization_code'{ "access_token": "string", "token_type": "Bearer", "expires_in": 3600, "scope": "string", "id_token": "string", "refresh_token": "string"}Autorizare
clientSecretBasic Autentificare client client_secret_basic. client_secret_post și private_key_jwt merg în body-ul formularului; clienții publici trimit doar client_id.
În: header
Corpul cererii
application/x-www-form-urlencoded
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
curl -X POST "https://example.com/token/introspection" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'token=string'{ "active": true, "scope": "string", "client_id": "string", "sub": "string", "token_type": "string", "exp": 0, "iat": 0, "iss": "http://example.com", "aud": "string", "jti": "string"}Autorizare
clientSecretBasic Autentificare client client_secret_basic. client_secret_post și private_key_jwt merg în body-ul formularului; clienții publici trimit doar client_id.
În: header
Corpul cererii
application/x-www-form-urlencoded
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
curl -X POST "https://example.com/token/revocation" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'token=string'Autorizare
bearerAuth Access token OAuth emis de /token (folosit de /me și /connect/key).
În: header
Corpul răspunsului
application/json
application/json
curl -X GET "https://example.com/me"{ "sub": "string", "email": "[email protected]", "email_verified": true, "name": "string", "picture": "http://example.com"}Parametri query
ID token-ul emis anterior acestui client; identifică sesiunea și clientul.
URI-ul de redirect post-logout înregistrat al clientului.
uriValoare opacă adăugată la redirect-ul post-logout.
Obligatoriu când lipsește id_token_hint și se dă un post_logout_redirect_uri.
Parametru standard OIDC; interfața codai citește în schimb ?lang=ro|en.
Corpul răspunsului
text/html
text/html
curl -X GET "https://example.com/session/end""string"Autorizare
bearerAuth Access token OAuth emis de /token (folosit de /me și /connect/key).
În: header
Parametri header
Doar clienți first-party — eticheta (≤ 60 caractere) a cheii per dispozitiv; implicit Desktop.
length <= 60Corpul răspunsului
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/connect/key"{ "api_key": "codai_xxxxxxxxxxxxxxxxxxxxxxxx", "api_key_id": "b0dd218e-3bcf-4bdb-a1e3-0689d60a8afd", "base_url": "https://ai.codai.ro/v1", "model": "codai", "already_issued": true}curl -X OPTIONS "https://example.com/connect/key"Corpul răspunsului
application/json
curl -X GET "https://example.com/health"{ "ok": true}Corpul răspunsului
application/json
application/json
curl -X GET "https://example.com/health/ready"{ "ok": true, "checks": { "db": { "ok": true, "error": "string" } }}