{"openapi":"3.1.0","info":{"title":"OAuth & OIDC API","version":"1.0.0","description":"Authorize, token, userinfo, discovery, and JWKS endpoints for auth flows Exported as an OpenAPI 3.1 document from Fake API for Devs."},"servers":[{"url":"https://fakeapifordevs.vercel.app","description":"Fake API for Devs production endpoint"}],"tags":[{"name":"OAuth & OIDC","description":"Authorize, token, userinfo, discovery, and JWKS endpoints for auth flows"}],"paths":{"/api/oauth/authorize":{"get":{"tags":["OAuth & OIDC"],"summary":"GET /api/oauth/authorize?client_id=demo-app&redirect_uri=https://example.com/callback&response_type=code&scope=openid+profile+email","operationId":"oauth_get_oauth_authorize","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1},"description":"1-indexed page number for collection endpoints."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"description":"Page size for collection endpoints."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Optional text search filter where supported."},{"name":"delay","in":"query","schema":{"type":"number","minimum":0,"maximum":10},"description":"Optional artificial delay in seconds."},{"name":"simulate_error","in":"query","schema":{"type":"string","enum":["rate_limit","server_error","not_found","unauthorized","forbidden","bad_request","service_unavailable","timeout","malformed"]},"description":"Force a mock failure scenario for resilience testing."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Not found"},"429":{"description":"Rate limited"},"500":{"description":"Internal server error"}}}},"/api/oauth/token":{"post":{"tags":["OAuth & OIDC"],"summary":"POST /api/oauth/token","operationId":"oauth_post_oauth_token","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"grant_type":"authorization_code","code":"code_mock_demo","client_id":"demo-app","redirect_uri":"https://example.com/callback"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Not found"},"429":{"description":"Rate limited"},"500":{"description":"Internal server error"}}}},"/api/oauth/userinfo":{"get":{"tags":["OAuth & OIDC"],"summary":"GET /api/oauth/userinfo","operationId":"oauth_get_oauth_userinfo","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1},"description":"1-indexed page number for collection endpoints."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"description":"Page size for collection endpoints."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Optional text search filter where supported."},{"name":"delay","in":"query","schema":{"type":"number","minimum":0,"maximum":10},"description":"Optional artificial delay in seconds."},{"name":"simulate_error","in":"query","schema":{"type":"string","enum":["rate_limit","server_error","not_found","unauthorized","forbidden","bad_request","service_unavailable","timeout","malformed"]},"description":"Force a mock failure scenario for resilience testing."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Not found"},"429":{"description":"Rate limited"},"500":{"description":"Internal server error"}}}},"/api/oauth/.well-known/openid-configuration":{"get":{"tags":["OAuth & OIDC"],"summary":"GET /api/oauth/.well-known/openid-configuration","operationId":"oauth_get_oauth_well_known_openid_configuration","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1},"description":"1-indexed page number for collection endpoints."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"description":"Page size for collection endpoints."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Optional text search filter where supported."},{"name":"delay","in":"query","schema":{"type":"number","minimum":0,"maximum":10},"description":"Optional artificial delay in seconds."},{"name":"simulate_error","in":"query","schema":{"type":"string","enum":["rate_limit","server_error","not_found","unauthorized","forbidden","bad_request","service_unavailable","timeout","malformed"]},"description":"Force a mock failure scenario for resilience testing."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Not found"},"429":{"description":"Rate limited"},"500":{"description":"Internal server error"}}}},"/api/oauth/.well-known/jwks.json":{"get":{"tags":["OAuth & OIDC"],"summary":"GET /api/oauth/.well-known/jwks.json","operationId":"oauth_get_oauth_well_known_jwks_json","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1},"description":"1-indexed page number for collection endpoints."},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10},"description":"Page size for collection endpoints."},{"name":"q","in":"query","schema":{"type":"string"},"description":"Optional text search filter where supported."},{"name":"delay","in":"query","schema":{"type":"number","minimum":0,"maximum":10},"description":"Optional artificial delay in seconds."},{"name":"simulate_error","in":"query","schema":{"type":"string","enum":["rate_limit","server_error","not_found","unauthorized","forbidden","bad_request","service_unavailable","timeout","malformed"]},"description":"Force a mock failure scenario for resilience testing."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request"},"401":{"description":"Unauthorized"},"404":{"description":"Not found"},"429":{"description":"Rate limited"},"500":{"description":"Internal server error"}}}}}}