@djangocfg/api 2.1.360 → 2.1.362

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,927 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Django CFG API",
5
+ "version": "1.0.0",
6
+ "description": "RESTful API with modern architecture"
7
+ },
8
+ "paths": {
9
+ "/cfg/totp/backup-codes/": {
10
+ "get": {
11
+ "operationId": "cfg_totp_backup_codes_retrieve",
12
+ "description": "Get backup codes status for user.",
13
+ "tags": [
14
+ "cfg_totp_backup_codes"
15
+ ],
16
+ "security": [
17
+ {
18
+ "apiKeyAuth": []
19
+ },
20
+ {
21
+ "jwtAuthWithLastLogin": []
22
+ }
23
+ ],
24
+ "responses": {
25
+ "200": {
26
+ "content": {
27
+ "application/json": {
28
+ "schema": {
29
+ "$ref": "#/components/schemas/BackupCodesStatus"
30
+ }
31
+ }
32
+ },
33
+ "description": ""
34
+ }
35
+ },
36
+ "x-async-capable": false
37
+ }
38
+ },
39
+ "/cfg/totp/backup-codes/regenerate/": {
40
+ "post": {
41
+ "operationId": "cfg_totp_backup_codes_regenerate_create",
42
+ "description": "Regenerate backup codes.\n\nRequires TOTP code for verification.\nInvalidates all existing codes.",
43
+ "tags": [
44
+ "cfg_totp_backup_codes"
45
+ ],
46
+ "requestBody": {
47
+ "content": {
48
+ "application/json": {
49
+ "schema": {
50
+ "$ref": "#/components/schemas/BackupCodesRegenerateRequest"
51
+ }
52
+ }
53
+ },
54
+ "required": true
55
+ },
56
+ "security": [
57
+ {
58
+ "apiKeyAuth": []
59
+ },
60
+ {
61
+ "jwtAuthWithLastLogin": []
62
+ }
63
+ ],
64
+ "responses": {
65
+ "200": {
66
+ "content": {
67
+ "application/json": {
68
+ "schema": {
69
+ "$ref": "#/components/schemas/BackupCodesRegenerateResponse"
70
+ }
71
+ }
72
+ },
73
+ "description": ""
74
+ },
75
+ "400": {
76
+ "content": {
77
+ "application/json": {
78
+ "schema": {
79
+ "description": "Invalid code or 2FA not enabled"
80
+ }
81
+ }
82
+ },
83
+ "description": ""
84
+ }
85
+ },
86
+ "x-async-capable": false
87
+ }
88
+ },
89
+ "/cfg/totp/devices/": {
90
+ "get": {
91
+ "operationId": "cfg_totp_devices_retrieve",
92
+ "description": "List all TOTP devices for user.",
93
+ "tags": [
94
+ "cfg_totp"
95
+ ],
96
+ "security": [
97
+ {
98
+ "apiKeyAuth": []
99
+ },
100
+ {
101
+ "jwtAuthWithLastLogin": []
102
+ }
103
+ ],
104
+ "responses": {
105
+ "200": {
106
+ "content": {
107
+ "application/json": {
108
+ "schema": {
109
+ "$ref": "#/components/schemas/DeviceListResponse"
110
+ }
111
+ }
112
+ },
113
+ "description": ""
114
+ }
115
+ },
116
+ "x-async-capable": false
117
+ }
118
+ },
119
+ "/cfg/totp/devices/{id}/": {
120
+ "delete": {
121
+ "operationId": "cfg_totp_devices_destroy",
122
+ "description": "Delete a TOTP device.\n\nRequires verification code if removing the last/primary device.",
123
+ "parameters": [
124
+ {
125
+ "in": "path",
126
+ "name": "id",
127
+ "schema": {
128
+ "type": "string",
129
+ "format": "uuid"
130
+ },
131
+ "required": true
132
+ }
133
+ ],
134
+ "tags": [
135
+ "cfg_totp"
136
+ ],
137
+ "security": [
138
+ {
139
+ "apiKeyAuth": []
140
+ },
141
+ {
142
+ "jwtAuthWithLastLogin": []
143
+ }
144
+ ],
145
+ "responses": {
146
+ "204": {
147
+ "description": "No response body"
148
+ }
149
+ },
150
+ "x-async-capable": false
151
+ }
152
+ },
153
+ "/cfg/totp/disable/": {
154
+ "post": {
155
+ "operationId": "cfg_totp_disable_create",
156
+ "description": "Completely disable 2FA for account.\n\nRequires verification code.",
157
+ "tags": [
158
+ "cfg_totp"
159
+ ],
160
+ "requestBody": {
161
+ "content": {
162
+ "application/json": {
163
+ "schema": {
164
+ "$ref": "#/components/schemas/DisableRequest"
165
+ }
166
+ }
167
+ },
168
+ "required": true
169
+ },
170
+ "security": [
171
+ {
172
+ "apiKeyAuth": []
173
+ },
174
+ {
175
+ "jwtAuthWithLastLogin": []
176
+ }
177
+ ],
178
+ "responses": {
179
+ "200": {
180
+ "content": {
181
+ "application/json": {
182
+ "schema": {
183
+ "description": "2FA disabled successfully"
184
+ }
185
+ }
186
+ },
187
+ "description": ""
188
+ },
189
+ "400": {
190
+ "content": {
191
+ "application/json": {
192
+ "schema": {
193
+ "description": "Invalid code"
194
+ }
195
+ }
196
+ },
197
+ "description": ""
198
+ }
199
+ },
200
+ "x-async-capable": false
201
+ }
202
+ },
203
+ "/cfg/totp/setup/": {
204
+ "post": {
205
+ "operationId": "cfg_totp_setup_create",
206
+ "description": "Start 2FA setup process.\n\nCreates a new TOTP device and returns QR code for scanning.",
207
+ "tags": [
208
+ "cfg_totp_setup"
209
+ ],
210
+ "requestBody": {
211
+ "content": {
212
+ "application/json": {
213
+ "schema": {
214
+ "$ref": "#/components/schemas/SetupRequest"
215
+ }
216
+ }
217
+ }
218
+ },
219
+ "security": [
220
+ {
221
+ "apiKeyAuth": []
222
+ },
223
+ {
224
+ "jwtAuthWithLastLogin": []
225
+ }
226
+ ],
227
+ "responses": {
228
+ "200": {
229
+ "content": {
230
+ "application/json": {
231
+ "schema": {
232
+ "$ref": "#/components/schemas/SetupResponse"
233
+ }
234
+ }
235
+ },
236
+ "description": ""
237
+ },
238
+ "400": {
239
+ "content": {
240
+ "application/json": {
241
+ "schema": {
242
+ "description": "2FA already enabled or invalid request"
243
+ }
244
+ }
245
+ },
246
+ "description": ""
247
+ }
248
+ },
249
+ "x-async-capable": false
250
+ }
251
+ },
252
+ "/cfg/totp/setup/confirm/": {
253
+ "post": {
254
+ "operationId": "cfg_totp_setup_confirm_create",
255
+ "description": "Confirm 2FA setup with first valid code.\n\nActivates the device and generates backup codes.",
256
+ "tags": [
257
+ "cfg_totp_setup"
258
+ ],
259
+ "requestBody": {
260
+ "content": {
261
+ "application/json": {
262
+ "schema": {
263
+ "$ref": "#/components/schemas/ConfirmSetupRequest"
264
+ }
265
+ }
266
+ },
267
+ "required": true
268
+ },
269
+ "security": [
270
+ {
271
+ "apiKeyAuth": []
272
+ },
273
+ {
274
+ "jwtAuthWithLastLogin": []
275
+ }
276
+ ],
277
+ "responses": {
278
+ "200": {
279
+ "content": {
280
+ "application/json": {
281
+ "schema": {
282
+ "$ref": "#/components/schemas/ConfirmSetupResponse"
283
+ }
284
+ }
285
+ },
286
+ "description": ""
287
+ },
288
+ "400": {
289
+ "content": {
290
+ "application/json": {
291
+ "schema": {
292
+ "description": "Invalid code or setup expired"
293
+ }
294
+ }
295
+ },
296
+ "description": ""
297
+ }
298
+ },
299
+ "x-async-capable": false
300
+ }
301
+ },
302
+ "/cfg/totp/verify/": {
303
+ "post": {
304
+ "operationId": "cfg_totp_verify_create",
305
+ "description": "Verify TOTP code for 2FA session.\n\nCompletes authentication and returns JWT tokens on success.",
306
+ "tags": [
307
+ "cfg_totp_verify"
308
+ ],
309
+ "requestBody": {
310
+ "content": {
311
+ "application/json": {
312
+ "schema": {
313
+ "$ref": "#/components/schemas/VerifyRequest"
314
+ }
315
+ }
316
+ },
317
+ "required": true
318
+ },
319
+ "security": [
320
+ {
321
+ "apiKeyAuth": []
322
+ },
323
+ {
324
+ "jwtAuthWithLastLogin": []
325
+ },
326
+ {}
327
+ ],
328
+ "responses": {
329
+ "200": {
330
+ "content": {
331
+ "application/json": {
332
+ "schema": {
333
+ "$ref": "#/components/schemas/VerifyResponse"
334
+ }
335
+ }
336
+ },
337
+ "description": ""
338
+ },
339
+ "400": {
340
+ "content": {
341
+ "application/json": {
342
+ "schema": {
343
+ "description": "Invalid code or session"
344
+ }
345
+ }
346
+ },
347
+ "description": ""
348
+ },
349
+ "403": {
350
+ "content": {
351
+ "application/json": {
352
+ "schema": {
353
+ "description": "Too many attempts"
354
+ }
355
+ }
356
+ },
357
+ "description": ""
358
+ }
359
+ },
360
+ "x-async-capable": false
361
+ }
362
+ },
363
+ "/cfg/totp/verify/backup/": {
364
+ "post": {
365
+ "operationId": "cfg_totp_verify_backup_create",
366
+ "description": "Verify backup recovery code for 2FA session.\n\nAlternative verification method when TOTP device unavailable.",
367
+ "tags": [
368
+ "cfg_totp_verify"
369
+ ],
370
+ "requestBody": {
371
+ "content": {
372
+ "application/json": {
373
+ "schema": {
374
+ "$ref": "#/components/schemas/VerifyBackupRequest"
375
+ }
376
+ }
377
+ },
378
+ "required": true
379
+ },
380
+ "security": [
381
+ {
382
+ "apiKeyAuth": []
383
+ },
384
+ {
385
+ "jwtAuthWithLastLogin": []
386
+ },
387
+ {}
388
+ ],
389
+ "responses": {
390
+ "200": {
391
+ "content": {
392
+ "application/json": {
393
+ "schema": {
394
+ "$ref": "#/components/schemas/VerifyResponse"
395
+ }
396
+ }
397
+ },
398
+ "description": ""
399
+ },
400
+ "400": {
401
+ "content": {
402
+ "application/json": {
403
+ "schema": {
404
+ "description": "Invalid backup code or session"
405
+ }
406
+ }
407
+ },
408
+ "description": ""
409
+ }
410
+ },
411
+ "x-async-capable": false
412
+ }
413
+ }
414
+ },
415
+ "components": {
416
+ "schemas": {
417
+ "BackupCodesRegenerateRequest": {
418
+ "type": "object",
419
+ "description": "Serializer for regenerating backup codes.",
420
+ "properties": {
421
+ "code": {
422
+ "type": "string",
423
+ "minLength": 6,
424
+ "description": "TOTP code for verification",
425
+ "maxLength": 6
426
+ }
427
+ },
428
+ "required": [
429
+ "code"
430
+ ]
431
+ },
432
+ "BackupCodesRegenerateResponse": {
433
+ "type": "object",
434
+ "description": "Response serializer for backup codes regeneration.",
435
+ "properties": {
436
+ "backup_codes": {
437
+ "type": "array",
438
+ "items": {
439
+ "type": "string"
440
+ },
441
+ "description": "List of new backup codes (save these!)"
442
+ },
443
+ "warning": {
444
+ "type": "string",
445
+ "description": "Warning about previous codes being invalidated"
446
+ }
447
+ },
448
+ "required": [
449
+ "backup_codes",
450
+ "warning"
451
+ ]
452
+ },
453
+ "BackupCodesStatus": {
454
+ "type": "object",
455
+ "description": "Serializer for backup codes status.",
456
+ "properties": {
457
+ "remaining_count": {
458
+ "type": "integer",
459
+ "description": "Number of unused backup codes"
460
+ },
461
+ "total_generated": {
462
+ "type": "integer",
463
+ "description": "Total number of codes generated"
464
+ },
465
+ "warning": {
466
+ "type": [
467
+ "string",
468
+ "null"
469
+ ],
470
+ "description": "Warning if running low on codes"
471
+ }
472
+ },
473
+ "required": [
474
+ "remaining_count",
475
+ "total_generated"
476
+ ]
477
+ },
478
+ "ConfirmSetupRequest": {
479
+ "type": "object",
480
+ "description": "Serializer for confirming 2FA setup with first code.",
481
+ "properties": {
482
+ "device_id": {
483
+ "type": "string",
484
+ "format": "uuid",
485
+ "description": "Device ID from setup response"
486
+ },
487
+ "code": {
488
+ "type": "string",
489
+ "minLength": 6,
490
+ "description": "6-digit TOTP code from authenticator app",
491
+ "maxLength": 6
492
+ }
493
+ },
494
+ "required": [
495
+ "code",
496
+ "device_id"
497
+ ]
498
+ },
499
+ "ConfirmSetupResponse": {
500
+ "type": "object",
501
+ "description": "Response serializer for setup confirmation.",
502
+ "properties": {
503
+ "message": {
504
+ "type": "string"
505
+ },
506
+ "backup_codes": {
507
+ "type": "array",
508
+ "items": {
509
+ "type": "string"
510
+ },
511
+ "description": "List of backup recovery codes (save these!)"
512
+ },
513
+ "backup_codes_warning": {
514
+ "type": "string",
515
+ "description": "Warning message about backup codes"
516
+ }
517
+ },
518
+ "required": [
519
+ "backup_codes",
520
+ "backup_codes_warning",
521
+ "message"
522
+ ]
523
+ },
524
+ "DeviceList": {
525
+ "type": "object",
526
+ "description": "Serializer for listing TOTP devices.",
527
+ "properties": {
528
+ "id": {
529
+ "type": "string",
530
+ "format": "uuid",
531
+ "readOnly": true
532
+ },
533
+ "name": {
534
+ "type": "string",
535
+ "readOnly": true,
536
+ "description": "Device name for identification"
537
+ },
538
+ "is_primary": {
539
+ "type": "boolean",
540
+ "readOnly": true,
541
+ "description": "Primary device used for verification"
542
+ },
543
+ "status": {
544
+ "allOf": [
545
+ {
546
+ "$ref": "#/components/schemas/DeviceStatusEnum"
547
+ }
548
+ ],
549
+ "readOnly": true
550
+ },
551
+ "created_at": {
552
+ "type": "string",
553
+ "format": "date-time",
554
+ "readOnly": true
555
+ },
556
+ "confirmed_at": {
557
+ "type": [
558
+ "string",
559
+ "null"
560
+ ],
561
+ "format": "date-time",
562
+ "readOnly": true,
563
+ "description": "When device setup was confirmed"
564
+ },
565
+ "last_used_at": {
566
+ "type": [
567
+ "string",
568
+ "null"
569
+ ],
570
+ "format": "date-time",
571
+ "readOnly": true,
572
+ "description": "Last successful verification"
573
+ }
574
+ },
575
+ "required": [
576
+ "confirmed_at",
577
+ "created_at",
578
+ "id",
579
+ "is_primary",
580
+ "last_used_at",
581
+ "name",
582
+ "status"
583
+ ]
584
+ },
585
+ "DeviceListResponse": {
586
+ "type": "object",
587
+ "description": "Response serializer for device list endpoint.",
588
+ "properties": {
589
+ "devices": {
590
+ "type": "array",
591
+ "items": {
592
+ "$ref": "#/components/schemas/DeviceList"
593
+ }
594
+ },
595
+ "has_2fa_enabled": {
596
+ "type": "boolean"
597
+ }
598
+ },
599
+ "required": [
600
+ "devices",
601
+ "has_2fa_enabled"
602
+ ]
603
+ },
604
+ "DeviceStatusEnum": {
605
+ "enum": [
606
+ "pending",
607
+ "active",
608
+ "disabled"
609
+ ],
610
+ "type": "string",
611
+ "description": "* `pending` - Pending Confirmation\n* `active` - Active\n* `disabled` - Disabled"
612
+ },
613
+ "DisableRequest": {
614
+ "type": "object",
615
+ "description": "Serializer for completely disabling 2FA.",
616
+ "properties": {
617
+ "code": {
618
+ "type": "string",
619
+ "minLength": 6,
620
+ "description": "TOTP code for verification",
621
+ "maxLength": 6
622
+ }
623
+ },
624
+ "required": [
625
+ "code"
626
+ ]
627
+ },
628
+ "SetupRequest": {
629
+ "type": "object",
630
+ "description": "Serializer for starting 2FA setup.",
631
+ "properties": {
632
+ "device_name": {
633
+ "type": "string",
634
+ "minLength": 1,
635
+ "default": "Authenticator",
636
+ "description": "Device name for identification (e.g., 'My iPhone')",
637
+ "maxLength": 100
638
+ }
639
+ }
640
+ },
641
+ "SetupResponse": {
642
+ "type": "object",
643
+ "description": "Response serializer for setup initiation.",
644
+ "properties": {
645
+ "device_id": {
646
+ "type": "string",
647
+ "format": "uuid",
648
+ "description": "Device ID to use for confirmation"
649
+ },
650
+ "secret": {
651
+ "type": "string",
652
+ "description": "Base32-encoded TOTP secret (for manual entry)"
653
+ },
654
+ "provisioning_uri": {
655
+ "type": "string",
656
+ "description": "otpauth:// URI for QR code generation"
657
+ },
658
+ "qr_code_base64": {
659
+ "type": "string",
660
+ "description": "Base64-encoded QR code image (data URI)"
661
+ },
662
+ "expires_in": {
663
+ "type": "integer",
664
+ "description": "Seconds until setup expires (typically 600 = 10 minutes)"
665
+ }
666
+ },
667
+ "required": [
668
+ "device_id",
669
+ "expires_in",
670
+ "provisioning_uri",
671
+ "qr_code_base64",
672
+ "secret"
673
+ ]
674
+ },
675
+ "TotpVerifyUser": {
676
+ "type": "object",
677
+ "description": "User data returned after 2FA verification.",
678
+ "properties": {
679
+ "id": {
680
+ "type": "integer",
681
+ "readOnly": true
682
+ },
683
+ "email": {
684
+ "type": "string",
685
+ "format": "email",
686
+ "readOnly": true
687
+ },
688
+ "first_name": {
689
+ "type": [
690
+ "string",
691
+ "null"
692
+ ],
693
+ "maxLength": 50
694
+ },
695
+ "last_name": {
696
+ "type": [
697
+ "string",
698
+ "null"
699
+ ],
700
+ "maxLength": 50
701
+ },
702
+ "full_name": {
703
+ "type": "string",
704
+ "description": "Get user's full name.",
705
+ "readOnly": true
706
+ },
707
+ "initials": {
708
+ "type": "string",
709
+ "description": "Get user's initials for avatar fallback.",
710
+ "readOnly": true
711
+ },
712
+ "display_username": {
713
+ "type": "string",
714
+ "description": "Get formatted username for display.",
715
+ "readOnly": true
716
+ },
717
+ "company": {
718
+ "type": [
719
+ "string",
720
+ "null"
721
+ ],
722
+ "maxLength": 100
723
+ },
724
+ "phone": {
725
+ "type": [
726
+ "string",
727
+ "null"
728
+ ],
729
+ "maxLength": 20
730
+ },
731
+ "position": {
732
+ "type": [
733
+ "string",
734
+ "null"
735
+ ],
736
+ "maxLength": 100
737
+ },
738
+ "language": {
739
+ "type": [
740
+ "string",
741
+ "null"
742
+ ],
743
+ "maxLength": 10
744
+ },
745
+ "timezone": {
746
+ "type": [
747
+ "string",
748
+ "null"
749
+ ],
750
+ "maxLength": 64
751
+ },
752
+ "avatar": {
753
+ "type": [
754
+ "string",
755
+ "null"
756
+ ],
757
+ "format": "uri",
758
+ "readOnly": true
759
+ },
760
+ "is_staff": {
761
+ "type": "boolean",
762
+ "readOnly": true,
763
+ "title": "Staff status",
764
+ "description": "Designates whether the user can log into this admin site."
765
+ },
766
+ "is_superuser": {
767
+ "type": "boolean",
768
+ "readOnly": true,
769
+ "title": "Superuser status",
770
+ "description": "Designates that this user has all permissions without explicitly assigning them."
771
+ },
772
+ "date_joined": {
773
+ "type": "string",
774
+ "format": "date-time",
775
+ "readOnly": true
776
+ },
777
+ "last_login": {
778
+ "type": [
779
+ "string",
780
+ "null"
781
+ ],
782
+ "format": "date-time",
783
+ "readOnly": true
784
+ },
785
+ "unanswered_messages_count": {
786
+ "type": "integer",
787
+ "readOnly": true,
788
+ "default": 0
789
+ },
790
+ "api_key": {
791
+ "type": [
792
+ "string",
793
+ "null"
794
+ ],
795
+ "readOnly": true
796
+ }
797
+ },
798
+ "required": [
799
+ "api_key",
800
+ "avatar",
801
+ "date_joined",
802
+ "display_username",
803
+ "email",
804
+ "full_name",
805
+ "id",
806
+ "initials",
807
+ "is_staff",
808
+ "is_superuser",
809
+ "last_login",
810
+ "unanswered_messages_count"
811
+ ]
812
+ },
813
+ "VerifyBackupRequest": {
814
+ "type": "object",
815
+ "description": "Serializer for backup code verification during login.",
816
+ "properties": {
817
+ "session_id": {
818
+ "type": "string",
819
+ "format": "uuid",
820
+ "description": "2FA session ID from login response"
821
+ },
822
+ "backup_code": {
823
+ "type": "string",
824
+ "minLength": 8,
825
+ "description": "8-character backup recovery code",
826
+ "maxLength": 8
827
+ }
828
+ },
829
+ "required": [
830
+ "backup_code",
831
+ "session_id"
832
+ ]
833
+ },
834
+ "VerifyRequest": {
835
+ "type": "object",
836
+ "description": "Serializer for TOTP code verification during login.",
837
+ "properties": {
838
+ "session_id": {
839
+ "type": "string",
840
+ "format": "uuid",
841
+ "description": "2FA session ID from login response"
842
+ },
843
+ "code": {
844
+ "type": "string",
845
+ "minLength": 6,
846
+ "description": "6-digit TOTP code from authenticator app",
847
+ "maxLength": 6
848
+ }
849
+ },
850
+ "required": [
851
+ "code",
852
+ "session_id"
853
+ ]
854
+ },
855
+ "VerifyResponse": {
856
+ "type": "object",
857
+ "description": "Response serializer for successful 2FA verification.",
858
+ "properties": {
859
+ "message": {
860
+ "type": "string"
861
+ },
862
+ "access_token": {
863
+ "type": "string",
864
+ "description": "JWT access token"
865
+ },
866
+ "refresh_token": {
867
+ "type": "string",
868
+ "description": "JWT refresh token"
869
+ },
870
+ "user": {
871
+ "allOf": [
872
+ {
873
+ "$ref": "#/components/schemas/TotpVerifyUser"
874
+ }
875
+ ],
876
+ "description": "User profile data"
877
+ },
878
+ "remaining_backup_codes": {
879
+ "type": "integer",
880
+ "description": "Number of remaining backup codes (if backup code was used)"
881
+ },
882
+ "warning": {
883
+ "type": "string",
884
+ "description": "Warning message (e.g., low backup codes)"
885
+ }
886
+ },
887
+ "required": [
888
+ "access_token",
889
+ "message",
890
+ "refresh_token",
891
+ "user"
892
+ ]
893
+ }
894
+ },
895
+ "securitySchemes": {
896
+ "apiKeyAuth": {
897
+ "type": "apiKey",
898
+ "in": "header",
899
+ "name": "X-API-Key"
900
+ },
901
+ "basicAuth": {
902
+ "type": "http",
903
+ "scheme": "basic"
904
+ },
905
+ "cookieAuth": {
906
+ "type": "apiKey",
907
+ "in": "cookie",
908
+ "name": "sessionid"
909
+ },
910
+ "jwtAuth": {
911
+ "type": "http",
912
+ "scheme": "bearer",
913
+ "bearerFormat": "JWT"
914
+ },
915
+ "jwtAuthWithLastLogin": {
916
+ "type": "http",
917
+ "scheme": "bearer",
918
+ "bearerFormat": "JWT"
919
+ }
920
+ }
921
+ },
922
+ "servers": [
923
+ {
924
+ "url": "http://localhost:8000"
925
+ }
926
+ ]
927
+ }