OAuth Verify / Initialize OAuth authorization
/oauth/authorize/initStarts PKCE authorization for @keyra/web-sdk. Default scope is openid profile phone. Returns auth_request_id + authorize_url (HTTP 201).
Publishable client_id — Send publishable cp_* in JSON body. No secret.
Content-Type: application/json · required
client_idstringrequiredPublishable client id (cp_*)
code_challengestringrequiredPKCE S256 challenge
code_challenge_methodstringEnum: S256
modestringEnum: popup, redirect, auto
redirect_uristringrequiredExact registered callback URL
response_typestringEnum: code
scopestringstatestringrequiredCSRF opaque value; required by runtime
201 Authorization challenge created
auth_request_idstring (uuid)requiredauthorize_urlstring (uri)requiredexpires_inintegerrequiredChallenge TTL seconds (default 600)
400 Invalid request or redirect_uri
errorstringerror_descriptionstringvalidboolean401 Unknown publishable client
errorstringerror_descriptionstringvalidboolean| Error | HTTP | Meaning | Fix |
|---|---|---|---|
invalid_request | 400 | Missing client_id, redirect_uri, state, or code_challenge | Include all required PKCE start fields Diagnose → |
invalid_redirect_uri | 400 | redirect_uri not registered | Exact-match registered callback URL Diagnose → |
invalid_client | 401 | Unknown publishable client | Use a valid cp_* key for the project Diagnose → |
@keyra/web-sdk: createKeyraAuth(...).verify() / verifyWithPopup / verifyWithRedirect (SDK calls this endpoint internally)curl -X POST "https://auth.keyra.ie/oauth/authorize/init" \
-H "Content-Type: application/json" \
-d '{"client_id":"cp_test_xxxxxxxx","redirect_uri":"http://localhost:3000/auth/keyra/callback","state":"state_abc123","code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM","code_challenge_method":"S256","mode":"popup","scope":"openid profile phone"}'Response
{
"auth_request_id": "550e8400-e29b-41d4-a716-446655440000",
"authorize_url": "https://get-started.keyra.ie/oauth/authorize?auth_request_id=550e8400-e29b-41d4-a716-446655440000&mode=popup&scope=openid%20profile%20phone",
"expires_in": 600
}