@faable/auth-sdk 2.8.23 → 2.8.25

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.
package/spec/openapi.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "@faablecloud/auth",
5
5
  "description": "Auth Platform made by Faable. Manage Users and Roles",
6
- "version": "2.89.0",
6
+ "version": "2.91.0",
7
7
  "license": {
8
8
  "name": "private",
9
9
  "url": "https://faable.com/docs/platform/privacy-policy"
@@ -3422,6 +3422,102 @@
3422
3422
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
3423
3423
  "nullable": true
3424
3424
  },
3425
+ "internal_metadata": {
3426
+ "type": "object",
3427
+ "properties": {
3428
+ "last_ip_info": {
3429
+ "type": "object",
3430
+ "required": [
3431
+ "ip",
3432
+ "resolved_at"
3433
+ ],
3434
+ "properties": {
3435
+ "ip": {
3436
+ "type": "string"
3437
+ },
3438
+ "country_code": {
3439
+ "type": "string"
3440
+ },
3441
+ "country_name": {
3442
+ "type": "string"
3443
+ },
3444
+ "asn": {
3445
+ "type": "integer"
3446
+ },
3447
+ "as_org": {
3448
+ "type": "string"
3449
+ },
3450
+ "datacenter": {
3451
+ "type": "boolean"
3452
+ },
3453
+ "apple_private_relay": {
3454
+ "type": "boolean"
3455
+ },
3456
+ "resolved_at": {
3457
+ "type": "string",
3458
+ "format": "date-time"
3459
+ }
3460
+ }
3461
+ },
3462
+ "signup": {
3463
+ "type": "object",
3464
+ "required": [
3465
+ "at"
3466
+ ],
3467
+ "properties": {
3468
+ "ip": {
3469
+ "type": "string"
3470
+ },
3471
+ "user_agent": {
3472
+ "type": "string"
3473
+ },
3474
+ "language": {
3475
+ "type": "string"
3476
+ },
3477
+ "at": {
3478
+ "type": "string",
3479
+ "format": "date-time"
3480
+ },
3481
+ "ip_info": {
3482
+ "type": "object",
3483
+ "required": [
3484
+ "ip",
3485
+ "resolved_at"
3486
+ ],
3487
+ "properties": {
3488
+ "ip": {
3489
+ "type": "string"
3490
+ },
3491
+ "country_code": {
3492
+ "type": "string"
3493
+ },
3494
+ "country_name": {
3495
+ "type": "string"
3496
+ },
3497
+ "asn": {
3498
+ "type": "integer"
3499
+ },
3500
+ "as_org": {
3501
+ "type": "string"
3502
+ },
3503
+ "datacenter": {
3504
+ "type": "boolean"
3505
+ },
3506
+ "apple_private_relay": {
3507
+ "type": "boolean"
3508
+ },
3509
+ "resolved_at": {
3510
+ "type": "string",
3511
+ "format": "date-time"
3512
+ }
3513
+ }
3514
+ }
3515
+ }
3516
+ }
3517
+ },
3518
+ "readOnly": true,
3519
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
3520
+ },
3425
3521
  "suspended": {
3426
3522
  "type": "boolean",
3427
3523
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",
@@ -3710,6 +3806,23 @@
3710
3806
  "ip": {
3711
3807
  "type": "string"
3712
3808
  },
3809
+ "source": {
3810
+ "anyOf": [
3811
+ {
3812
+ "type": "string",
3813
+ "enum": [
3814
+ "last_login"
3815
+ ]
3816
+ },
3817
+ {
3818
+ "type": "string",
3819
+ "enum": [
3820
+ "signup"
3821
+ ]
3822
+ }
3823
+ ],
3824
+ "description": "`last_login`: the IP of the latest login. `signup`: the user never logged in, so this is the IP of the request that created them."
3825
+ },
3713
3826
  "geo": {
3714
3827
  "type": "object",
3715
3828
  "required": [
@@ -3760,8 +3873,6 @@
3760
3873
  "signals": {
3761
3874
  "type": "object",
3762
3875
  "required": [
3763
- "datacenter",
3764
- "apple_private_relay",
3765
3876
  "active_blocks",
3766
3877
  "network_active_blocks",
3767
3878
  "suspended_denies",
@@ -3787,7 +3898,7 @@
3787
3898
  "type": "integer"
3788
3899
  }
3789
3900
  },
3790
- "description": "The same values a tenant Action reads as `event.request.ip_*` for a login from this IP now."
3901
+ "description": "The same values a tenant Action reads as `event.request.ip_*` for a login from this IP now. `datacenter` and `apple_private_relay` are absent when the IP service cannot answer."
3791
3902
  },
3792
3903
  "activity": {
3793
3904
  "type": "object",
@@ -26177,6 +26288,102 @@
26177
26288
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
26178
26289
  "nullable": true
26179
26290
  },
26291
+ "internal_metadata": {
26292
+ "type": "object",
26293
+ "properties": {
26294
+ "last_ip_info": {
26295
+ "type": "object",
26296
+ "required": [
26297
+ "ip",
26298
+ "resolved_at"
26299
+ ],
26300
+ "properties": {
26301
+ "ip": {
26302
+ "type": "string"
26303
+ },
26304
+ "country_code": {
26305
+ "type": "string"
26306
+ },
26307
+ "country_name": {
26308
+ "type": "string"
26309
+ },
26310
+ "asn": {
26311
+ "type": "integer"
26312
+ },
26313
+ "as_org": {
26314
+ "type": "string"
26315
+ },
26316
+ "datacenter": {
26317
+ "type": "boolean"
26318
+ },
26319
+ "apple_private_relay": {
26320
+ "type": "boolean"
26321
+ },
26322
+ "resolved_at": {
26323
+ "type": "string",
26324
+ "format": "date-time"
26325
+ }
26326
+ }
26327
+ },
26328
+ "signup": {
26329
+ "type": "object",
26330
+ "required": [
26331
+ "at"
26332
+ ],
26333
+ "properties": {
26334
+ "ip": {
26335
+ "type": "string"
26336
+ },
26337
+ "user_agent": {
26338
+ "type": "string"
26339
+ },
26340
+ "language": {
26341
+ "type": "string"
26342
+ },
26343
+ "at": {
26344
+ "type": "string",
26345
+ "format": "date-time"
26346
+ },
26347
+ "ip_info": {
26348
+ "type": "object",
26349
+ "required": [
26350
+ "ip",
26351
+ "resolved_at"
26352
+ ],
26353
+ "properties": {
26354
+ "ip": {
26355
+ "type": "string"
26356
+ },
26357
+ "country_code": {
26358
+ "type": "string"
26359
+ },
26360
+ "country_name": {
26361
+ "type": "string"
26362
+ },
26363
+ "asn": {
26364
+ "type": "integer"
26365
+ },
26366
+ "as_org": {
26367
+ "type": "string"
26368
+ },
26369
+ "datacenter": {
26370
+ "type": "boolean"
26371
+ },
26372
+ "apple_private_relay": {
26373
+ "type": "boolean"
26374
+ },
26375
+ "resolved_at": {
26376
+ "type": "string",
26377
+ "format": "date-time"
26378
+ }
26379
+ }
26380
+ }
26381
+ }
26382
+ }
26383
+ },
26384
+ "readOnly": true,
26385
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
26386
+ },
26180
26387
  "suspended": {
26181
26388
  "type": "boolean",
26182
26389
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",
@@ -26749,6 +26956,102 @@
26749
26956
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
26750
26957
  "nullable": true
26751
26958
  },
26959
+ "internal_metadata": {
26960
+ "type": "object",
26961
+ "properties": {
26962
+ "last_ip_info": {
26963
+ "type": "object",
26964
+ "required": [
26965
+ "ip",
26966
+ "resolved_at"
26967
+ ],
26968
+ "properties": {
26969
+ "ip": {
26970
+ "type": "string"
26971
+ },
26972
+ "country_code": {
26973
+ "type": "string"
26974
+ },
26975
+ "country_name": {
26976
+ "type": "string"
26977
+ },
26978
+ "asn": {
26979
+ "type": "integer"
26980
+ },
26981
+ "as_org": {
26982
+ "type": "string"
26983
+ },
26984
+ "datacenter": {
26985
+ "type": "boolean"
26986
+ },
26987
+ "apple_private_relay": {
26988
+ "type": "boolean"
26989
+ },
26990
+ "resolved_at": {
26991
+ "type": "string",
26992
+ "format": "date-time"
26993
+ }
26994
+ }
26995
+ },
26996
+ "signup": {
26997
+ "type": "object",
26998
+ "required": [
26999
+ "at"
27000
+ ],
27001
+ "properties": {
27002
+ "ip": {
27003
+ "type": "string"
27004
+ },
27005
+ "user_agent": {
27006
+ "type": "string"
27007
+ },
27008
+ "language": {
27009
+ "type": "string"
27010
+ },
27011
+ "at": {
27012
+ "type": "string",
27013
+ "format": "date-time"
27014
+ },
27015
+ "ip_info": {
27016
+ "type": "object",
27017
+ "required": [
27018
+ "ip",
27019
+ "resolved_at"
27020
+ ],
27021
+ "properties": {
27022
+ "ip": {
27023
+ "type": "string"
27024
+ },
27025
+ "country_code": {
27026
+ "type": "string"
27027
+ },
27028
+ "country_name": {
27029
+ "type": "string"
27030
+ },
27031
+ "asn": {
27032
+ "type": "integer"
27033
+ },
27034
+ "as_org": {
27035
+ "type": "string"
27036
+ },
27037
+ "datacenter": {
27038
+ "type": "boolean"
27039
+ },
27040
+ "apple_private_relay": {
27041
+ "type": "boolean"
27042
+ },
27043
+ "resolved_at": {
27044
+ "type": "string",
27045
+ "format": "date-time"
27046
+ }
27047
+ }
27048
+ }
27049
+ }
27050
+ }
27051
+ },
27052
+ "readOnly": true,
27053
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
27054
+ },
26752
27055
  "suspended": {
26753
27056
  "type": "boolean",
26754
27057
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",
@@ -27400,6 +27703,102 @@
27400
27703
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
27401
27704
  "nullable": true
27402
27705
  },
27706
+ "internal_metadata": {
27707
+ "type": "object",
27708
+ "properties": {
27709
+ "last_ip_info": {
27710
+ "type": "object",
27711
+ "required": [
27712
+ "ip",
27713
+ "resolved_at"
27714
+ ],
27715
+ "properties": {
27716
+ "ip": {
27717
+ "type": "string"
27718
+ },
27719
+ "country_code": {
27720
+ "type": "string"
27721
+ },
27722
+ "country_name": {
27723
+ "type": "string"
27724
+ },
27725
+ "asn": {
27726
+ "type": "integer"
27727
+ },
27728
+ "as_org": {
27729
+ "type": "string"
27730
+ },
27731
+ "datacenter": {
27732
+ "type": "boolean"
27733
+ },
27734
+ "apple_private_relay": {
27735
+ "type": "boolean"
27736
+ },
27737
+ "resolved_at": {
27738
+ "type": "string",
27739
+ "format": "date-time"
27740
+ }
27741
+ }
27742
+ },
27743
+ "signup": {
27744
+ "type": "object",
27745
+ "required": [
27746
+ "at"
27747
+ ],
27748
+ "properties": {
27749
+ "ip": {
27750
+ "type": "string"
27751
+ },
27752
+ "user_agent": {
27753
+ "type": "string"
27754
+ },
27755
+ "language": {
27756
+ "type": "string"
27757
+ },
27758
+ "at": {
27759
+ "type": "string",
27760
+ "format": "date-time"
27761
+ },
27762
+ "ip_info": {
27763
+ "type": "object",
27764
+ "required": [
27765
+ "ip",
27766
+ "resolved_at"
27767
+ ],
27768
+ "properties": {
27769
+ "ip": {
27770
+ "type": "string"
27771
+ },
27772
+ "country_code": {
27773
+ "type": "string"
27774
+ },
27775
+ "country_name": {
27776
+ "type": "string"
27777
+ },
27778
+ "asn": {
27779
+ "type": "integer"
27780
+ },
27781
+ "as_org": {
27782
+ "type": "string"
27783
+ },
27784
+ "datacenter": {
27785
+ "type": "boolean"
27786
+ },
27787
+ "apple_private_relay": {
27788
+ "type": "boolean"
27789
+ },
27790
+ "resolved_at": {
27791
+ "type": "string",
27792
+ "format": "date-time"
27793
+ }
27794
+ }
27795
+ }
27796
+ }
27797
+ }
27798
+ },
27799
+ "readOnly": true,
27800
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
27801
+ },
27403
27802
  "suspended": {
27404
27803
  "type": "boolean",
27405
27804
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",
@@ -27972,6 +28371,102 @@
27972
28371
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
27973
28372
  "nullable": true
27974
28373
  },
28374
+ "internal_metadata": {
28375
+ "type": "object",
28376
+ "properties": {
28377
+ "last_ip_info": {
28378
+ "type": "object",
28379
+ "required": [
28380
+ "ip",
28381
+ "resolved_at"
28382
+ ],
28383
+ "properties": {
28384
+ "ip": {
28385
+ "type": "string"
28386
+ },
28387
+ "country_code": {
28388
+ "type": "string"
28389
+ },
28390
+ "country_name": {
28391
+ "type": "string"
28392
+ },
28393
+ "asn": {
28394
+ "type": "integer"
28395
+ },
28396
+ "as_org": {
28397
+ "type": "string"
28398
+ },
28399
+ "datacenter": {
28400
+ "type": "boolean"
28401
+ },
28402
+ "apple_private_relay": {
28403
+ "type": "boolean"
28404
+ },
28405
+ "resolved_at": {
28406
+ "type": "string",
28407
+ "format": "date-time"
28408
+ }
28409
+ }
28410
+ },
28411
+ "signup": {
28412
+ "type": "object",
28413
+ "required": [
28414
+ "at"
28415
+ ],
28416
+ "properties": {
28417
+ "ip": {
28418
+ "type": "string"
28419
+ },
28420
+ "user_agent": {
28421
+ "type": "string"
28422
+ },
28423
+ "language": {
28424
+ "type": "string"
28425
+ },
28426
+ "at": {
28427
+ "type": "string",
28428
+ "format": "date-time"
28429
+ },
28430
+ "ip_info": {
28431
+ "type": "object",
28432
+ "required": [
28433
+ "ip",
28434
+ "resolved_at"
28435
+ ],
28436
+ "properties": {
28437
+ "ip": {
28438
+ "type": "string"
28439
+ },
28440
+ "country_code": {
28441
+ "type": "string"
28442
+ },
28443
+ "country_name": {
28444
+ "type": "string"
28445
+ },
28446
+ "asn": {
28447
+ "type": "integer"
28448
+ },
28449
+ "as_org": {
28450
+ "type": "string"
28451
+ },
28452
+ "datacenter": {
28453
+ "type": "boolean"
28454
+ },
28455
+ "apple_private_relay": {
28456
+ "type": "boolean"
28457
+ },
28458
+ "resolved_at": {
28459
+ "type": "string",
28460
+ "format": "date-time"
28461
+ }
28462
+ }
28463
+ }
28464
+ }
28465
+ }
28466
+ },
28467
+ "readOnly": true,
28468
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
28469
+ },
27975
28470
  "suspended": {
27976
28471
  "type": "boolean",
27977
28472
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",
@@ -69741,6 +70236,102 @@
69741
70236
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
69742
70237
  "nullable": true
69743
70238
  },
70239
+ "internal_metadata": {
70240
+ "type": "object",
70241
+ "properties": {
70242
+ "last_ip_info": {
70243
+ "type": "object",
70244
+ "required": [
70245
+ "ip",
70246
+ "resolved_at"
70247
+ ],
70248
+ "properties": {
70249
+ "ip": {
70250
+ "type": "string"
70251
+ },
70252
+ "country_code": {
70253
+ "type": "string"
70254
+ },
70255
+ "country_name": {
70256
+ "type": "string"
70257
+ },
70258
+ "asn": {
70259
+ "type": "integer"
70260
+ },
70261
+ "as_org": {
70262
+ "type": "string"
70263
+ },
70264
+ "datacenter": {
70265
+ "type": "boolean"
70266
+ },
70267
+ "apple_private_relay": {
70268
+ "type": "boolean"
70269
+ },
70270
+ "resolved_at": {
70271
+ "type": "string",
70272
+ "format": "date-time"
70273
+ }
70274
+ }
70275
+ },
70276
+ "signup": {
70277
+ "type": "object",
70278
+ "required": [
70279
+ "at"
70280
+ ],
70281
+ "properties": {
70282
+ "ip": {
70283
+ "type": "string"
70284
+ },
70285
+ "user_agent": {
70286
+ "type": "string"
70287
+ },
70288
+ "language": {
70289
+ "type": "string"
70290
+ },
70291
+ "at": {
70292
+ "type": "string",
70293
+ "format": "date-time"
70294
+ },
70295
+ "ip_info": {
70296
+ "type": "object",
70297
+ "required": [
70298
+ "ip",
70299
+ "resolved_at"
70300
+ ],
70301
+ "properties": {
70302
+ "ip": {
70303
+ "type": "string"
70304
+ },
70305
+ "country_code": {
70306
+ "type": "string"
70307
+ },
70308
+ "country_name": {
70309
+ "type": "string"
70310
+ },
70311
+ "asn": {
70312
+ "type": "integer"
70313
+ },
70314
+ "as_org": {
70315
+ "type": "string"
70316
+ },
70317
+ "datacenter": {
70318
+ "type": "boolean"
70319
+ },
70320
+ "apple_private_relay": {
70321
+ "type": "boolean"
70322
+ },
70323
+ "resolved_at": {
70324
+ "type": "string",
70325
+ "format": "date-time"
70326
+ }
70327
+ }
70328
+ }
70329
+ }
70330
+ }
70331
+ },
70332
+ "readOnly": true,
70333
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
70334
+ },
69744
70335
  "suspended": {
69745
70336
  "type": "boolean",
69746
70337
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",
@@ -70321,6 +70912,102 @@
70321
70912
  "description": "Primary Accept-Language subtag seen at this user's FIRST login (e.g. \"zh\"). Written once and never updated, so a later login whose language differs is visible as `event.stats.language_changed` in actions — a cross-session signal no single request can produce.",
70322
70913
  "nullable": true
70323
70914
  },
70915
+ "internal_metadata": {
70916
+ "type": "object",
70917
+ "properties": {
70918
+ "last_ip_info": {
70919
+ "type": "object",
70920
+ "required": [
70921
+ "ip",
70922
+ "resolved_at"
70923
+ ],
70924
+ "properties": {
70925
+ "ip": {
70926
+ "type": "string"
70927
+ },
70928
+ "country_code": {
70929
+ "type": "string"
70930
+ },
70931
+ "country_name": {
70932
+ "type": "string"
70933
+ },
70934
+ "asn": {
70935
+ "type": "integer"
70936
+ },
70937
+ "as_org": {
70938
+ "type": "string"
70939
+ },
70940
+ "datacenter": {
70941
+ "type": "boolean"
70942
+ },
70943
+ "apple_private_relay": {
70944
+ "type": "boolean"
70945
+ },
70946
+ "resolved_at": {
70947
+ "type": "string",
70948
+ "format": "date-time"
70949
+ }
70950
+ }
70951
+ },
70952
+ "signup": {
70953
+ "type": "object",
70954
+ "required": [
70955
+ "at"
70956
+ ],
70957
+ "properties": {
70958
+ "ip": {
70959
+ "type": "string"
70960
+ },
70961
+ "user_agent": {
70962
+ "type": "string"
70963
+ },
70964
+ "language": {
70965
+ "type": "string"
70966
+ },
70967
+ "at": {
70968
+ "type": "string",
70969
+ "format": "date-time"
70970
+ },
70971
+ "ip_info": {
70972
+ "type": "object",
70973
+ "required": [
70974
+ "ip",
70975
+ "resolved_at"
70976
+ ],
70977
+ "properties": {
70978
+ "ip": {
70979
+ "type": "string"
70980
+ },
70981
+ "country_code": {
70982
+ "type": "string"
70983
+ },
70984
+ "country_name": {
70985
+ "type": "string"
70986
+ },
70987
+ "asn": {
70988
+ "type": "integer"
70989
+ },
70990
+ "as_org": {
70991
+ "type": "string"
70992
+ },
70993
+ "datacenter": {
70994
+ "type": "boolean"
70995
+ },
70996
+ "apple_private_relay": {
70997
+ "type": "boolean"
70998
+ },
70999
+ "resolved_at": {
71000
+ "type": "string",
71001
+ "format": "date-time"
71002
+ }
71003
+ }
71004
+ }
71005
+ }
71006
+ }
71007
+ },
71008
+ "readOnly": true,
71009
+ "description": "Computed by Faable Auth, never writable through the API. `last_ip_info`: country, network (ASN) and reputation of `last_ip`, resolved after each login. `signup`: the IP, browser and language of the request that created the user, so a user who signed up but never logged in is not a blank — with the same resolution in `ip_info`. IP geolocation by DB-IP (CC BY 4.0)."
71010
+ },
70324
71011
  "suspended": {
70325
71012
  "type": "boolean",
70326
71013
  "description": "true while the user is suspended. A suspended user is rejected at every login flow, token grant, session use and management-API call.",