1+ {
2+ "openapi" : " 3.1.0" ,
3+ "info" : {
4+ "title" : " fullstack-starter-api" ,
5+ "version" : " 0.1.0"
6+ },
7+ "paths" : {
8+ "/health" : {
9+ "get" : {
10+ "summary" : " Health Check" ,
11+ "description" : " Detailed health check endpoint with service statuses." ,
12+ "operationId" : " health_check_health_get" ,
13+ "responses" : {
14+ "200" : {
15+ "description" : " Successful Response" ,
16+ "content" : {
17+ "application/json" : {
18+ "schema" : {
19+ "$ref" : " #/components/schemas/HealthResponse"
20+ }
21+ }
22+ }
23+ }
24+ }
25+ }
26+ },
27+ "/health/live" : {
28+ "get" : {
29+ "summary" : " Liveness Check" ,
30+ "description" : " Simple liveness probe for Kubernetes." ,
31+ "operationId" : " liveness_check_health_live_get" ,
32+ "responses" : {
33+ "200" : {
34+ "description" : " Successful Response" ,
35+ "content" : {
36+ "application/json" : {
37+ "schema" : {
38+ "additionalProperties" : {
39+ "type" : " string"
40+ },
41+ "type" : " object" ,
42+ "title" : " Response Liveness Check Health Live Get"
43+ }
44+ }
45+ }
46+ }
47+ }
48+ }
49+ },
50+ "/health/ready" : {
51+ "get" : {
52+ "summary" : " Readiness Check" ,
53+ "description" : " Readiness probe - checks if app can serve traffic." ,
54+ "operationId" : " readiness_check_health_ready_get" ,
55+ "responses" : {
56+ "200" : {
57+ "description" : " Successful Response" ,
58+ "content" : {
59+ "application/json" : {
60+ "schema" : {
61+ "additionalProperties" : {
62+ "type" : " string"
63+ },
64+ "type" : " object" ,
65+ "title" : " Response Readiness Check Health Ready Get"
66+ }
67+ }
68+ }
69+ }
70+ }
71+ }
72+ },
73+ "/api/auth/login" : {
74+ "post" : {
75+ "tags" : [
76+ " authentication"
77+ ],
78+ "summary" : " Login" ,
79+ "description" : " OAuth login endpoint.\n\n Verify OAuth token, create/update user, and issue JWE tokens." ,
80+ "operationId" : " login_api_auth_login_post" ,
81+ "requestBody" : {
82+ "content" : {
83+ "application/json" : {
84+ "schema" : {
85+ "$ref" : " #/components/schemas/OAuthLoginRequest"
86+ }
87+ }
88+ },
89+ "required" : true
90+ },
91+ "responses" : {
92+ "200" : {
93+ "description" : " Successful Response" ,
94+ "content" : {
95+ "application/json" : {
96+ "schema" : {
97+ "$ref" : " #/components/schemas/TokenResponse"
98+ }
99+ }
100+ }
101+ },
102+ "422" : {
103+ "description" : " Validation Error" ,
104+ "content" : {
105+ "application/json" : {
106+ "schema" : {
107+ "$ref" : " #/components/schemas/HTTPValidationError"
108+ }
109+ }
110+ }
111+ }
112+ }
113+ }
114+ },
115+ "/api/auth/refresh" : {
116+ "post" : {
117+ "tags" : [
118+ " authentication"
119+ ],
120+ "summary" : " Refresh Token" ,
121+ "description" : " Refresh access token using refresh token." ,
122+ "operationId" : " refresh_token_api_auth_refresh_post" ,
123+ "requestBody" : {
124+ "content" : {
125+ "application/json" : {
126+ "schema" : {
127+ "$ref" : " #/components/schemas/RefreshTokenRequest"
128+ }
129+ }
130+ },
131+ "required" : true
132+ },
133+ "responses" : {
134+ "200" : {
135+ "description" : " Successful Response" ,
136+ "content" : {
137+ "application/json" : {
138+ "schema" : {
139+ "$ref" : " #/components/schemas/TokenResponse"
140+ }
141+ }
142+ }
143+ },
144+ "422" : {
145+ "description" : " Validation Error" ,
146+ "content" : {
147+ "application/json" : {
148+ "schema" : {
149+ "$ref" : " #/components/schemas/HTTPValidationError"
150+ }
151+ }
152+ }
153+ }
154+ }
155+ }
156+ },
157+ "/api/auth/logout" : {
158+ "post" : {
159+ "tags" : [
160+ " authentication"
161+ ],
162+ "summary" : " Logout" ,
163+ "description" : " Logout endpoint.\n\n Client should remove tokens from localStorage." ,
164+ "operationId" : " logout_api_auth_logout_post" ,
165+ "responses" : {
166+ "204" : {
167+ "description" : " Successful Response"
168+ }
169+ }
170+ }
171+ }
172+ },
173+ "components" : {
174+ "schemas" : {
175+ "HTTPValidationError" : {
176+ "properties" : {
177+ "detail" : {
178+ "items" : {
179+ "$ref" : " #/components/schemas/ValidationError"
180+ },
181+ "type" : " array" ,
182+ "title" : " Detail"
183+ }
184+ },
185+ "type" : " object" ,
186+ "title" : " HTTPValidationError"
187+ },
188+ "HealthResponse" : {
189+ "properties" : {
190+ "status" : {
191+ "type" : " string" ,
192+ "enum" : [
193+ " healthy" ,
194+ " degraded" ,
195+ " unhealthy"
196+ ],
197+ "title" : " Status"
198+ },
199+ "version" : {
200+ "type" : " string" ,
201+ "title" : " Version" ,
202+ "default" : " 0.1.0"
203+ },
204+ "services" : {
205+ "additionalProperties" : {
206+ "$ref" : " #/components/schemas/ServiceStatus"
207+ },
208+ "type" : " object" ,
209+ "title" : " Services"
210+ }
211+ },
212+ "type" : " object" ,
213+ "required" : [
214+ " status" ,
215+ " services"
216+ ],
217+ "title" : " HealthResponse" ,
218+ "description" : " Health check response with detailed service statuses."
219+ },
220+ "OAuthLoginRequest" : {
221+ "properties" : {
222+ "provider" : {
223+ "type" : " string" ,
224+ "enum" : [
225+ " google" ,
226+ " github" ,
227+ " facebook"
228+ ],
229+ "title" : " Provider"
230+ },
231+ "access_token" : {
232+ "type" : " string" ,
233+ "title" : " Access Token"
234+ },
235+ "email" : {
236+ "type" : " string" ,
237+ "title" : " Email"
238+ },
239+ "name" : {
240+ "anyOf" : [
241+ {
242+ "type" : " string"
243+ },
244+ {
245+ "type" : " null"
246+ }
247+ ],
248+ "title" : " Name"
249+ }
250+ },
251+ "type" : " object" ,
252+ "required" : [
253+ " provider" ,
254+ " access_token" ,
255+ " email"
256+ ],
257+ "title" : " OAuthLoginRequest" ,
258+ "description" : " OAuth login request."
259+ },
260+ "RefreshTokenRequest" : {
261+ "properties" : {
262+ "refresh_token" : {
263+ "type" : " string" ,
264+ "title" : " Refresh Token"
265+ }
266+ },
267+ "type" : " object" ,
268+ "required" : [
269+ " refresh_token"
270+ ],
271+ "title" : " RefreshTokenRequest" ,
272+ "description" : " Refresh token request."
273+ },
274+ "ServiceStatus" : {
275+ "properties" : {
276+ "status" : {
277+ "type" : " string" ,
278+ "enum" : [
279+ " healthy" ,
280+ " unhealthy"
281+ ],
282+ "title" : " Status"
283+ },
284+ "latency_ms" : {
285+ "anyOf" : [
286+ {
287+ "type" : " number"
288+ },
289+ {
290+ "type" : " null"
291+ }
292+ ],
293+ "title" : " Latency Ms"
294+ },
295+ "error" : {
296+ "anyOf" : [
297+ {
298+ "type" : " string"
299+ },
300+ {
301+ "type" : " null"
302+ }
303+ ],
304+ "title" : " Error"
305+ }
306+ },
307+ "type" : " object" ,
308+ "required" : [
309+ " status"
310+ ],
311+ "title" : " ServiceStatus" ,
312+ "description" : " Individual service health status."
313+ },
314+ "TokenResponse" : {
315+ "properties" : {
316+ "access_token" : {
317+ "type" : " string" ,
318+ "title" : " Access Token"
319+ },
320+ "refresh_token" : {
321+ "type" : " string" ,
322+ "title" : " Refresh Token"
323+ },
324+ "token_type" : {
325+ "type" : " string" ,
326+ "title" : " Token Type" ,
327+ "default" : " bearer"
328+ }
329+ },
330+ "type" : " object" ,
331+ "required" : [
332+ " access_token" ,
333+ " refresh_token"
334+ ],
335+ "title" : " TokenResponse" ,
336+ "description" : " Token response."
337+ },
338+ "ValidationError" : {
339+ "properties" : {
340+ "loc" : {
341+ "items" : {
342+ "anyOf" : [
343+ {
344+ "type" : " string"
345+ },
346+ {
347+ "type" : " integer"
348+ }
349+ ]
350+ },
351+ "type" : " array" ,
352+ "title" : " Location"
353+ },
354+ "msg" : {
355+ "type" : " string" ,
356+ "title" : " Message"
357+ },
358+ "type" : {
359+ "type" : " string" ,
360+ "title" : " Error Type"
361+ }
362+ },
363+ "type" : " object" ,
364+ "required" : [
365+ " loc" ,
366+ " msg" ,
367+ " type"
368+ ],
369+ "title" : " ValidationError"
370+ }
371+ }
372+ }
373+ }
0 commit comments