{"revision":"9f11a31dd2951db0","language":"en","entry":{"id":"oidc-request","kind":"endpoint","group":"oidc","title":"Read a sign-in request","method":"GET","path":"/oidc/requests/{id}","paths":[],"summary":"The consent page's data: the app, whether a card vouches for it, the scopes, and the fields the consent text signs.","response":"The request as the server checked it.","parameters":[{"name":"id","in":"path","required":true,"description":"The request id: 43 characters from the consent page's address (`?req=`) or its meta element."}],"sample":"/oidc/requests/{id}","access":"private-code","base":"directory","notes":["Anyone with the id can read it, as anyone with the URL can open the page. No CORS."],"errors":["404 not_found","410 request_expired","429 rate_limited","500 internal_error","503 busy"],"related":["sign-in-with-veil"],"sections":[{"kind":"code","language":"shell","code":"curl -fsS 'https://veil.rip/oidc/requests/{id}'"}],"live":false,"responses":[{"status":200,"contentType":"application/json","description":"The request as the server checked it.","fields":[{"name":"id","type":"string","description":"The request id."},{"name":"issuer","type":"string","description":"https://veil.rip."},{"name":"client","type":"object","description":"{id, name, site, logo, verified, owner, dynamic, type}."},{"name":"redirectUri","type":"string","description":"Where the code goes."},{"name":"redirectHost","type":"string | null","description":"Its host, for the page."},{"name":"scopes","type":"array<string>","description":"In the order the consent signs them."},{"name":"prompt","type":"string | null","description":"The app's prompt."},{"name":"uiLocales","type":"string | null","description":"The app's ui_locales."},{"name":"askEveryTime","type":"boolean","description":"The redirect URI is on the loopback interface (a native app): the page asks for the click every time, even for an app the card approved."},{"name":"consent","type":"object","description":"{prefix, iss, client, redirect, scopes, nonce, state (SHA-256 hex or null), challenge, request}: the signed fields."},{"name":"createdAt","type":"string","description":"ISO 8601 UTC."},{"name":"expiresAt","type":"string","description":"30 minutes after."}]}],"responseObjects":[],"errorFormat":"json","errorDetails":[{"status":404,"code":"not_found","description":"The requested card, key, alias, code or resource was not found.","action":"Check the identifier. Temporary codes and previews may already have expired or been used.","scope":"endpoint"},{"status":410,"code":"request_expired","description":"The sign-in request was used or is older than 30 minutes.","action":"Go back to the app and start again.","scope":"endpoint"},{"status":429,"code":"rate_limited","description":"An anonymous, signed-request or API-key allowance was exceeded.","action":"Wait at least `Retry-After` seconds. Share a queue and retry budget across your workers.","scope":"common"},{"status":500,"code":"internal_error","description":"An unexpected server error occurred. Internal details are not returned.","action":"Retry reads with bounded backoff. Check write results before sending a new signed operation.","scope":"common"},{"status":503,"code":"busy","description":"The application has reached a temporary concurrency or database limit.","action":"Wait `Retry-After` seconds and retry with bounded backoff.","scope":"common"}],"responseHeaders":[{"name":"Content-Type","value":"application/json","description":"JSON, also for errors."},{"name":"Cache-Control","value":"no-store","description":"Private: never cached."}],"documentationUrl":"https://veil.rip/docs/oidc-request","supportsBrowserFetch":false,"browserMode":"local-or-server"}}