{"success":true,"title":"Nedo Local Auth Sample.","status":200,"code":null,"info":null,"data":{"service":"Nedo.AspNet.Authentication.Local Sample","version":"2.0.0","database":"PostgreSQL (docker compose up -d)","endpoints":{"swagger":"GET  /swagger                 (interactive API explorer with JWT auth)","login":"POST /auth/login              { username, password }","register":"POST /auth/register           { username, password, email?, displayName? }","verify_email":"POST /auth/verify-email       { token }","forgot_password":"POST /auth/forgot-password    { email }","reset_password":"POST /auth/reset-password     { token, newPassword }","google":"POST /auth/google             { idToken }","microsoft":"POST /auth/microsoft          { idToken }","apple":"POST /auth/apple              { idToken, user? }","github_start":"GET  /auth/github/start       (popup; ends in postMessage)","facebook":"POST /auth/facebook           { accessToken }","keycloak_start":"GET  /auth/keycloak/start     (popup; ends in postMessage)","refresh":"POST /auth/refresh            { refreshToken }","logout":"POST /auth/logout             { refreshToken }","change_password":"POST /auth/change-password    { currentPassword, newPassword }","external_logins":"GET  /account/external-logins (requires Bearer token)","unlink_external":"DEL  /account/external-logins/{provider}","sessions":"GET  /account/sessions        (requires Bearer token)","revoke_session":"DEL  /account/sessions/{id}","revoke_all":"POST /account/sessions/revoke-all","revoke_others":"POST /account/sessions/revoke-others (\"Sign out all others\")","list_emails":"GET  /account/emails           (Bearer)","add_email":"POST /account/emails           { address }","verify_email_row":"POST /account/emails/{id}/verify { token }","resend_verify":"POST /account/emails/{id}/resend-verification","make_primary":"POST /account/emails/{id}/make-primary","remove_email":"DEL  /account/emails/{id}","magic_link_req":"POST /auth/magic-link/request  { email }","magic_link_red":"POST /auth/magic-link/redeem   { token }","passkey_reg_beg":"POST /auth/passkey/register/begin   (Bearer)","passkey_reg_fin":"POST /auth/passkey/register/finish  (Bearer)","passkey_ass_beg":"POST /auth/passkey/assertion/begin","passkey_ass_fin":"POST /auth/passkey/assertion/finish","passkeys_list":"GET  /account/passkeys         (Bearer)","passkey_remove":"DEL  /account/passkeys/{id}    (Bearer)","me":"GET  /me                      (requires Bearer token)","session":"GET  /session                 (requires Bearer token)"}}}